分佈式版本控制管理系統本地倉庫和中心服務器倉庫數據是本地的鏡像倉庫,中心服務器數據倉庫的是爲了多用戶數據合併和獲取同步的中心,多人協做須要管理這些遠程倉庫,以便推送和拉去數據,彙總各自項目的進度和工做成果。管理遠程倉庫的工做添加遠程庫,廢棄遠程庫,管理遠程分支管理等等。每次用戶從中心服務器拉去文件不單單是最新版本的文件數據,同事還包含了全部歷史數據,如今咱們來看看遠程服務器數據倉庫的使用。咱們已github 測試項目做爲遠程服務器數據倉庫做爲操做環境。
一、克隆一個倉庫
$ git clone git@github.com:andy
/test.git
Cloning into 'test'...
remote: Reusing existing pack: 4, done.
remote: Total 4 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (4/4), done.
$ git remote
origin
$ git remote -v
gshell https://gitshell.com/andy
/test.git (fetch)
gshell https://gitshell.com/andy
/test.git (push)
origin git@github.com:andy
/test.git (fetch)
origin git@github.com:andy
/test.git (push)
$ cat .git/config
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@github.com:andy
/test.git
[branch "master"]
remote = origin
merge = refs/heads/master
[remote "gshell"]
url = https://gitshell.com/andy
/test.git
fetch = +refs/heads/*:refs/remotes/gshell/*
二、添加遠程倉庫
git remote 能夠查詢遠程倉庫簡短名稱,在克隆某個項目後,至少能夠看到能夠名爲origin的遠程庫,git用這個默認標識你克隆的原始倉庫。咱們如今也能夠添加一個新的倉庫。從遠程倉庫獲取數據git fetch remote-name,會從遠程數據倉庫拉去你本地沒有的數據,拉去完成後,能夠和你本地的一個分支作合併,開始我麼克隆一個倉庫,系統會默認把倉庫歸於origin名下,git fetch origin 會抓取你從上次更新以來有別人更新到服務器的新內容,fetch只是從遠端的數據拉取到本地倉庫,並不合併到當前工做分支。只有使用 git pull origin 命令會自動抓取數據下來,而後將遠端分支自動合併到本地倉庫中的當前分支,平常工做中都這樣使用,又快有好。
$ git remote add gitcsdn git@code.csdn.net:andy_yyf/test.git
$ git remote -v
gitcsdn git@code.csdn.net:andy_yyf/test.git (fetch)
gitcsdn git@code.csdn.net:andy_yyf/test.git (push)
gshell git@gitshell.com:andy
/test.git (fetch)
gshell git@gitshell.com:andy
/test.git (push)
origin git@github.com:andy
/test.git (fetch)
origin git@github.com:andy
/test.git (push)
$ git fetch gshell
From gitshell.com:andy
/test
* [new branch] master -> gshell/master
三、推送數據到遠程倉庫
在工做中項目開發完成部分,須要推送到遠程服務器和你們合併共享工做內容。須要將本地倉庫數據推送到遠程倉庫,實現這個命令和簡單,
git pull remote-name branch-name ,若是被本地分支master 分支推送到origin 服務器上。只要在中心服務器有權限,或者同一時候沒有其餘人也在推送數據,或者從最近推送或獲取後有其餘人之後更新,能夠直接推送到遠程倉庫,若是別人已有更新,需求把遠程更新的數據抓取到本地合併後再推送。
$ git push
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 330 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@github.com:andy
/test.git
7b26911..894ed8b master -> master
$ git push gshell
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 330 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@gitshell.com:andy
/test.git
7b26911..894ed8b master -> master
$ git push gitcsdn
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 330 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@code.csdn.net:andy_yyf/test.git
7b26911..894ed8b master -> master
四、查看遠程倉庫信息
查看遠程倉庫信息 git remote show remote-name ,查看某個遠程倉庫的詳細信息,
$ git remote show origin
* remote origin
Fetch URL: git@github.com:andy
/test.git
Push URL: git@github.com:andy
/test.git
HEAD branch: master
Remote branch:
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
五、遠程倉庫本地配置別別名修改
遠程倉庫本地.git/config 配置文件中本地短名稱修改 git remote rename oldname newname.遠程倉庫有變化,如遠程的鏡像再也不使用,或者原來的克隆再也不使用,須要異常遠端倉庫,能夠git remote rm 命令。 經過本地修改本地配置文件,需求修改文件內容存放在.git/config 的文件中。
$ git remote rename gitcsdn gcsdn
$ cat .git/config
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@github.com:andy
/test.git
[branch "master"]
remote = origin
merge = refs/heads/master
[remote "gshell"]
url = git@gitshell.com:andy
/test.git
fetch = +refs/heads/*:refs/remotes/gshell/*
[remote "gcsdn"]
url = git@code.csdn.net:andy_yyf/test.git
fetch = +refs/heads/*:refs/remotes/gcsdn/*
$ git remote rm gshell
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@github.com:andy
/test.git
[branch "master"]
remote = origin
merge = refs/heads/master
[remote "gcsdn"]
url = git@code.csdn.net:andy_yyf/test.git
fetch = +refs/heads/*:refs/remotes/gcsdn/*
六、標籤
版本打標籤是在某一個版本發佈或者對應的提交上打標籤,git tag tagName 命令是打標籤的命令,帶有備註信息的標籤須要 git tag -a v1.0 -m "xxxx" 的標籤,標籤使用有兩種類型,前一種是輕量級(lightweight) 和含付註釋的(annotated),輕量級標籤就像是個不會變化的分支,實際上它就是個指向特定提交對象的引用。而含付註釋的標籤,其實是在存儲倉庫中的一個獨立對象,對象存放在.git/objects/中,它有自身的校驗和信息,包含着標籤的名字,電子郵件地址和日期,以及標籤說明,標籤自己也容許GNU privacy Guard(GPG)來簽署或驗證。通常咱們都使用含有付註釋型的標籤,以便保留相關信息,固然若是隻是臨時性的添加標籤,或者不須要添加額外信息,就能夠用輕量級的標籤。用git show 能夠查看提交對象信息上,列出了標籤的提交者和提交時間,以及標籤的說明。
$ git tag -a v1.0 -m"it the tag v1.0"
$ git tag
v1.0
$ git show v1.0
commit 894ed8b9883fac03c386d2d26317375797853586
Author: andy <andy@gmail.com>
Date: Mon Mar 10 16:46:50 2014 +0800
local 2st commit「
diff --git a/readme.txt b/readme.txt
new file mode 100644
index 0000000..c261c57
--- /dev/null
+++ b/readme.txt
@@ -0,0 +1 @@
+git introduction
版本提已提交到倉庫,或者某個歷史提交記錄上打標籤,也能夠打標籤,只須要在標籤後加上對應的校驗和,以下後補上上標籤:
$ git show v1.1.1
commit 2e9cc04f50e000d5280979348e7084afcb9d35f2
Author:
andy <andy@gmail.com>
Date: Mon Mar 10 22:19:03 2014 +0800
3rd commit
diff --git a/readme.txt b/readme.txt
index c261c57..2b92ac4 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
git introduction
+the current release version 1.8.0
標籤只會保存在本地,暫存區對象也是隻保存在本地,在推送倉庫的時候不會推送到遠程服務器上,標籤能夠推送到遠程服務器,須要經過顯式命令才能將標籤簽到遠程倉庫,其命令方式猶如推送分支,運行git push origin tagname,推送本地全部標籤 --tags,其它人在拉取數據的時候也會看到對推送到服務器的標籤。
$ git push origin v1.1.1
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 287 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@github.com:andy
/test.git
* [new tag] v1.1.1 -> v1.1.1
$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 148 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:andy
/test.git
* [new tag] v1.0 -> v1.0
* [new tag] v1.1 -> v1.1
git 基本操做,建立和克隆倉庫,更新,暫存和克隆倉庫,暫存並提交更新等,以及查看歷史更新記錄等。