Linux系统下Git的基本配置和使用示例
git config配置文件
一.git已经在你的系统中了,你会做一些事情来客户化你的git环境。你只需要做这些设置一次;即使你升级了,他们也会绑定到你的环境中。你也可以在任何时刻通过运行命令来重新更改这些设置。
git有一个工具被称为git config,它允许你获得和设置配置变量;这些变量可以控制git的外观和操作的各个方面。这些变量可以被存储在三个不同的位置:
1./etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值。如果你传递参数选项’--system’ 给 git config,它将明确的读和写这个文件。
2.~/.gitconfig 文件 :具体到你的用户。你可以通过传递--global 选项使git 读或写这个特定的文件。
3.位于git目录的config文件 (也就是 .git/config) :无论你当前在用的库是什么,特定指向该单一的库。每个级别重写前一个级别的值。因此,在.git/config中的值覆盖了在/etc/gitconfig中的同一个值。
在windows系统中,git在$home目录中查找.gitconfig文件(对大多数人来说,位于c:\documents and settings\$user下)。它也会查找/etc/gitconfig,尽管它是相对于msys 根目录的。这可能是你在windows中运行安装程序时决定安装git的任何地方。
二.你的标识(your identity)
2.1 当你安装git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次git提交都会使用该信息。它被永远的嵌入到了你的提交中:
$ git config --global user.name "john doe"
$ git config --global user.email johndoe@example.com
重申一遍,你只需要做一次这个设置。如果你传递了 --global 选项,因为git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要--global选项。
2.2 你的编辑器(your editor)
现在,你的标识已经设置,你可以配置你的缺省文本编辑器,git在需要你输入一些消息时会使用该文本编辑器。缺省情况下,git使用你的系统的缺省编辑器,这通常可能是vi 或者 vim。如果你想使用一个不同的文本编辑器,例如emacs,你可以做如下操作:
$ git config --global core.editor emacs
2.3 你的比较工具(your diff tool)
另外一个你可能需要配置的有用的选项是缺省的比较工具它用来解决合并时的冲突。例如,你想使用vimdiff:
$ git config --global merge.tool vimdiff
git可以接受kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge, 和 opendiff作为有效的合并工具。你也可以设置一个客户化的工具;查看第7章获得更多关于此的信息。
2.4 检查你的设置(checking your settings)
如果你想检查你的设置,你可以使用 git config --list 命令来列出git可以在该处找到的所有的设置:
$ git config --list
user.name=scott chacon
user.email=schacon@gmail.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...
你可能会看到一个关键字出现多次,这是因为git从不同的文件中(例如:/etc/gitconfig以及~/.gitconfig)读取相同的关键字。 在这种情况下,对每个唯一的关键字,git使用最后的那个值。
你也可以查看git认为的一个特定的关键字目前的值,使用如下命令 git config {key}:
scott chacon
2.5 获取帮助(getting help)
如果当你在使用git时需要帮助,有三种方法可以获得任何git命令的手册页(manpage)帮助信息:
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
例如,你可以运行如下命令获取对config命令的手册页帮助:
$ git help config
这些命令非常友好,因为你可以在任何地方存取他们,即使非在线状态。如果手册页和本书仍然不足而你需要个人的帮助,你可以试着使用freenode ircserver上的#git或#github 频道(irc.freenode.net)。这些频道会定期由数百个对git非常熟悉的专业人士所维护,他们会非常乐意帮助你。
2.6 总结(summary)
你应该对git是什么以及git与你可能使用的其它cvcs之间的不同有了一个基本的了解。你也应当在你的系统中有了一个具有你个人标识的可以工作的git版本。是时候来学习一些git的基本知识了。
git 实际使用记录
1、git 提交代码错误实例分析
$ git push origin master
to git@192.168.1.3:k6.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@192.168.1.3:k6.git'
to prevent you from losing history, non-fast-forward updates were rejected
merge the remote changes before pushing again. see the 'note about
fast-forwards' section of 'git push --help' for details.
cbk@ycs:~/work/k6_130708/k6$ git fecth
git: 'fecth' is not a git command. see 'git --help'.
git push 错误,因为没有先pull最新的代码,需要以下操作:
$ git fetch origin
$ git merge origin/master
$ git push origin master
如果安装git后没有设置你的用户名称和e-mail地址,还需要先执行:
$ git config --global user.name "cbk"
$ git config --global user.email <a target=_blank target="_blank" href="mailto:cbk@ylf.com">cbk@ylf.com</a>
这是非常重要的,因为每次git提交都会使用该信息。它被永远的嵌入到了你的提交中:
重申一遍,你只需要做一次这个设置。如果你传递了 --global 选项,因为git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要--global选项。
具体到此问题,如果没有设置你的用户名称和e-mail地址,则一直正确无法push代码。
2、git 跟踪一个文件的提交历史记录
在跟踪android代码是,有时候发现某个关键文件被改动了,需要跟踪查看对这个关键文件的所有commit的记录,以便理解其中的修改原因和过程:
git log -p “file name”
显示这个文件的每一行的最后提交commit,方便定位commit:
git blame “file name"
显示log详细修改记录:
git show [log_id_num],例如:
git show 75704c8543b033619a80439ddb0fd69cc7cb172c
3、git初始化之git config
1). 下面的命令将修改/home/[username]/.gitconfig文件,也就是说下面的配置只对每一个ssh的用户可见,所以每个人都需要做。
提交代码的log里面会显示提交者的信息
git config --global user.name [username]
git config --global user.email [email]
在git命令中开启颜色显示
git config --global color.ui true
2). 下面的命令将修改/etc/gitconfig文件,这是全局配置,所以admin来做一次就可以了。
配置一些git的常用命令alias
sudo git config --system alias.st status #git st
sudo git config --system alias.ci commit #git commit
sudo git config --system alias.co checkout #git co
sudo git config --system alias.br branch #git branch
3). 也可以进入工作根目录,运行git config -e,这样就只会修改工作区的.git/config文件,但是暂时还用不着.
git config文件的override顺序是3)>1)>2).
4.版本回退
git reset --hard commit_id
git checkout commit_id
git clean –df commit_id