介绍
安装
源码编译安装
1 |
|
1 |
|
package manager
debian
1 |
|
GUI客户端
git客户端众多,可以根据需要选择安装。以下主要介绍两个,一个是windows资源管理器模式使用的,一个是Eclipse开发使用的。
- windows客户端
先安装Git for Windows(下载戳此处)。
再安装tortoisegit(下载戳此处)。
注意:避免Windows和Unix换行符不同而引起比对差异问题(详见GitHub 第一坑:换行符自动转换),建议安装Git for Windows过程中,选择Checkout-as-is, commit as-is,参见下图:
也可以后面通过TortoiseGit的settings中设置,参见下图:
命令行下修改,参见如下:
1 |
|
且统一换行符为Unix换行符,参见实践Eclipse
安装完成后把Git for Windows的git加入到环境变量path中,命令行验证git安装是否成功。
1 |
|
-
Eclispe某些版本一般自带有git插件(EGit),避免麻烦,建议直接选择集成EGit的Eclipse
-
其他客户端可选,比如SourceTree,更多可以参考Git图形化界面客户端大汇总
备注:git项目访问url一般有两种,ssh和http,如果选择http,则使用账号访问,如果使用ssh,则使用密钥访问,密钥配置方法详见下面的3和4。
TortoiseGit密钥配置
-
运行TortoiseGit开始菜单中的Puttygen程序
-
点击“Generate”按钮,鼠标在上图的空白地方来回移动直到进度条完毕,就会自动生一个随机的key
-
将多行文本框中以“ssh-rsa”开头的内容全选、复制,并粘贴到gitlab的Settings -> SSH Keys -> Add SSH key -> Key字段中,这就是适用于gitlab的公钥
-
在Puttygen中,点击“Save private key”按钮,将生成的key保存为适用于TortoiseGit的私钥(扩展名为.ppk)(TortoiseGit使用的私钥是这个,妥善保存)
-
点击菜单Conversions-》Export OpenSSH Key,保存为文件,比如openssh
Eclipse密钥配置
- 点击window—preference—Team—Git—-Configuration,在user settings栏目点击Add Entry,分别添加user.name和user.email两个Entry,对应gitlab的用户名和邮箱。
- 点击window—preference—General—Network Connections–SSH2,选择Key Management,点击Load Existing Key…,导入上面导出的OpenSSH Key,然后点击Save Private Key…到个人用户目录的.ssh目录下,比如我的放在
C:\Users\Ray\.ssh
,默认保存文件名为id_rsa(Eclipse和命令行使用的私钥是这个,妥善保存),默认即可。
ssh-keygen密钥配置
1 |
|
验证
1 |
|
配置user.emai和user.name
1 |
|
使用
init
初始化仓库
1 |
|
status
1 |
|
add
添加(新文件或修改)到暂存区(stage或index)
1 |
|
commit
从暂存提交至版本库
1 |
|
将修改跳过暂存直接提交至版本库
1 |
|
checkout
1 |
|
rm
1 |
|
ignore
.gitignore
1 |
|
reset
1 |
|
revert
1 |
|
diff
1 |
|
help
1 |
|
patch
将差异生成为patch
1 |
|
应用patch前检查patch是否有冲突
1 |
|
应用patch
1 |
|
能打的补丁先打上,有冲突的会生成.rej文件,此时可以找到这些文件进行手动打补丁
1 |
|
log
show commit logs
reflog
show reference logs,当reset后又想去到未来时,可以通过reflog查到commit id
branch
1 |
|
tag
1 |
|
remote
添加本地的远程仓库,比如origin(自己的远程仓库)和upstream(fork的源远程仓库)等
1 |
|
远程仓库地址
1 |
|
添加远程仓库地址后的效果:
1 |
|
clone
1 |
|
push
推送到远程仓库
1 |
|
1 |
|
fetch
仅拉取远程仓库到本地的远程仓库(比如origin或upstream仓库),不会合并到本地工作空间或本地仓库
1 |
|
pull
拉取远程仓库到本地并合并到本地工作空间,相当于git fetch + git merge,首次也需要进行分支关联。
1 |
|
1 |
|
1 |
|
merge
将某个分支的变化合并进来,一般用于下面两种情况,一个是将成熟功能分支合并到主干分支,另一个是避免功能分支避免落后主干分支太多,不定期将主干分支合并到开发中的功能分支。
通常,合并分支时,如果可能,Git会用“fast forward”模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用“Fast forward”模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
1 |
|
1 |
|
冲突样例:
1 |
|
冲突文件示例如下:
1 |
|
rebase
顾名思义,就是重新定义(re)起点(base)的作用,也就是说把当前分支的根基换一下的意思,有点像嫁接。
1 |
|
stash
Q&A
git没有完整安装
1 |
|
由于git没有完整安装导致,重新完整安装即可解决。
Linux和Windows双系统引起权限被修改
1 |
|
由于Linux和Windows双系统,文件权限被修改,可以通过配置git,忽略文件模式,例如:
1 |
|
中文路径和文件名
git的中文支持已经非常好了,但是默认设置下,中文路径和文件名在工作区状态输出,查看历史更改概要,以及在补丁文件中,中文不能正确地显示,而是显示为八进制的字符编码,示例如下:
1 |
|
参考如下配置即可:
1 |
|
参考:Git的中文支持
unsafe reporitory
1 |
|
1 |
|