Git使用规则补充

学习的git的同学想必看过了廖雪峰老师的Git教程,笔者在学习过程中也深受这篇文章的启发。但是在学习或使用过程中,笔者也遇到了一些比较实际的但是廖老师没有提到或者只是一笔带过的问题。这篇文章就把这些问题的解决办法记录一下吧~

1.如何方便的使用一台机器向不同的远端仓库(如:github)提交代码?

我们知道在往github的某一个仓库提交代码时,需要在本地生成一个SSH Key,然后将其添加到github中,如下。

但是现在需要为github中的另外一个库添加SSH key,理所当然地,我们要再次在本地生成一个SSH key,命令如下。

1
ssh-keygen -t rsa -C "youremail@yourcompany.com"  

若一路回车(密码可以不写),这样会覆盖~/.ssh/ 目录下生成 id_rsa 和 id_rsa.pub 两个文件。为了区分,我们在第一个回车后设置路径:

1
Enter file in which to save the key (/root/.ssh/id_rsa):~/.ssh/文件名  

由此我们分别为github中的两个库(A库和B库)生成对应的公钥和私钥,完成后的目录:
id_rsa
id_rsa.pub
id_sub
id_sub.pub
之后我们将新生成的SSH key设置给B库,此时,理所当然地我们开始往B库中提交代码,但是事实没有那么美好,提示:没有权限。如何解决呢?
1、 首先查看代理

1
ssh-add -l  

若提示

1
Could not open a connection to your authentication agent.  

则系统代理里没有任何key,执行如下操作

1
exec ssh-agent bash  

若系统已经有ssh-key 代理 ,可以删除

1
ssh-add -D  

2.添加私钥

1
2
ssh-add ~/.ssh/id_rsa  
ssh-add ~/.ssh/id_sub

3.添加公钥
在github对应的管理页面,添加对应的公钥(.pub 文件内容),保存到代码管理服务器。
4.添加和编辑配置文件config
在 ~/.ssh 目录下新建一个config文件

1
touch ~/.ssh/config  

添加内容

1
2
3
4
5
6
7
# github  
Host github.com
HostName github.com
PreferredAuthentications publickey
# IdentityFile ~/.ssh/id_sub
IdentityFile ~/.ssh/id_rsa
user git

注意到第五、六行,如果我们需要往对应的远端版本库中提交代码,那么定义相应的IdentityFile行即可。但是,同一个时间只能配置一个IdentityFile,切换的时候只需更换IdentityFile即可。

2.如何修改commit的备注?

试想你在调用git commit -m "备注"后,如果突然反悔了,想重新修改commit的备注语,可以调用git commit —amend,之后可以在vi编辑器中重新编辑我们的备注了。

3.Git忽略规则及.gitignore规则不生效的解决办法

在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件)。这个文件每一行保存了一个匹配的规则例如:

1
2
3
4
5
6
7
# 此为注释 – 将被 Git 忽略

*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

规则很简单,不做过多解释,但是有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

1
2
3
git rm -r --cached .
git add .
git commit -m 'update .gitignore'

4.Git 合并时 –no-ff 的作用。

传送门>>

5.Git 分支管理策略分析。

传送门>>

6.Git 分支管理工具:Git flow。

传送门>>

7.常用 Git 命令清单。

传送门>>