0. Git 日常使用

    初识git, 只是了解一个大概, 和一些基本概念, 比如暂存, 提交,分支等. 总结一下常用的指令, 足够应付日常的工作:



1. 本地代码提交

察看工作空间的代码状态:

git status

终端会显示类似的信息:

On branch master  
      Changes to be committed:
      (use "git reset HEAD <file> ..." to un-stage)

       new file:   src/main/res/layout/letv_live_time_vs_content.xml

      Changes not staged for commit:
      (use "git add <file> ..." to update what will be committed)
      (use "git checkout -- <file> ..." to discard changes in working directory)

          modified:   src/main/res/layout/letv_live_time_live_item.xml
          modified:   src/main/res/values/colors.xml
          modified:   src/main/res/values/dimens.xml
          modified:   src/main/res/values/strings.xml

    根据提示信息可知: 目前正处于分支master 上, 有一个新增的文件, 已暂存准备提交; 有四个修改过的文件, 还未暂存.

接下来暂存文件, 多种方式:

git add src/file1  暂存src目录下的file1文件
git add src/       暂存src目录下所有的文件
git add .          暂存当前目录下的所有文件

    这里我们使用最多的是第二条命令, 暂存一个目录下的所有文件. 第一种单个暂存的方式过于繁琐, 第三种全部添加可能会暂存一些不需要的文件.

在终端执行:

git add src/

然后再察看工作空间中的状态信息:

git status
     On branch master
     Changes to be committed: 
       (use "git reset HEAD <file>..." to unstage)

      modified:   src/main/res/layout/letv_live_time_live_item.xml
      new file:   src/main/res/layout/letv_live_time_vs_content.xml
      modified:   src/main/res/values/colors.xml
      modified:   src/main/res/values/dimens.xml
      modified:   src/main/res/values/strings.xml

终端提示信息: 目前正处在master 分支,
四个修改的文件, 一个新增的文件已暂存, 准备提交.

然后是提交文件, 也有多种方式, 这里只用最保险的两种, 完全够用:\

git commit -m "commit note"    创建新的提交, 注释为"commit note"
git commit --amend     追加上一次提交, 会启动vim 编辑器, 编辑注释. 注释为空放弃提交.

在终端执行: git commit -m "modify setting page layout" 得到类似的提示信息:

[master dcd6316] modify settings page layout
5 files changed, 24 insertions(+), 24 deletions(-)

    在master 分支上提交, commit-id: dcd6316 5 个文件发生改变, 新增了24行代码, 删除24行代码, 本地提交成功.



2. 从服务端的代码库中同步代码

    代码在本地提交后, 工作空间为clean 状态, 便于一些后续的操作, 就可以拉取服务端的代码了.

git fetch origin dev_letv_global // 同步远程分支 dev_letv_global 的代码, 到本地的一个临时分支.
git fetch origin dev_letv_global:temp // 同步远程分支 dev_letv_global 的代码到本地的temp 分支.

其中:
origin 为默认的远程仓库的名称(可自己命名)
dev_letv_global 为远程仓库中的某个分支(管理员命名)

终端控制台会出现如下类似的信息:

From ssh://legit.letv.cn:29418/terminal/tv-letv-global
        * branch            dev_letv_global -> FETCH_HEAD
          1fe4874..1948cbe  dev_letv_global -> origin/dev_letv_global

执行:

git rebase FEATCH_HEAD 

或:

git rebase temp

将代码服务器的代码与本地代码 rebase 下.

注意: 在执行此操作之前, 要先提交本地代码, 确保工作空间
为clean 状态, 否则无法操作, git 会给出相应的提示.

rebase 的过程中git 会返回相关信息:

Current branch master is up to date.

说明该分支所处的代码已经是最新,
或者是:

First, rewinding head to replay your work on top of it...   
Applying: 1.add loading view to Live and Category page.

    说明rebase过程中没有任何冲突(运气不错), master 分支上的代码已经是最新, 可向服务端提交. 但多数情况下git会给出这样的提示:

localhost:letv congguangzi$ git rebase FETCH_HEAD
First, rewinding head to replay your work on top of it...
Applying: 1. modify the category layout
Using index info to reconstruct a base tree...
M   src/main/res/values/dimens.xml
Falling back to patching base and 3-way merge...
Auto-merging src/main/res/values/dimens.xml
CONFLICT (content): Merge conflict in src/main/res/values/dimens.xml
Recorded preimage for 'src/main/res/values/dimens.xml'
error: Failed to merge in the changes.
Patch failed at 0001 1. modify the category layout
The copy of the patch that failed is found in: .git/rebase-apply/patch

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".

    提示在rebase 的过程中出现冲突,这里 使用Android studio, (其他亦可) 处理冲突. Android Studio 默认集成解决冲突的插件, 而且功能强大, 推荐使用.
    冲突处理完成后, 查看工作空间的状态:

rebase in progress; onto 72abc7d
You are currently rebasing branch 'master' on '72abc7d'.
  (all conflicts fixed: run "git rebase --continue")

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   src/main/java/com/letv/tv/category/presenter/OtherTitlePresenter.java
    new file:   src/main/res/drawable/letv_category_other_title_bg.xml

    提示在rebase 的过程中, 已经处理完毕了所有的冲突, 可以继续rebase, 根据提示执行: git rebase --continue 完成rebase 过程.

localhost:letv congguangzi$ git rebase --continue
Applying: 1. modify the category layout
Recorded resolution for 'src/main/res/values/dimens.xml'.


3. 将本地代码, 提交到服务器

同步了代码之后, 只要确保有足够的权限, 就可以像服务端提交代码了:

git push origin master:refs/for/dev_letv_global

其中:
origin 远程仓库名称
refs/for/dev_letv_global > 在dev_letv_global分支下, > refs/for表示待管理员审核.
提交成功, git 会给出如下提示:

localhost:letv congguangzi$ git push origin master:refs/for/dev_letv_global
     Counting objects: 19, done.
     Delta compression using up to 8 threads.
     Compressing objects: 100% (16/16), done.
     Writing objects: 100% (19/19), 1.64 KiB | 0 bytes/s, done.
     Total 19 (delta 13), reused 0 (delta 0)
     remote: Resolving deltas: 100% (13/13)
     remote: Processing changes: new: 1, refs: 1, done    
     remote: 
     remote: New Changes:
     remote:   http://legit.letv.cn/13439
     remote: 
     To ssh://legit.letv.cn:29418/terminal/tv-letv-global
     * [new branch]      master -> refs/for/dev_letv_global

提示中包括了提交进度, 远程分支的一些信息, 待管理员审核.
http://legit.letv.cn/13439 是此次提交的url, 在浏览器中打开此url, 添加review 代码的管理员, 或是执行其他的操作.
在审核的过程中, 是可以修改代码, 并重新提交的审核的.
代码在本地修改暂存之后, 执行:

localhost:letv congguangzi$ git commit --amend
[master 9d0b2a3] 1. modify the category layout 2. add live content layout
Date: Thu Jul 21 11:25:05 2016 +0800
7 files changed, 93 insertions(+), 1 deletion(-)
create mode 100644 src/main/res/drawable/letv_category_other_title_bg.xml
create mode 100644 src/main/res/layout/letv_live_time_vs_content.xml

    --amend指令追加提交, 会启动vim 编辑器, 编辑提交注释, 有关于vim 编辑器的使用不再赘述, 自行谷歌度娘. 编辑完成后, 保存退出, 得到如上图相应的提示信息, 与普通的commit 指令类似, 只是增加了追加提交的文件.
    之后的操作就与之前大同小异了, 从服务端fetch 代码, rebase 处理冲突, 重新push 提交到服务端.
    审核通过后, 此部分代码入库, 就不可以再提交更新了, 如果要修改, 只能在下一次提交中修改.



4.git stash 应用

开发过程中经常会遇到这样的情况:
    完成了一次提交之后, 下一个小需求已经开发到一半, 这时候老大跟你说, 上个提交有点问题, 需要修改. 可是新的功能已经写了一半, 不能提交, 如何?
    其实这里有两种方法, branch 和 stash, 这里说一下比较简单的 stash 方式

git stash

    会提示已经将代码储存起来, 工作空间为clean 状态, 此时从服务端fetch 一下代码, 然后修改提交完成后, 执行:

git stash pop

    在这个过程中, 可能会与原来的代码有冲突, 处理冲突的过程与从服务端fetch 代码后处理冲突的方式相同, 冲突处理完成后, 就可继续之前的开发任务.



5.checkout 应用

    假设你正在修改 SettingsFragment.java 这个类的代码, 或者是 SettingsLayout.xml这个布局文件, 此时,你突然发现自己的修改有误, 需要还原文件, 第一反应就是ctrl + z 撤销, 修改, 不过作为一个程序员, 这样做确实有点太 low, 而且如果修改的太多, 也不太可能仅仅使用撤销操作使文件恢复到原来的状态. 此时git 提供的checkout 指令就派上用场了. 先查看一下工作空间的状态:

git status
     On branch master
     Changes to be committed:
       (use "git reset HEAD <file>..." to unstage)

        modified:   src/main/res/layout/letv_settings_item.xml

     Changes not staged for commit:
       (use "git add <file>..." to update what will be committed)
       (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   src/main/java/com/letv/tv/db/LetvDBHelper.java

    这里修改了两个文件, 暂存了其中一个. git 已经给出了相当详细的提示, 我们按照提示,先恢复未暂存的文件, 执行 git checkout src/main/java/com/letv/tv/db/LetvDBHelper.java , LetvDBHelper.java 就会恢复到上一次提交, 也就是修改之前的状态.

    对于已经暂存的文件, 先执行 git reset HEAD src/main/res/layout/letv_settings_item.xml 取消文件暂存, 然后在执行 git checkout src/main/res/layout/letv_settings_item.xml, letv_settings_item.xml 布局文件就会恢复到修改之前的状态. 再次查看一下工作空间:

git status
On branch master
nothing to commit, working directory clean

在Adnroid Studio 中查看下代码, 已经恢复到原来的状态.nice.

<think>首先,用户的问题是:“我想配置.gitconfig文件 请问如何配置.gitconfig文件”。这涉及到Git配置文件的设置。 从系统级指令中,我需要: - 使用中文回答。 - 对于行内数学表达式,使用$...$,但这个问题似乎不涉及数学,所以可能不需要。 - 独立公式用$$...$$,但同样,这里可能不需要。 - LaTeX语法正确。 - 生成相关问题。 - 在回答中引用的段落末尾添加引用标识,如[^1]。 - 回答结构清晰,逐步解决问题。 - 参考提供的引用内容。 提供的引用: - 引用[1]: 描述了Git的三个配置文件:/etc/gitconfig(系统级)、${HOME}/.gitconfig(用户级)、.git/config(项目级)。每个级别的作用和如何用git config命令操作。 - 引用[2]: 更详细地展示了如何操作本地级别配置文件,包括查看、新增、修改和删除配置。 - 引用[3]: 提到在Linux上配置.gitconfig,包括安装Git和设置免密登录。 用户的问题是配置.gitconfig文件,这通常指的是用户级的配置文件${HOME}/.gitconfig。 我的回答应该: 1. **结构清晰**:逐步解释如何配置。 2. **参考引用**:使用提供的引用信息,并在末尾添加引用标识。 3. **生成相关问题**:在最后添加相关问题部分。 步骤: - **介绍配置级别**:解释Git配置文件的三个级别,基于引用[1]。 - **重点在用户级配置**:用户问的是.gitconfig文件,这通常是用户级的。 - **如何配置**: - 使用git config命令。 - 例如,设置用户名和邮箱:git config --global user.name "Your Name" git config --global user.email "your.email@example.com" - 其他常见配置,如编辑器、别名等。 - **查看和编辑配置文件**:直接编辑文件或使用命令。 - **参考引用**:在相关部分添加引用标识。 生成相关问题: - 基于主题,生成3-5个相关问题。 回答结构: 1. **引言**:简要解释.gitconfig文件是什么。 2. **配置级别**:介绍系统、用户、项目级别。 3. **如何配置用户级.gitconfig**: - 使用git config --global命令。 - 示例命令。 - 如何查看和编辑文件。 4. **常见配置项**:列出一些常用配置。 5. **引用标识**:在引用段落末尾添加[^1], [^2], [^3]。 6. **相关问题**:在最后添加相关问题部分。 确保语言自然流畅。</think>### 如何配置 .gitconfig 文件 在 Git 中,`.gitconfig` 文件是用于存储用户级配置的文本文件,它位于用户的主目录下(例如 `${HOME}/.gitconfig`)。这个文件允许你自定义 Git 的行为,如设置用户名、邮箱、默认编辑器、别名等。配置过程简单,主要通过 `git config` 命令完成。下面我将一步步指导你如何配置,确保操作可靠且易于理解。 #### 1. **理解 Git 配置文件的级别** Git 有三个级别的配置文件,它们的作用范围不同: - **系统级配置**:文件路径为 `/etc/gitconfig`,影响系统所有用户。使用 `git config --system` 命令操作[^1]。 - **用户级配置**:文件路径为 `${HOME}/.gitconfig`(即你的主目录下的 `.gitconfig`),只影响当前用户。这是最常用的级别,使用 `git config --global` 命令操作[^1]。 - **项目级配置**:文件路径为 `.git/config`(在 Git 仓库根目录下),只影响当前仓库。使用 `git config --local` 命令操作[^2]。 对于个人日常使用,用户级配置(`--global` 选项)是最合适的,因为它会自动应用到你的所有 Git 操作中。 #### 2. **配置用户级 .gitconfig 文件** 使用 `git config --global` 命令来添加或修改配置项。命令格式为: ```bash git config --global <key> <value> ``` - **查看当前配置**:在操作前,先查看现有配置,避免冲突。 ```bash git config --global --list # 列出所有用户级配置 ``` - **基本配置**:设置用户名和邮箱(这是 Git 提交时必需的)。 ```bash git config --global user.name "Your Name" # 替换为你的名字 git config --global user.email "your.email@example.com" # 替换为你的邮箱 ``` - **常见配置项示例**: - 设置默认文本编辑器(如 VS Code): ```bash git config --global core.editor "code --wait" # 使用 VS Code ``` - 设置换行符处理(避免跨平台问题): ```bash git config --global core.autocrlf input # Linux/macOS 推荐 ``` - 添加别名(简化常用命令): ```bash git config --global alias.st status # 输入 git st 代替 git status git config --global alias.co checkout ``` - **直接编辑配置文件**:如果你想批量修改或查看文件内容,可以直接编辑 `${HOME}/.gitconfig` 文件。例如: ```bash nano ~/.gitconfig # 使用 nano 编辑器打开文件 ``` 文件内容通常是 INI 格式,例如: ``` [user] name = Your Name email = your.email@example.com [core] editor = code --wait [alias] st = status ``` #### 3. **验证和应用配置** - **验证更改**:运行 `git config --global --list` 检查配置是否生效。 - **应用到 Git 操作**:配置后,Git 会自动读取这些设置。例如,提交代码时会使用你设置的用户名和邮箱。 - **注意事项**: - 如果配置冲突(如用户级和项目级设置不同),Git 优先使用项目级配置[^1]。 - 在 Linux 系统上,确保 Git 已安装(可通过 `yum install git` 或 `apt install git` 安装),并设置 SSH 密钥免密登录(如引用[3]所述),但这不是配置 `.gitconfig` 的必要步骤。 #### 4. **高级配置和优化** - **删除配置项**:如果设置错误,使用 `--unset` 选项。 ```bash git config --global --unset core.autocrlf # 删除特定配置 ``` - **添加多行配置**:对于复杂设置(如别名),直接在文件中编辑更灵活。 - **参考文档**:Git 官方文档提供了所有可配置项,可通过 `git help config` 查看。 通过以上步骤,你可以轻松配置 `.gitconfig` 文件来提升 Git 使用体验。如果在特定项目中需要覆盖用户级设置,只需在项目目录下使用 `git config --local` 命令[^2]。 [^1]: Git中有三个重要的配置文件:系统级(/etc/gitconfig)、用户级(${HOME}/.gitconfig)和项目级(.git/config)。用户级配置使用 `--global` 选项操作,影响当前用户的所有仓库。 [^2]: 本地级别配置文件(.git/config)只影响当前仓库,可通过 `git config --local` 命令管理,如添加、修改或删除配置项。 [^3]: 在Linux上配置.gitconfig时,需先安装Git(如 `yum -y install git`),并设置SSH免密登录以简化操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值