一牵寺、創(chuàng)建版本庫
1堂污、選擇一個合適的地方,創(chuàng)建一個空目錄:
$ mkdir xxx
$ cd xxx
$ pwd
/Users/kiki/Desktop/xxx
pwd
命令用于顯示當(dāng)前目錄倦挂。在我的Mac上畸颅,這個倉庫位于/Users/kiki/Desktop/xxx。
如果你使用Windows系統(tǒng)方援,為了避免遇到各種莫名其妙的問題没炒,請確保目錄名(包括父目錄)不包含中文。
2犯戏、通過git init
命令把這個目錄變成Git可以管理的倉庫:
$ git init
Initialized empty Git repository in /Users/kiki/Desktop/xxx/.git/
瞬間Git就把倉庫建好了窥浪,而且告訴你是一個空的倉庫(empty Git repository),細(xì)心的讀者可以發(fā)現(xiàn)當(dāng)前目錄下多了一個.git的目錄笛丙,這個目錄是Git來跟蹤管理版本庫的漾脂,沒事千萬不要手動修改這個目錄里面的文件,不然改亂了胚鸯,就把Git倉庫給破壞了骨稿。
如果你沒有看到.git目錄,那是因為這個目錄默認(rèn)是隱藏的,用ls -ah
命令就可以看見坦冠。
也不一定必須在空目錄下創(chuàng)建Git倉庫形耗,選擇一個已經(jīng)有東西的目錄也是可以的。不過辙浑,不建議你使用自己正在開發(fā)的公司項目來學(xué)習(xí)Git激涤,否則造成的一切后果概不負(fù)責(zé)。
把文件添加到版本庫
現(xiàn)在我們編寫一個readme.txt文件判呕,內(nèi)容如下:
Git is a version control system.
Git is free software.
一定要放到learngit目錄下(子目錄也行)倦踢,因為這是一個Git倉庫,放到其他地方Git再厲害也找不到這個文件侠草。
把一個文件放到Git倉庫只需要兩步:
第一步辱挥,用命令git add
告訴Git,把文件添加到倉庫:
$ git add readme.txt
執(zhí)行上面的命令边涕,沒有任何顯示晤碘,這就對了,Unix的哲學(xué)是“沒有消息就是好消息”功蜓,說明添加成功园爷。
第二步,用命令git commit
告訴Git式撼,把文件提交到倉庫:
$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
簡單解釋一下git commit
命令童社,-m
后面輸入的是本次提交的說明,可以輸入任意內(nèi)容端衰,當(dāng)然最好是有意義的,這樣你就能從歷史記錄里方便地找到改動記錄甘改。
git commit
命令執(zhí)行成功后會告訴你旅东,1 file changed:1個文件被改動(我們新添加的readme.txt文件);2 insertions:插入了兩行內(nèi)容(readme.txt有兩行內(nèi)容)十艾。
為什么Git添加文件需要add抵代,commit一共兩步呢?因為commit可以一次提交很多文件忘嫉,所以你可以多次add不同的文件荤牍,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
疑難解答
Q:輸入git add readme.txt,得到錯誤:fatal: not a git repository (or any of the parent directories)庆冕。
A:Git命令必須在Git倉庫目錄內(nèi)執(zhí)行(git init除外)康吵,在倉庫目錄外執(zhí)行是沒有意義的。
Q:輸入git add readme.txt访递,得到錯誤fatal: pathspec 'readme.txt' did not match any files晦嵌。
A:添加某個文件時,該文件必須在當(dāng)前目錄下存在,用ls或者dir命令查看當(dāng)前目錄的文件惭载,看看文件是否存在旱函,或者是否寫錯了文件名。
小結(jié)
現(xiàn)在總結(jié)一下今天學(xué)的兩點內(nèi)容:
初始化一個Git倉庫描滔,使用git init
命令棒妨。
添加文件到Git倉庫,分兩步:
使用命令git add <file>
含长,注意券腔,可反復(fù)多次使用,添加多個文件茎芋;簡單操作使用git add *
命令颅眶,將文件全部添加。
使用命令git commit -m <message>
田弥,完成涛酗。
二、添加遠(yuǎn)程庫
現(xiàn)在的情景是偷厦,你已經(jīng)在本地創(chuàng)建了一個Git倉庫后商叹,又想在gitee創(chuàng)建一個Git倉庫,并且讓這兩個倉庫進(jìn)行遠(yuǎn)程同步只泼,這樣剖笙,gitee上的倉庫既可以作為備份,又可以讓其他人通過該倉庫來協(xié)作请唱,真是一舉多得弥咪。
首先,登陸gitee十绑,然后聚至,在左側(cè)欄中找到“倉庫”
的“+”
按鈕,創(chuàng)建一個新的倉庫:
目前本橙,在gitee上的這個xxx
倉庫還是空的扳躬,gitee告訴我們,可以從這個倉庫克隆出新的倉庫甚亭,也可以把一個已有的本地倉庫與之關(guān)聯(lián)贷币,然后,把本地倉庫的內(nèi)容推送到gitee倉庫亏狰。
在創(chuàng)建遠(yuǎn)程倉庫時沒有生成readme文件時役纹,創(chuàng)建成功后會提示以下圖片中的命令行,直接按順序執(zhí)行即可暇唾。
現(xiàn)在字管,我們根據(jù)gitee的提示啰挪,在本地的xxx
倉庫下運行命令:
$ git remote add origin https://gitee.com/kkk/xxx.git
請千萬注意,把上面的kkk
替換成你自己的gitee賬戶名嘲叔,否則亡呵,你在本地關(guān)聯(lián)的就是我的遠(yuǎn)程庫,關(guān)聯(lián)沒有問題硫戈,但是你以后推送是推不上去的锰什,因為你的SSH Key公鑰不在我的賬戶列表中。
添加后丁逝,遠(yuǎn)程庫的名字就是origin
汁胆,這是Git默認(rèn)的叫法,也可以改成別的霜幼,但是origin
這個名字一看就知道是遠(yuǎn)程庫嫩码。
下一步,就可以把本地庫的所有內(nèi)容推送到遠(yuǎn)程庫上:
$ git push -u origin master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
Total 20 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:michaelliao/learngit.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
把本地庫的內(nèi)容推送到遠(yuǎn)程罪既,用git push
命令铸题,實際上是把當(dāng)前分支master
推送到遠(yuǎn)程。
由于遠(yuǎn)程庫是空的琢感,我們第一次推送master
分支時丢间,加上了-u
參數(shù),Git不但會把本地的master
分支內(nèi)容推送的遠(yuǎn)程新的master
分支驹针,還會把本地的master
分支和遠(yuǎn)程的master
分支關(guān)聯(lián)起來烘挫,在以后的推送或者拉取時就可以簡化命令。
推送成功后柬甥,可以立刻在gitee頁面中看到遠(yuǎn)程庫的內(nèi)容已經(jīng)和本地一模一樣饮六。從現(xiàn)在起,只要本地作了提交苛蒲,就可以通過命令:
$ git push origin master
把本地master
分支的最新修改推送至gitee卤橄,現(xiàn)在,你就擁有了真正的分布式版本庫撤防!
SSH警告
當(dāng)你第一次使用Git的clone
或者push
命令連接gitee時虽风,會得到一個警告:
The authenticity of host 'gitee.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?
這是因為Git使用SSH連接棒口,而SSH連接在第一次驗證gitee服務(wù)器的Key時寄月,需要你確認(rèn)gitee的Key的指紋信息是否真的來自gitee的服務(wù)器,輸入yes
回車即可无牵。
Git會輸出一個警告漾肮,告訴你已經(jīng)把gitee的Key添加到本機的一個信任列表里了:
Warning: Permanently added 'gitee.com' (RSA) to the list of known hosts.
這個警告只會出現(xiàn)一次,后面的操作就不會有任何警告了茎毁。
刪除遠(yuǎn)程庫
如果添加的時候地址寫錯了克懊,或者就是想刪除遠(yuǎn)程庫忱辅,可以用git remote rm <name>
命令。使用前谭溉,建議先用git remote -v
查看遠(yuǎn)程庫信息:
$ git remote -v
origin https://gitee.com/kkk/xxx.git (fetch)
origin https://gitee.com/kkk/xxx.git (push)
然后墙懂,根據(jù)名字刪除,比如刪除origin
:
$ git remote rm origin
此處的“刪除”
其實是解除了本地和遠(yuǎn)程的綁定關(guān)系扮念,并不是物理上刪除了遠(yuǎn)程庫损搬。遠(yuǎn)程庫本身并沒有任何改動柜与。要真正刪除遠(yuǎn)程庫颅悉,需要登錄到gitee,在后臺頁面找到刪除按鈕再刪除。
小結(jié)
要關(guān)聯(lián)一個遠(yuǎn)程庫,使用命令git remote add origin https://gitee.com/user name/project name.git
魂仍;
關(guān)聯(lián)一個遠(yuǎn)程庫時必須給遠(yuǎn)程庫指定一個名字擦酌,origin
是默認(rèn)習(xí)慣命名赶诊;
關(guān)聯(lián)后,使用命令git push -u origin master
第一次推送master分支的所有內(nèi)容夺英;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改瓤帚;
分布式版本系統(tǒng)的最大好處之一是在本地工作完全不需要考慮遠(yuǎn)程庫的存在轩勘,也就是有沒有聯(lián)網(wǎng)都可以正常工作怯邪,而SVN在沒有聯(lián)網(wǎng)的時候是拒絕干活的绊寻!當(dāng)有網(wǎng)絡(luò)的時候,再把本地提交推送一下就完成了同步悬秉,真是太方便了澄步!