上篇讲到Git必知必会的日常命令,本篇继续介绍Git用法,不常用,却非常重要。包括:
- 配置git
- git remote
- git hooks
- git log
- git 子模块
配置Git
配置文件
配置可以通过命令行进行(git config),也可能直接修改配置文件。可以在三个地方找到配置文件:仓库目录、用户目录、全局目录,分别代表不同的影响范围。 仓库目录即在仓库的.git目录下的config文件中;用户目录在%user_home%/.git/.gitconfig文件中;全局目录位于/etc/gitconfig(Windows用户在%program files%/git/etc/gitconfig文件中。
通常需要配置的有这些:
- 用户名密码
- Diff tool
- Merge tool
- 别名
建议以命令行进行配置,避免直接修改文件导致的格式问题。
设置用户名
git中需要设置两个值:一个用户名name和一个email
git config --global user.name "john doe" git config --global user.email "[email protected]"
其中 --global表示该配置为对当前操作系统用户生效,如果不加该参数,则表示在当前仓库的配置生效。
取消设置
如果不小心输错的配置的值,可以通过git config --unset来取消。
比如:
git config --global --unset user.name
表示将刚才设置的用户名取消掉。
设置Diff tool
上篇讲到git diff可以进行两个文件的比较,如果觉得命令行输出不是很方便,可以用git difftool进行图形界面的比较。
这时需要配置diff tool。
difftool命令跟diff命令用法几乎一致,除了可以指定用来比较的工具的名称。可用的difftool包括:
araxis, bc3, diffuse, emerge, ecmerge, gvimdiff, kdiff3, kompare, meld, opendiff, p4merge, tkdiff, vimdiff and xxdiff。
本人使用过kdiff3和meld,相比更喜欢meld的三栏设计。
第一次运行:
git difftool --tool meld d234534 ce34565
之后系统会在配置文件中增加:
[diff] tool=meld [difftool "meld] external = "path/to/meld/install/"
其中external表示meld安装的目录。
Windows上可以用p4merge,用法类似。
配置merge tool
配置mergetool 与difftool十分类似,可用的选项包括:
araxis, bc3, diffuse, ecmerge, emerge, gvimdiff, kdiff3, meld, opendiff, p4merge, tkdiff, tortoisemerge, vimdiff and xxdiff
配置别名
git中的好多命令格式并不规范,另外又有些经常执行参数又特别多的命令使用起来并不方便,比如git log,想要输出类似svn格式的log (verionNumber user date message),则需要输入这样的命令:
git log --pretty=format:"%h %an %ct %m"
其中%h代表版本号(git中的版本号为hash值),%an为author name, %ct为create time,%m为message。
可以看出来,很不方便,也不容易记忆。这时可以通过git alias配置git的别名:
git config --global alias.history "log --pretty=format:'%h %an %ct %m'"
以后直接输入git history即可输出类似svn格式的log记录。
git remote
上篇讲到git从指定url克隆repository,本篇讲如何将本地的修改同步到指定的仓库,或从指定的仓库更新代码。
git是分布式的本版控制系统,可以离线完成几乎所有的版本操作,但是实际项目中需要一个中心仓库来同步团队成员的代码成功并统一发布。在svn中这个中心仓库就是svn server,而在git中则没有强制要求,可以在任意两台git仓库中进行同步,但实践下来的情况通常是所有团队成员向唯一一个指定的中心仓库进行同步,作用类似于svn的server。
通常通过git clone创建的仓库默认已经有一个指向被克隆仓库的url了(以后的push或pull都通过这个url来建立联系),例如:
git clone https://github.com/jquery/jquery.git git remote
输出Origin,通过git remote -v 可以查看这个remote对应的url。
也可以通过git remote set-url 设置该remote的url,也可以通过git remote add 为项目添加新的远程连接。
git hook