如何正常地使用Git

如何正常地使用Git.md

这不是一篇git使用入门教程,而是关于实际工作中git的工作流。

Git官网上这样介绍的

Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

简短的一句描述足以说明git的强大之处,无论是小型还是大型工程,git都可以快速高效地进行版本管理.
git命令教程详尽众多,所以这篇文章关于git的命令不会太详细。

git 相关配置

git协议可分为匿名(http,匿名一般为只读协议,无法push修改)和非匿名(git,ssh),而https既可配置为匿名也可配置为非匿名。

如github上当clone一个project的时候有ssh和https可选。https不需要任何配置,在clone时根据提示输入用户名密码即可。

ssh协议配置

下边介绍一下ssh相关的配置

Secure Shell (SSH) is a cryptographic network protocol for operating network services securely over an unsecured network

ssh协议支持传统的用户名密码方式和使用密钥对进行登陆。git便继承了这两种方式。在git clone 时使用ssh中传统的用户名密码登陆与使用https没有差异。下边重点介绍密钥对登陆。以下命令均在terminal下使用。

  • 生成密钥对

使用ssh-keygen命令生成密钥对,你可以使用复杂的参数自定义密钥对的生成方式。这里不介绍这些参数的具体用法。

下边就开始配置ssh密钥,配置文件为/home/user/.ssh/config.
以下是一个完整的ssh主机配置

HOST xxServer //主机别名
HOSTNAME xxserver.com //主机地址
user name //用户名
identityFile ~/.ssh/id_rsa //私钥文件地址
  • 将公钥上传到你的xxserver.com服务器

请联系服务器管理员将公钥上传到git服务器

  • 使用别名地址

一个完整的git地址为ssh://user@hostname:path/android-architecture.git
使用xxServer替换掉user@hostname,地址即变为ssh://xxServer:path/android-architecture.git,当clone时使用此地址git将自动使用别名的配置,自动进行ssh鉴权。

git 配置

git配置分为全局配置(路径为~/.gitconfig)和局部配置(project/.git/config)。局部配置仅针对 当前的project。在使用git clone之前我们先简单地配置一下。

配置常用git命令别名,可以很省事

git config --global alias.ci  commit
git config --global alias.co  checkout
git config --global alias.br  branch
git config --global alias.st  status

你也可以根据自己需要再添加其他常用命令的别名。
另外再配置好commit生成的用户名和邮件地址就算配置完了

git config --global user.name ffff //请用你的用户名替换ffff
git config --global user.name ffff@fff.com//请用你的邮件地址替换

git 命令自动补全

如果git安装完成后,使用git命令时没有命令自动补全,请用按以下步骤修改系统的配置文件(mac 为.barsh_profile,linux为.bashrc)
* 下载git-completion.bash
* 添加以下内容到你的配置文件

source ~/git-completion.bash

work with git server and branch

简单的的工作流为:

1. git clone projectpath //clone仓库
2. git branch -a //查看全部分支
3. git checkout aBranch //切换到指定分支
4. git checkout -b workA //根据指定分支建立工作分支
5. git add,modify,rm,commit //修改文件
6. git checkout aBranch //切回aBranch
7. git pull //更新aBranch
8. git checkout workA //切到工作分支
9. git rebase aBranch //使用rebase使命合并最新的代码,termial通常支持&& 连接多个命令可以用将6,7,8,9 合并执行:git checkout aBranch && git pull && git checkout workA && git rebase aBranch 一次性执行多个命令
10. fix conflict if conflict occured
11. git rebase --continue or git rebase --abort
12. git push

这个简单的工作流可以解决大部分的问题。然后这仅仅是个简单的工作流,实际的工作中可能可能会有更复杂的情况。

  • 有时候我们也可以用git stash将change临时暂存,合并最新的代码到当前分支。
  • 当我们仅需要更新部分commit到当前分支,推荐使用cherry-pick命令
  • 当合并两个差异巨大的分支时,建议使用git merge命令。
  • 使用gerrit作review时,git push origin HEAD:refs/for/branchName
  • 添加远程仓库地址git git remote add name url,name 为url的别名。当push时指定此别名,可将代码宰相到指定url仓库

发表评论

电子邮件地址不会被公开。 必填项已用*标注