Version 1.0
Git是一个开源的软件,作者是大名鼎鼎的Linus Torvalds,写出Linux的那个哥们。
Git是一个专门用于做修改记录的程序,也被叫做版本控制软件。
这个很简单。
在终端中输入git --version
,比如我的输出为:
git version 2.7.0
下面的设置主要是告诉git是哪位大神在用git。
git config --global user.name "
git config --global user.email "
repo可以理解为一个被跟踪的文件夹,其中的任何内容做的任何更改都会被记录在册。
比如我们的文件夹就叫做hello-world
吧。
执行下列指令:
mkdir hello-world
cd hello-world
git init
看看初始化成功没有,输入指令git status,只要不显示fatal: Not a git repository…,那就OK了。
恭喜了,第一步成功了。
假设现在在刚才建立的文件hello-world
中,如果没有就妥妥滴进来。
新建一个文件,比如vim readme
,然后输入一些简单的内容,比如
hello git.
这里我们可以检查目前repo的各种状态,比如是否有过任何修改,命令为:
git status
此时的输出应该是类似下面这个样子:
此时我们就可以将readme文件添加到档案库里面去了。
git add readme
小技巧如果当前文件较多,可以是用git add .来一股脑地把所有的文件都给新增了。
此时的输出应该是这个样子:
git commit -m “Adding a readme file”
此时的输出应该是如下这个样子:
在readme文件中新增一行,此时是用命令:
git diff
可以看到如下输出结果:
其实到目前为止,你的代码还滞留在你自己的机器上,别人无法看到(黑客除外)。
此时我们就需要注册一个github账号,把自己优雅的代码共享给全世界。
github是一个让所有人可以轻松上传自己代码,并协作的版本控制网站。
移步github。
注册完后,此时还记得如何设置自己的用户名吗,参考设置git。
当你在github上创建了一个repo后,所有同步到该repo的代码都会保存到github的主机服务器上。此时的这个repo就被称为remote repository,你每次把自己的更改push到这个repo,就叫做同步sync。
其他人就可以通过pull你的这个remote repository来获取到你最新push的版本,存储到他们自己的电脑上。这样一来大家就可以共同的push、pull来协作修改同一个文件,而不用拿着U盘四处拷贝省去病毒的传播,想当年去打印店的兄弟们...的U盘,哪个不是病毒缠身
。
push、pull的示意图如下所示:
此时我们准备将电脑上的版本和存在github的版本做同步,我们首先在github上新建一个repo。
+
号来新增一个repoinitialize with a README
,因为我们是从本机创建的git新建的地方在这里:
设置的东西在这里
一般在开源的软件中,都会看到这几个文件,含义如下:
先在我们已经在GitHub 上新建了一个repository,在github的官网的右上角可以看到如下图所示的一个地址,我们这里选择https。
然后进入hello-world文件夹
$ git remote add origin <your-git-repo-website>
现在我们的电脑本地repo就知道了在github上有一个remote repo,叫做origin,当然这个名字是可以修改的。此时origin代表的就是长长的那个网址。
接下来我们来推送一些本地的修改到github上的repo,因为我们总是希望本地的和github上的内容保持同步。
在推送之前,说下其实git有一个branch系统,可以修改一个程序不同的功能,后面会有介绍。通常系统会给我们的branch一个最初的名字master。
在我们需要推送的时候,需要告诉git准备推送哪一个分支的进度。
此时我们把我们的主分支master推送过去。
$ git push origin master
完成后,直接登录github的hello-world的repo页面,看看你创建的第一个repo吧。
在上一节里面我们已经push了修改到github上,但如果只能这样,git未免太小儿科了,因为git最有趣的地方其实在于与不同的人来协作开发。
当你fork一个程序的repo时,其实是复制了一份软件的repo到你自己的github账号下面。
然后我们就可以在这个基础上来做一些开发了,比如新增一些功能、修正一些错误。
当我们成功fork一个repo后,我们就可以将它从github下载clone到我们自己的电脑上,这样在没有网络的情况下,我们也可以修改软件的内容。
现在我们就可以将刚刚fork的repo下载到本地了,方法很简单:
$ git clone https://github.com/yourname/learn-git
,但是要比较留意,千万不要在已经是一个repo的文件夹里面来clone。
比如现在我们可能还在文件夹hello-world中,那么使用cd ..
,到上一级目录,然后在执行clone的命令即可 。
完成后,直接使用cd learn-git
进入到刚刚下载的软件目录里面去。
此时我们就拥有了一份这个软件的副本,并自动将其链接到了你github账号下面的远程repo中。
到这里就有个问题了,我们是fork了别人的repo,但是如果别人的repo更新了,我们fork的repo是无法同步更新的。
而我们还是希望更新的,那么这个时候我们就需要新增另外一个remote来链接到原始的repo中,比如原始的repo位于github.com/shaoguangleo/learn-git
上,该repo的地址可以在右上角找到。
先在我们起个名字,比如大家常用的upstream,执行下面的命令:
$ git remote add upstream https://github.com/shaoguangleo/learn-git.git
此时我们就通过upstream与原始的repo建立了链接。
git的软件repo使用分支branches来隔离开发进度。
当我们需要与其他人一起共同开发的时候,在完成自己负责的那一部分程序前,最好是创建自己的分支,这样就可以让主分支master保持稳定,不被未修改的修改影响。当你完成了自己的那一部分,就可以使用merge将分支修改合并进入mater主分支中。
在终端中输入git branch
可以查看你位于哪个分支上。
此时我们开始着手新建一个分支吧,比如分支的名称是sub-test
,那么此时使用命令
$ git branch sub-test
那么此时的sub-test
分支降会拷贝当前mater
的所有信息。
不过记住此时我们只是新建了一个分支,而我们目前还在主分支,这个可以使用git branch
命令来查看。那么现在我们就进入到我们新建的分支:
$ git checkout sub-test
再次输入git branch
命令会发现我们已经位于sub-test分支了。
此时我们在位于sub-test分支里面新建一个文件吧。
hello git
我们使用git将刚才的操作给记录下来:
第四步特别注意,一定是将origin推送到我们刚才新建的sub-test子分支中。
并且在你提交的时候,git会提示你的修改已经提交到了一个新的分支。
小技巧一步搞定新建一个分支并进入该分支
$ git checkout -b new-sub
其实最开始其他人员是没有push推送的权限的,这个时候我们如果希望大家协同开发,就需要在你的repo界面的右上方的setting那里,设置添加Collaborators,添加的人员就具有了直接参与推送的权限。
经常使用pull来同步更新,对于和许多人协作的repo而言,可以有效避免修改相同的文件造成版本的冲突。
$git pull <REMOTE-NAME> <LOCAL-BRANCH-NAME>
效果如下所示,直接从服务器远端更新到本地。
REMOTE ----> LOCAL
为了确保pull到东西,可以先行检查remote是否有所变动
$ git fetch --dry-run
这个设计不得不说,很赞。
对于我们修改或者完善了一份fork来的repo,通常希望把这些修改发给原作者,希望原作者可以pull收取我们的request,让大家都可以看到。
操作步骤如下所示:
此时,我们就可以将我们的分支merge合并到主分支,删除旧的分支,并从upstream获得更新得到最新数据。
git checkout master
git merge sub-test
git branch -d sub-test
git push --delete
git pull upstream master
Hi,XDJM们,更多信息欢迎移步github、CSDN或微信公众号letsProgramming.