集中式vs分布式
git全局配置
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
因为Git是分布式版本控制系统,所以,每个机器都必须⾃报家⻔:你的名字和Email地址。注意git config命令的--global参数,⽤了这个参数,表⽰你这台机器上所有的Git仓库都会使⽤这个配置,当然也可以对某个仓库指定不同的⽤户名和Email地址。
创建版本库
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
瞬间Git就把仓库建好了,⽽且告诉你是⼀个空的仓库(empty Git repository),可以发现当前目录下多了⼀个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要⼿动修改这个目录⾥⾯的⽂件,不然改乱了,就把Git仓库给破坏了。也不⼀定必须在空目录下创建Git仓库,选择⼀个已经有东⻄的目录也是可以的。不建议使⽤⾃⼰正在开发的公司项目来学习Git。
把文件添加到版本库
$ git add readme.txt
第二步,用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
简单解释⼀下git commit命令, -m后⾯输⼊的是本次提交的说明,可以输⼊任意内容,当然最好是有意义的,这样你就能从历史记录⾥⽅便地找到改动记录。
版本控制
远程仓库
(github的使用不做介绍)由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要⼀点设置:
第1步:创建SSH Key。在⽤户主⺫录下,看看有没有.ssh⺫录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个⽂件,如果已经有了,可直接跳到下⼀步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
$ ssh-keygen -t rsa -C "[email protected]"
你需要把邮件地址换成你⾃⼰的邮件地址,然后⼀路回⻋,使⽤默认值即可,由于这个Key也不是⽤于军事目的,所以也⽆需设置密码。如果⼀切顺利的话,可以在⽤户主目录⾥找到.ssh目录,⾥⾯有id_rsa和id_rsa.pub两个⽂件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放⼼地告诉任何⼈。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”⻚⾯:然后,点“Add SSH Key”,填上任意Title,在Key⽂本框⾥粘贴id_rsa.pub⽂件的内容,点“Add Key”,你就应该看到已经添加的Key。为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,⽽不是别⼈冒充的,⽽Git⽀持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你⾃⼰才能推送。当然,GitHub允许你添加多个Key。假定你有若干电脑,你⼀会⼉在公司提交,⼀会⼉在家⾥提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
第3步:登陆验证,使用命令:
$ ssh -T [email protected]
如果初次设置的话,会出现如下界面,输入yes 同意即可:
第4步:添加远程库,现在的情景是,你已经在本地创建了⼀个Git仓库后,又想在GitHub创建⼀个Git仓库,并且让这两个仓库进⾏远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他⼈通过该仓库来协作,真是⼀举多得。先在github创建一个空仓库,在本地的同名仓库下:
$ git remote add origin [email protected]:michaelliao/learngit.git
michaelliao替换成你⾃⼰的GitHub账户名,添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字⼀看就知道是远程库。
第5步:就可以把本地库的所有内容推送到远程库上:
$ git push -u origin master
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (19/19), 13.73 KiB, done.
Total 23 (delta 6), reused 0 (delta 0)
To [email protected]:michaelliao/learngit.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
把本地库的内容推送到远程,⽤git push命令,实际上是把当前分支master推送到远程。由于远程库是空的,我们第⼀次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。推送成功后,可以⽴刻在GitHub⻚⾯中看到远程库的内容已经和本地⼀模⼀样。
第6步:从现在起,只要本地作了提交,就可以通过命令:
$ git push origin master