1.Git倉庫管理
現在本地已經創建了git倉庫,又在gitlab上創建了一個git倉庫,並且讓這兩個倉庫進行遠程同步,這樣gitlab倉庫既可以備份也可以與他人協作管理遠程倉庫以及根據需要推送或拉取數據。
管理遠程倉庫包括了如何添加遠程倉庫、移除無用遠程倉庫、查看遠程倉庫、修改遠程倉庫等。
1.1部署開源倉庫
GitLab 是一個用於倉庫管理系統的開源項目。
1.安裝配置gitlab依賴項
如想使用Postfix來發送郵件,在安裝期間請選擇'Internet Site'. 您也可以用sendmai或者 配置SMTP服務並使用SMTP發送郵件.在 Centos7系統上, 下面的命令將在系統防火牆里面開放HTTP和SSH端口.
[root@git-node1 ~]# yum install curl openssh-server postfix
[root@git-node1 ~]# systemctl enable sshd postfix
[root@git-node1 ~]# systemctl start sshd postfix
[root@git-node1 ~]# firewall-cmd --permanent --add-service=http
[root@git-node1 ~]# systemctl reload firewalld
2.添加GitLab倉庫,並安裝到服務器
[root@git-node1 ~]# curl -sS http://packages.gitlab.cc/install/gitlab-ce/script.rpm.sh | sudo bash
[root@git-node1 ~]# yum install gitlab-ce
3.啟動GitLab
1.gitlab-ctl reconfigure
2.瀏覽到主機名和登錄Browse to the hostname and login
3.首次訪問GitLab,系統會讓你重新設置管理員的密碼,設置成功后會返回登錄界面.
4.默認的管理員賬號是root,如果你想更改默認管理員賬號,請輸入上面設置的新密碼登錄系統后修改帳號名.
5.創建key
[root@git-node1 demo]# ssh-keygen #一路回車 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 48:94:9a:65:cd:0f:f3:17:c6:dc:3c:28:0a:bb:47:98 root@git-node1 The key's randomart image is: +--[ RSA 2048]----+ | .+ o + | | .= = . * + | | =.= * o . . | | o.E.o o . | | .oS . | | . . | | . | | | | |
6.復制id_rsa.pub公鑰
1
2
|
[root@git-node1 demo]# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAyVSAhs+ZBTEwv5nMwyoordV4VBy+DoCyGBJcjqkcfagRyyGUZvS57T4rhgSpz2csMTtxBXAyo0vJltxPr8McsZmcDZ8+t5qr22h9wHULFs5uB5/uZ6CDomm<br>/rVtJjiT2l1Uzh14De1CJDbNRPTCbxvcD5Mi7Ko29epymdt8agYqV2+ROynYaSjqcKxuo6pXD/cGskO7JTOkek2wxmTFOxFQR/Ec1LtVk8ilcesENzMdeU4Nwr2lec6Lr++qKXQuO7a3vB4958Hfhh1JlRI<br>ShDuHBOsFChG+vJim6tl123k7jjePHxJhUORhVMpmD4pMNwN+NYv1ta3J3ZSW6v5uWxw== root@git-node1
|
7.添加公鑰至gitlab,如圖1-6-1
1.2添加遠程倉庫
1.gitlab創建倉庫,進行遠程同步,如圖1-6-2
2.使用git remote 添加遠程倉庫地址,選擇SSH方式克隆。
[root@git-node1 ~]# cd demo/ //必須是git init 初始化倉庫目錄
[root@git-node1 demo]# git remote add origin git@git-node1:root/git_demo.gitxxx
1.3修改遠程倉庫
由於剛開始添加的遠程倉庫寫錯了url,現在通過如下命令進行url修改
[root@git-node1 demo]# git remote set-url origin git@git-node1:root/git_demo.git
1.4查看遠程倉庫
如果已經配置了遠程倉庫服務器,可以運行 git remote命令。它會列出你指定每一個遠程服務器的簡寫。
[root@git-node1 demo]# git remote
origin
也可以指定-v選項,會顯示需要讀寫遠程倉庫git保存簡寫名稱以及對應的URL地址。
[root@git-node1 demo]# git remote -v
origin git@git-node1:root/git_demo.git (fetch)
origin git@git-node1:root/git_demo.git (push)
1.5推送遠程倉庫
將本地庫更新內容推送至遠程,用git push命令,實際上是將當前分支推送至遠程倉庫。
由於遠程庫是新建立空的,我們在第一次推送時候,git默認是不會把本地master關聯至遠端的master,所以我們需要加上-u參數,這樣git不但會把本地的master分支內容推送至遠程倉庫的master分支,並且還會將本地的master分支和遠程master分支關聯起來。在以后推送或者拉取時就可以簡化命令。
[root@git-node1 demo]# git push -u origin master
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (5/5), 432 bytes | 0 bytes/s, done.
Total 5 (delta 0), reused 0 (delta 0)
To git@git-node1:root/git_demo.git
* [new branch] master -> master
分支 master 設置為跟蹤來自 origin 的遠程分支 master。
如果推送沖突可以選擇--force強行推送
[root@git-node1 xuliangwei]# git push origin --force
如果一次都沒有推送數據,可以選擇—all一次全部推送至遠程服務器
[root@git-node1 xuliangwei]# git push origin --all
1.6克隆遠程倉庫
如果現在倉庫已經有開發好的項目,需要加入進來開發,可以先clone整個項目。
[root@git-node1 tmp]# git clone git@git-node1:root/git_demo.git
正克隆到 'git_demo'...
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 5 (delta 0), reused 0 (delta 0)
接收對象中: 100% (5/5), done.
1.7拉取遠程倉庫
簡單的說,這個命令會訪問遠程倉庫,從中取出你還沒有的數據,或者git pull之后還是沒有的數據。
此前在添加的遠程倉庫的時候指定了倉庫名origin,命令會自動將其添加為遠程倉庫並默認以origin為簡寫。
所以,git fetch origin相當於從遠程獲取最新版本到本地,然后比較本地master分支和遠程master分支差別最后進行合並。
[root@git-node1 demo]# git fetch origin //拉取主分支最新版本(可以拉取其他分支)
[root@git-node1 demo]# git fetch origin dev //獲取dev分支最新數據
拉取數據,在生產環境中見到比較多的還是git pull相當於是從遠程獲取最新版本並merge到本地
[root@git-node1 xuliangwei]# git pull origin master #拉取主分支最新版本(可以拉取其他分支)
[root@git-node1 xuliangwei]# git pull origin dev //獲取dev分支最新數據
上述命令其實相當於git fetch 和 git merge在實際使用中,git fetch更安全一些,因為在merge前,我們可以查看更新情況,然后再決定是否合並
1.6.8更改遠程倉庫
如果想重新命名一個遠程倉庫名稱。將test重命名為rainbow,可以通過git remote rename進行修改。
注意:這同時會修改你的遠程分支名字。之前引用test/master的現在會引用rainbow/master
1.添加新遠程分支,並賦予test為遠程倉庫名稱
[root@git-node1 git_demo]# git remote add test git@git-node1:root/git_demo.git
[root@git-node1 git_demo]# git remote -v
origin git@git-node1:root/git_demo.git (fetch)
origin git@git-node1:root/git_demo.git (push)
test git@git-node1:root/git_demo.git (fetch)
test git@git-node1:root/git_demo.git (push)
2.修改test名稱為rainbow名稱
[root@git-node1 git_demo]# git remote rename test rainbow
[root@git-node1 git_demo]# git remote -v
origin git@git-node1:root/git_demo.git (fetch)
origin git@git-node1:root/git_demo.git (push)
rainbow git@git-node1:root/git_demo.git (fetch)
rainbow git@git-node1:root/git_demo.git (push)
1.9移除遠程倉庫
因為一些變動不再使用一些特定的鏡像,可以通過git remote remove 遠程倉庫名稱,移除遠程倉庫
1.查看遠程倉庫
[root@git-node1 git_demo]# git remote -v
origin git@git-node1:root/git_demo.git (fetch)
origin git@git-node1:root/git_demo.git (push)
rainbow git@git-node1:root/git_demo.git (fetch)
rainbow git@git-node1:root/git_demo.git (push)
2.移除不再使用的rainbow遠程倉庫
[root@git-node1 git_demo]# git remote remove rainbow
[root@git-node1 git_demo]# git remote -v
origin git@git-node1:root/git_demo.git (fetch)
origin git@git-node1:root/git_demo.git (push)
1.10Git遠程倉庫小結
要添加一個倉庫,首先必須知道倉庫的地址,然后使用git remote add 命令添加遠程倉庫,也可使用git clone命令克隆。(Git支持多種協議,包括http、https,但通過ssh支持的原生git協議速度最佳。)
要關聯一個遠程庫,使用命令git remote add origin git@server-name:path/repo-name.git,關聯后,使用命令git push -u origin master第一次推送master分支的所有內容,此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改
# git remote add [remote] [url]#添加(關聯)遠程庫
# git remote set-url [remote] [url] #修改遠程倉庫
# git clone [url] #克隆遠程倉庫項目
# git remote #查看指定遠程倉庫命名簡寫
# git remote –v #查看遠程倉庫詳細信息以及名稱對應URL
# git push -u remote master #第一次推送master分支的所有內容
# git fetch remote [branch/tag] #下載遠程倉庫的所有變動
# git pull remote [branch/tag] #拉取主分支最新版本(可以拉取其他分支)
# git push remote [branch/tag] --force #強行推送當前分支至遠程分支,及時沖突
# git push remote [branch/tag] --all #推送所有分支到遠程倉庫
# git remote rename [oldname] [newname] #修改遠程倉庫名稱
# git remote remove [name] #刪除遠程倉庫名稱以及URL地址