Git與GitHub版本控制初步

參考資料:

  1. Pro Git(中文版)

安裝Git

$ sudo apt-get install git

配置Git

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

$ git config --global user.email "codingadai@126.com"
$ git config --global user.name "CodingAdai"

因?yàn)镚it是分布式版本控制系統(tǒng),所以,每個(gè)機(jī)器都必須自報(bào)家門:你的名字和Email地址。你也許會(huì)擔(dān)心,如果有人故意冒充別人怎么辦?這個(gè)不必?fù)?dān)心,首先我們相信大家都是善良無知的群眾,其次,真的有冒充的也是有辦法可查的。注意git config命令的--global參數(shù),用了這個(gè)參數(shù),表示你這臺(tái)機(jī)器上所有的Git倉庫都會(huì)使用這個(gè)配置,當(dāng)然也可以對(duì)某個(gè)倉庫指定不同的用戶名和Email地址。 ——廖雪峰《Git教程》

創(chuàng)建本地倉庫

創(chuàng)建一個(gè)用于Git倉庫的文件夾。

$ mkdir git
$ cd git
$ pwd
/home/coding/git

使用git init命令把該文件夾初始化成為一個(gè)Git本地倉庫。

$ git init
Initialized empty Git repository in /home/coding/git/.git/

關(guān)聯(lián)遠(yuǎn)程倉庫

接著在本地倉庫下關(guān)聯(lián)一個(gè)遠(yuǎn)程倉庫。

$ git remote add origin git@192.168.1.145:htlar.git

如果關(guān)聯(lián)沒有問題,則控制臺(tái)沒有任何提示。
這時(shí),使用 ls 命令,是不會(huì)看到任何目錄和文件的(不管遠(yuǎn)程倉庫是否有內(nèi)容)。
接下來,使用 git pull <remote> <branch> 命令把遠(yuǎn)程倉庫的內(nèi)容同步到本地倉庫。

$ git pull origin master
git@192.168.1.145's password:
From 192.168.1.145:htlar
 * branch            master     -> FETCH_HEAD

克隆遠(yuǎn)程倉庫

假設(shè)我們沒有遠(yuǎn)程倉庫和本地倉庫,那么最好的方式應(yīng)該是先創(chuàng)建遠(yuǎn)程倉庫,再從遠(yuǎn)程庫克隆。
首先我們可以在github.com,coding.net,oschina.net或者自己搭建的Git服務(wù)器,創(chuàng)建一個(gè)遠(yuǎn)程倉庫。
這里我的遠(yuǎn)程倉庫創(chuàng)建在自己搭建的服務(wù)器中。

$ git clone git@192.168.1.145:htlar.git
Cloning into 'htlar'...
git@192.168.1.145's password:
remote: Counting objects: 8, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 8 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (8/8), done.
Checking connectivity... done.

之后,會(huì)在當(dāng)前目錄多了一個(gè)名為htlar的子目錄

本地分支

創(chuàng)建分支以及分支的管理請(qǐng)查閱Pro Git(中文版)

以下摘自 廖雪峰《Git教程》

創(chuàng)建分支

$ git checkout -b dev
Switched to a new branch 'dev'

git checkout命令加上-b參數(shù)表示創(chuàng)建并切換,相當(dāng)于以下兩條命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

切換分支

git checkout <branch>

$ git checkout master
Switched to branch 'master'

查看分支

$ git branch
* android
  master

刪除分支

$ git branch -d dev
Deleted branch dev (was 04d09e5).

遠(yuǎn)程分支

創(chuàng)建遠(yuǎn)程分支

遠(yuǎn)程分支就是本地分支push到遠(yuǎn)程分支上的時(shí)候產(chǎn)生的。比如master就是一個(gè)最典型的遠(yuǎn)程分支(默認(rèn))。

$ git push origin master
$ git push orgin serverfix

這里其實(shí)走了一點(diǎn)捷徑。Git 自動(dòng)把 serverfix 分支名擴(kuò)展為 refs/heads/serverfix:refs/heads/serverfix,意為“取出我在本地的 serverfix 分支,推送到遠(yuǎn)程倉庫的 serverfix 分支中去”。我們將在第九章進(jìn)一步介紹 refs/heads/ 部分的細(xì)節(jié),不過一般使用的時(shí)候都可以省略它。也可以運(yùn)行 git push origin serverfix:serverfix 來實(shí)現(xiàn)相同的效果,它的意思是“上傳我本地的 serverfix 分支到遠(yuǎn)程倉庫中去,仍舊稱它為 serverfix 分支”。通過此語法,你可以把本地分支推送到某個(gè)命名不同的遠(yuǎn)程分支:若想把遠(yuǎn)程分支叫作 awesomebranch,可以用 git push origin serverfix:awesomebranch 來推送數(shù)據(jù)。 ——《Git Pro 中文版》

注意: 如果本地倉庫中沒有名為serverfix的分支,則會(huì)出現(xiàn)錯(cuò)誤,正確的寫法:

$ git push orgin master:serverfix

如果遠(yuǎn)程倉庫沒有名為serverfix分支,則遠(yuǎn)程倉庫會(huì)自動(dòng)創(chuàng)建。

查看遠(yuǎn)程分支

$ git branch -a
    * master
      remotes/origin/daixiaodong
      remotes/origin/dev
      remotes/origin/master

跟蹤遠(yuǎn)程分支

$ git checkout -b sf origin/serverfix
    Branch sf set up to track remote branch refs/remotes/origin/serverfix.
    Switched to a new branch "sf"

刪除遠(yuǎn)程分支

如果不再需要某個(gè)遠(yuǎn)程分支了,比如搞定了某個(gè)特性并把它合并進(jìn)了遠(yuǎn)程的 master 分支(或任何其他存放穩(wěn)定代碼的分支),可以用這個(gè)非常無厘頭的語法來刪除它:git push [遠(yuǎn)程名] :[分支名]。如果想在服務(wù)器上刪除 serverfix 分支,運(yùn)行下面的命令:

$ git push origin :serverfix
    To git@github.com:schacon/simplegit.git
    - [deleted] serverfix

咚!服務(wù)器上的分支沒了。你最好特別留心這一頁,因?yàn)槟阋欢〞?huì)用到那個(gè)命令,而且你很可能會(huì)忘掉它的語法。有種方便記憶這條命令的方法:記住我們不久前見過的 git push [遠(yuǎn)程名] [本地分支]:[遠(yuǎn)程分支] 語法,如果省略 [本地分支],那就等于是在說“在這里提取空白然后把它變成[遠(yuǎn)程分支]”。 ——《Git Pro 中文版》

其他

什么是origin

當(dāng)你從遠(yuǎn)程倉庫克隆時(shí),實(shí)際上Git自動(dòng)把本地的master分支和遠(yuǎn)程的master分支對(duì)應(yīng)起來了,并且,遠(yuǎn)程倉庫的默認(rèn)名稱是origin。(origin其實(shí)就是遠(yuǎn)程倉庫的git地址的一個(gè)別名,這種說法不確定對(duì)不對(duì))
要查看遠(yuǎn)程庫的信息,用git remote:

$ git remote
origin

或者,用git remote -v顯示更詳細(xì)的信息:

$ git remote -v
origin  git@github.com:michaelliao/learngit.git (fetch)
origin  git@github.com:michaelliao/learngit.git (push)

上面顯示了可以抓取和推送的origin的地址。如果沒有推送權(quán)限,就看不到push的地址。 ——廖雪峰《Git教程》

GitHub

在GitHub新建一個(gè)空倉庫后,GitHub會(huì)提示我們

We recommend every repository include a README, LICENSE, and .gitignore.

…or create a new repository on the command line

echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/CodingAdai/test.git
git push -u origin master

…or push an existing repository from the command line

git remote add origin https://github.com/CodingAdai/test.git
git push -u origin master

我們可以根據(jù)提示來進(jìn)行下一步操作。
我的情況是,我已經(jīng)有一個(gè)本地倉庫,而且已經(jīng)有文件。而且有遠(yuǎn)程倉庫,也是不為空的,我可以執(zhí)行后一個(gè)提示,但是在我push的時(shí)候,報(bào)錯(cuò)了,提示有沖突,這時(shí)候我需要先把遠(yuǎn)程倉庫pull下來,與本地倉庫合并。但這里有遇到一個(gè)問題,就是有沖突,且Git不能解決。(待補(bǔ)充)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容