[Git痛点讲解 : 不断完善中]

Git是一款可记录历史,回到过去的分布式版本管理工具~

普及Git基本知识:http://git.oschina.net/progit/


1.如果无意删除了远程分支和本地分支应该如何回到过去版本?

答:

在使用Git的过程中,有时可能会有一些误操作,比如:执行checkout -f 或 reset -hard 或 branch -d删除一个分支,结果造成本地(远程)的分支或某些commit丢失。这时,我们可以通过reflog来进行恢复,前提是丢失的分支或commit信息没有被git gc(CD30天)清除。一般情况下,gc对那些无用的object会保留很长时间后才清除的。reflog是git提供的一个内部工具,用于记录对git仓库进行的各种操作,可以使用git reflog或git log -g命令来看到所有的操作日志。

本地仓库回滚的过程很简单:

1.1 通过 git log -g 命令来找到我们需要恢复的信息对应的commit_id,可以通过提交的 版本ID,注备,时间,日期来辨别(黑色处为个人隐私)。

1.2 通过 git branch reserve_branch commit_id 来建立一个基于commit_id的新的分支(分支名可自定义)。

1.3 这样丢失的东西会恢复到reserve_branch 分支上了,然后切换到reserve_branch分支,一会文件就被开发工具检查到,可以用git push origin HEAD -u将本地分支推送到远程~

参考地址:http://blog.csdn.net/losophy/article/details/8932157


2 .gitignore 失效,不能进行有效过滤,怎么办?

答:

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

不要误解了!!! .gitignore 文件的用途,该文件只能作用于 Untracked Files,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 add 及 commit 过的文件)。

 # 1.清理本地缓存(改变成未被追踪状态)

$ git rm -r --cached .

 # 2.把工作时的所有变化提交到暂存区 :
 包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。(会通过 .gitgnore 过滤)

$ git add .

 # 3.将缓存区更新到本地仓库

$ git commit -m ‘update .gitignore’


3. 关于Git的连接的方式的坑你知道多少?

答 :

两种Git Clone 方式的分别是:
Https Url 登录: 下载到本地很简单,但fetch和push每次需要输入密码
使用https url克隆对初学者来说会比较方便,
复制https url然后到git Bash里面直接用clone命令克隆到本地就好了,
但是每次fetch和push代码都需要输入账号和密码,这也是https方式的麻烦之处 (某些 GitGUI 已经实现HTTPS方式缓存 Key-Value)。


SSH Url登录: 必须绑定密钥才能做任何操作不需要输 入密码而使用SSH url克隆却需要在克隆之前先配置和添加好SSH key,因此如果你想要使用SSH url克隆的话,你必须是这个项目的拥有者。否则你是无法添加SSH key的,另外ssh默认是每次fetch和push代码都不需要输入账号和密码,
如果你想要每次都输入账号密码才能进行fetch和push也可以另外进行设置。

关于两种Git连接方式加密原则:

HTTPS_Git连接方式 :
HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块服务端和客户端的信息传输都会通过 SSL / TLS 进行加密,所以传输的数据都是加密后的数据。具体是如何进行加密,解密,验证的,且看下图。





详细参考地址!!!: http://blog.csdn.net/clh604/article/details/22179907


SSH_Git连接方式 (安全外壳传输协议):
非对称加密(RSA)算法进行传输,使用非对称加密(RSA)算法需要两个密钥:公开密钥(publickey)私有密钥(privatekey)公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行签名,那么只有用对应的公开密钥才能检验。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法,可防止数据传输时被第三方截获后修改。


详细参考地址 : https://www.jianshu.com/p/0ef46bef9ddd


Git连接方式总结 (只是本人的理解):

SSH连接 : 在电脑上生成公钥与私钥,并告知给本地和代码托管平台,本地Git客户端在push时会用私钥签名,代码托管平台会用公钥检验,pull时代码托管平台会用公钥加密.然后本地Git客户端会用私钥解密,这就是SSH公私钥加密算法~

(RSA算法)性能是非常低的 , 原因在于寻找大素数、大数计算、数据分割需要耗费很多的CPU周期 , 但是安全性很高。


HTTPS连接 : SSL介于应用层和TCP层之间。应用层数据不再直接传递给传输层,而是传递给SSL层,SSL层对从应用层收到的数据进行加密,并增加自己的SSL头。只在第一次握手时使用非对称加密,通过握手交换对称加密密钥,在之后的通信走对称加密TLS/SSL中使用了非对称加密,对称加密以及HASH算法。

关于SSH方式公私密钥的生成 :

1.1 在本地生成ssh 公钥与私钥~
首先确保你的服务器已经成功设置自己的用户名和用户邮箱
git config --global user.name "YourName"
git config --global user.email "[email protected]"
设置成功后(根据用户名和邮箱生成公钥与私钥)!!!

ssh-keygen -t rsa -C “代码托管平台的邮箱@qq.com”
按3个回车,密码为空,大功告成。

1.2. cat ~/.ssh/id_rsa.pub:查看是否已经有了ssh公钥

1.3. [在代码托管平台添加SSH公钥 : 把公钥复制进ssh公钥管理]

clip < ~/.ssh/id_rsa.pub
执行后将公钥被copy在剪切板上,Ctrl+V到公钥钥管理处

1.4. 告知私钥到本地
ssh-add ~/.ssh/id_rsa

如果在这个过程中出现异常[Could not open a connection to your ]:
(!!!注意: ssh-agent 周围加上两个` ,MarkDown语法无法显示双点!!!)
执行 eval ssh-agent

再次执行 ssh-add ~/.ssh/id_rsa 成功 ssh-add -l 查看 如果有新加的rsa出现就OK:

1.5.测试:(注意 [email protected]为本人的代码托管平台)
ssh -T [email protected] **(git@你的代码托管平台网址) **
若返回:Welcome to Git@OSC, “用户名”!
则说明添加成功了!!!若不成功请移步下一条

1.6.ssh-keygen -t rsa -C "[email protected]"
ssh -T [email protected] //报错
提示Warning:Warning:Permanently added ‘git@’ to the list of known hosts permission denied (publickey)错误。
解决方案 :
在当前用户目录下创建文件~/.ssh/config,并给文件添加以下内容
UserKnownHostsFile ~/.ssh/known_hosts

1.7、更改项目clone地址(如果用HTTPS关联过前提下) :
vi .git/config
修改
url = https://xxx.com/Name/project.git
改为
url = [email protected]/Name/project.git

发布了29 篇原创文章 · 获赞 9 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_37977176/article/details/78862073