快,快到碗里来

快到碗里来的博客

winepot2005@gmail.com

http://github.com/inpot

快,快到碗里来

如何正常地使用git

这不是一篇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命令生成密钥对,你可以使用复杂的参数自定义密钥对的生成方式。这里不介绍这些参数的具体用法。 ``` user@ubuntu:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): 这里输入要生成的文件名 括号中为默认最终的文件名 Enter passphrase (empty for no passphrase): 这里输入密码,在git中使用时通常不使用添加密码,
Enter same passphrase again: 这里重复输入密码
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
f2:76:c3:6b:26:10:14:fc:43:e0:0c:4d:51:c9:a2:b0 user@ubuntu
The key’s randomart image is:
+–[ RSA 2048]—-+
| .+=*.. |
| . += + |
| o oo+ |
| E . . o |
| ..S. |
| .o . |
| .o + |
| …oo |
| +. |
+—————–+


下边就开始配置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 git config –global core.quotepath off

你也可以根据自己需要再添加其他常用命令的别名。
另外再配置好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](https://github.com/git/git/blob/master/contrib/completion/)
* 添加以下内容到你的配置文件

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 ```

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