1. 程式人生 > >gitlab的基本操作--上傳、下載、庫的遷移/備份及回收/重命名

gitlab的基本操作--上傳、下載、庫的遷移/備份及回收/重命名

git gitlab git倉庫遷移 git倉庫備份 git的上傳和下載

gitlab的基本操作--上傳、下載、庫的遷移/備份及回收/重命名

  1. gitlab基本概念
    GitLab是一個基於 Web 的 Git 倉庫管理工具,且具有wiki 和 issue 跟蹤功能。GitLab 由 GitLab Inc. 開發,使用開源許可證。
    GitLab 由烏克蘭程序員 Dmitriy Zaporozhets 和 Valery Sizov 開發。它由 Ruby 寫成。後來,一些部分用Go語言重寫。截止2016年12月,該公司有150名團隊成員,以及1400多名開源貢獻者。 GitLab被 IBM,Sony,Jülich Research Center,NASA,Alibaba,Invincea,O’Reilly Media,Leibniz-Rechenzentrum (LRZ),CERN,SpaceX 等組織使用。
    ---上面內容摘自維基百科
  2. gitlab庫創建
    技術分享圖片
    點擊“New project”
    技術分享圖片
    按照上面步驟,最後點擊“Create project”
  3. 文件上傳
    在客戶端上(mac本的遠程終端上)進行如下操作:
    Git global setup
    git config --global user.name "wtf"
    git config --global user.email "[email protected]"
    git clone ssh://[email protected]:19234/linux/linux_datagrand.git
    cd linux_datagrand
    echo "this is a test file."  >  wtf.txt
    cat wtf.txt
    this is a test file !
    git add .
    git commit -m "add a file named wtf.txt"
    git push -u origin master
    這樣就可以將客戶端文件上傳到gitlab的倉庫裏了。
  4. 文件下載
    如果我在gitlab上linux_datagrand.git這個倉庫裏進行如下操作:
    添加shiyan.txt和目錄test這兩個文件,那麽我在客戶端應該怎麽操作才能將新增的文件“拉取”到本地呢?
    cd linux_datagrand
    git pull 或 git pull --rebase origin master
    說明:建議使用git pull,原因我會在下文說明。
    cat linux_datagrand
    wtf.txt  shiyan.txt  test
  5. 在存在的文件下進行文件遞交
    如果我在終端上有個目錄文件existing_folder,裏面的文件需要遞交至git庫,而你又不想cp到目標庫再push,那麽你可以這樣做:
    cd existing_folder
    git init
    git remote add origin ssh://[email protected]:19234/linux/linux_datagrand.git
    git add .
    git commit -m "Initial commit"
    在push之前先進性pull操作:
    git pull --rebase origin master
    如果不進行pull這一步,會報如下錯誤:
    error: failed to push some refs to git。
    然後:
    git push -u origin master
  6. 庫的遷移或備份
    ##如我想把linux_datagrand.git這個庫裏的文件遷移至daguan.git這個新庫中,要求如下:
    (1)遷移的時候就要考慮到已有的分支;
    (2)保留以前的提交記錄;
    (3)不要把本地的代碼直接提交到gitLab,這樣以前提交的記錄和分支就都沒有了。
    ##操作如下:
    git clone ssh://[email protected]:19234/linux/linux_datagrand.git
    cd linux_datagrand
    ls
    name.txt   shiyan.txt
    ##查看當前的遠程倉庫:
    git remote -v
    origin  ssh://[email protected]:19234/linux/linux_datagrand.git (fetch)
    origin  ssh://[email protected]:19234/linux/linux_datagrand.git (push)
    ##添加daguan.git這個遠程倉庫
    git remote add test ssh://[email protected]:19234/linux/daguan.git
    說明:添加遠程倉庫的格式:
    git remote add  倉庫名字   [倉庫地址]
    ##查看當前的遠程倉庫:
    git remote -v
    origin  ssh://[email protected]:19234/linux/linux_datagrand.git (fetch)
    origin  ssh://[email protected]:19234/linux/linux_datagrand.git (push)
    test    ssh://[email protected]:19234/linux/daguan.git (fetch)
    test    ssh://[email protected]:19234/linux/daguan.git (push)
    ##把本地的分支push到遠程倉庫
    git push -u test master
    這個時候有報錯,內容如下:
    error: failed to push some refs to ‘ssh://[email protected]:19234/linux/daguan.git‘
    hint: Updates were rejected because the remote contains work that you do
    hint: not have locally. This is usually caused by another repository pushing
    hint: to the same ref. You may want to first integrate the remote changes
    hint: (e.g., ‘git pull ...‘) before pushing again.
    hint: See the ‘Note about fast-forwards‘ in ‘git push --help‘ for details.
    ##解決方法:
    (1)由於GitLab一些分支默認被保護,僅僅擁有master級別的用戶才能提交到保護分支,而且master分支默認是保護分支,其他用戶需要通過合並issue請求來提交上去。所以我們先關閉這個master分支保護: Project: "Settings" -> "Repository" -> “Protected Branches(Expand)”  -> "Unprotect"。
    (2)使用命令:git push -f test master
    所以把本地的分支push到遠程倉庫命令:
    git push -f test master
    ##這個時候,我們已經把linux_datagrand.git這個庫裏的文件遷移至daguan.git這個新庫中了。
  7. 庫的回收和重命名
    有的時候庫遷移完成之後,老的庫就不需要了,這個時候就需要我們去回收或重名了,接著上面的實例說明:
    要求如下:
    (1)我已經把linux_datagrand.git這個庫裏的文件遷移至daguan.git這個新庫中了,那麽我不想再使用git clone ssh://[email protected]:19234/linux/daguan.git 建立本地庫;
    (2)我想把linux_datagrand.git這個本地庫更改為daguan.git
    操作如下:
    cd linux_datagrand
    ##先刪除原先的origin
    git remote remove origin
    ##查看當前遠程倉庫
    git remote -v
    test    ssh://[email protected]:19234/linux/daguan.git (fetch)
    test    ssh://[email protected]:19234/linux/daguan.git (push)
    ##我們一般都習慣使用origin,所以更改一下test這個名稱
    命令格式:
    git remote rename <old> <new>
    git remote rename test origin
    ##再查看當前遠程倉庫
    git remote -v
    origin    ssh://[email protected]:19234/linux/daguan.git (fetch)
    origin    ssh://[email protected]:19234/linux/daguan.git (push)
  8. git pull 和 git pull --rebase
    ##說明:
    Git 作為分布式版本控制系統,所有修改操作都是基於本地的,在團隊協作過程中,假設你和你的同伴在本地中分別有各自的新提交,而你的同伴先於你 push 了代碼到遠程分支上,所以你必須先執行 git pull 來獲取同伴的提交,然後才能 push 自己的提交到遠程分支。而按照 Git 的默認策略,如果遠程分支和本地分支之間的提交線圖有分叉的話(即不是 fast-forwarded),Git 會執行一次 merge 操作,因此產生一次沒意義的提交記錄,從而造成了遞交圖像的混亂。
    ##解決:
    其實在 pull 操作的時候,,使用 git pull --rebase 選項即可很好地解決上述問題。 加上 --rebase 參數的作用是,提交線圖有分叉的話,Git 會 rebase 策略來代替默認的 merge 策略。 使用 rebase 策略有什麽好處呢?借用一下 man git-merge 中的圖就可以很好地說明清楚了。
    假設提交線圖在執行 pull 前是這樣的:

             A---B---C  remotes/origin/master
            /
       D---E---F---G  master

    如果是執行 git pull 後,提交線圖會變成這樣:

             A---B---C remotes/origin/master
            /            D---E---F---G---H master

    結果多出了 H 這個沒必要的提交記錄。如果是執行 git pull --rebase 的話,提交線圖就會變成這樣:

                   remotes/origin/master
                       |
       D---E---A---B---C---F‘---G‘  master

    F G 兩個提交通過 rebase 方式重新拼接在 C 之後,多余的分叉去掉了,目的達到。
    ##結論:
    大多數時候,使用 git pull --rebase 是為了使提交線圖更好看,從而方便 code review。
    不過,如果你對使用 git 還不是十分熟練的話,我的建議是 git pull --rebase 多練習幾次之後再使用,因為 rebase 在 git 中,算得上是『危險行為』。
    另外,還需註意的是,使用 git pull --rebase 比直接 pull 容易導致沖突的產生,如果預期沖突比較多的話,建議還是直接 pull。

gitlab的基本操作--上傳、下載、庫的遷移/備份及回收/重命名