之前用svn,工作原因现在用上了git,但是公司用的电脑是上一位全都弄好了的,直接就用了。但是因为女朋友毕设原因就想自己试试,于是信心满满地踩了一路坑。本次安装以廖雪峰老师的教程为主,多的不再赘述,主要说说因为各种原因踩到的坑还有解决的方向。建议大家按照廖老师的教程一路过来,慢慢看,慢慢试。
廖雪峰老师博客——git教程:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
1、安装git
根据廖老师的教程,推荐大家下载msysgit,这个软件主要是命令行的,有的朋友可能不太适应,但是你可以看看Unix的哲学,能用命令行的尽量用命令行,脱离界面化和鼠标是一件提高工作效率的有效办法,而且bigger很高:)
很常规的安装,没啥可说的。这里的代码如下:$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
2、创建版本库
也就是说你在本地和服务器上都得有一个相应的仓库(repo…),这样每次推拉都会在这两个对应好的仓库之间进行同步。服务器方面练手推荐使用github.com,如果是公司的内部项目,这个你们可以搜一搜。。
1)在github上创建版本库
重头戏来了!!!你需要一个github的账号。。不要嫌麻烦,不要嫌英文,没这个账号都不好意思说自己是程序员。(这一块参见廖老师的添加远程库一节)
然后根据廖老师的教程弄就行了,创建好库之后$ git init
这个代码去哪里敲呢?这就是我们要说的第二个问题~
2) 在本地创建git库并初始化
创建一个文件夹,这个文件夹里可以有项目,也可以是空的,这都是无所谓的,进入这个文件夹右键,会有一个git bash的选项,点开就可以进入之前刚装好git时弹出的那个窗口。
这里的重点是一定要进入这个文件夹,然后再打开git bash,不然的话就不知道你会随手把代码库放在哪里了。然后输入git init。正常情况下输入完是这样的:$ git init
Initialized empty Git repository in 你的库的文件夹路径/.git/
这时候你再看就会发现那个库的文件夹下有了一个/.git的文件夹,这就说明可以了~
3、同步版本库(坑1+坑2+坑3)
我因为是先有的本地文件夹再建的github库而且我已经用过git了,所以我就直接跳过了很多步骤直接看的“添加远程库”这一节,但是这一跳,还真出事了。
首先是推送到github这一步:$ git remote add origin git@github.com:michaelliao/learngit.git
到这以后,我不知道后面origin之后的路径怎么写,因为廖老师这个教程之后可能github又改版 了,所以创建完github库之后并没有廖老师发的那个截图,只是有个文件系统的树,我就很懵,后来看到github项目的右边有一个clone,我想应该就是他了,但是直接用了remote之后遇到了坑,
坑1:
这里是https的,所以直接remote会报一个错,fatal: I don't handle protocol:https
那怎么删了这个版本重新来一遍呢?
后来想了会,我就把本地的/.git/文件夹给删了,这样就可以重新来了,最起码给我们一个重新做人的机会嘛~
可是问题还是没有解决啊,后来又看了廖老师的语句,那个路径和我这个不一样啊喂,这咋办。在我绕了好久之后我发现这个‘clone or download’的选项右边有一个Use SSH的链接,点开之后就给了我们正确的路径。
这样直接点右边的复制然后输入代码,从逻辑上就没毛病了$ git remote add origin git@github.com:DongyunLee/maoNv.git
这个路径换成你自己的就可以了。先别急着试,因为接着又来了第二个坑。
坑2:
因为是用的SSH协议,所以会报错,报的啥错我忘记了,你可以试试,反正那个报错信息我google了一下告诉我是因为SSH协议的事。解决方法:
首先你去看一下C:\Users\Administrator\.ssh这个路径下有没有id_rsa的两个文件,没有的话你按照网上教你的“SSH-”什么的那个走,但是他可能会提示你这个不是命令或者文件,你去.ssh那个文件夹下Shift+鼠标右键,会多出来一个在此打开命令行(其实和直接git bash是一样的),然后再输就行。
这块在廖老师的教程上其实也有介绍,就是因为我是跳到那一节的,所以没有看他的父元素“远程仓库”那一节,在那一节中有完整的介绍,关于ssh的验证问题。
这个时候如果remote还出问题,我们还是用老办法,把/.git文件夹删掉,然后改头换面重新做人。
现在我们该往上提交代码了,$ git add .
//这是全部添加到内存或者下面的单个添加
$git add 具体文件名
$git commit -m "Init"
$git push -u origin master
这时出现了第三个问题。
坑3:
因为我是项目中已经有了readMe.md,所以出现了冲突问题,始终无法提交,一直报错。
我搜了一下错误信息,网上说解决办法是本地没有readMe.md文件,需要先$ git pull --rebase origin master
这段代码写上后再提交,就报了另一个错,我删了本地的readme.md之后还是报错:fatal: Exiting because of unfinished merge
我的天呐,我的倔强一下被挑起来了。以人民的名义起誓,我会解决它的。
于是我不断地在
删除/.git <==> git init <==> git remote <==> git add . <==> git commit -m “Init” <==>git pull -rebase origin master <==>git push -u origin master==>push
之间递归,直到我看到一行报错,让我输入以下指令:$ git push --set-upstream origin master
输入之后奇迹终于出现了,它开始正常进行提交操作了,能够正常的进行push。
至此,git的本地库和github之间的联系终于建立好了,完成了添加git远程库的操作。然后我正常进行了如下操作:$ git status
$ git add .
$ git status
$ git commit -m "Init"
$ git status
$ git pull
$ git push$ exit
这时在github上已经能够看到刚刚上传的项目了。
总结:
本次安装的路上出现了三个大坑:
1)第一个是因为粗心,和对git的不了解造成的;
2)也是粗心,还有自负,认为自己已经能用的很熟练了而沾沾自喜,乱跳章节;
3)这个故事告诉我们细心地分析错误提示是成功的捷径。
欢迎评论,发表大家的见解,第一次发博,很多不足,希望不吝赐教和指正。拒绝关于git/svn谁好谁坏的争辩帖和引战帖。
参考太多,忘了好多,当然最主要的还是廖老师的git教程。
最后,希望大家都能如愿以偿的用上git!