Git服务器搭建笔记
前言:最近公司要使用git服務(wù)器對Android4.4的源碼進行版本控制,所以花了些時間在Ubuntu14.04上搭建了git服務(wù)器,正好前段時間也學(xué)習(xí)了下git的使用哈哈
?------------------------------------------------------------------------
?平臺:Ubuntu14.04
?------------------------------------------------------------------------
1.首先在服務(wù)器上需要下載一些軟件
sudo apt-get install git-core python-setuptools openssh-server openssh-client?
2.新建一個git用戶,當(dāng)我們再服務(wù)器上管理git版本庫的時候只允許使用git用戶(root用戶當(dāng)然除外)
sudo useradd -m git sudo passwd git?
3.安裝Gitosis軟件,該軟件用來管理團隊成員對遠(yuǎn)程倉庫的訪問權(quán)限等
git clone https://github.com/res0nat0r/gitosis.git cd gitosis/ sudo python setup.py install注意github網(wǎng)址那是2個數(shù)字0呢,不是大寫的字母o
?
4.選擇一臺計算機作為服務(wù)器管理員遠(yuǎn)程管理服務(wù)器,所以這一步應(yīng)該在管理員的計算機上操作
4.1.安裝git客戶端
sudo apt-get install git4.2.生成ssh密鑰
ssh-keygen -t rsa4.3.使用ssh把生成的密鑰推送到服務(wù)器上,XXX表示管理員計算機的用戶名,serverIP表示服務(wù)器的IP地址,也就是推送到/tmp/目錄下
scp /home/XXX/.ssh/id_rsa.pub git@serverIP:/tmp?
5.切換到服務(wù)器上,把剛剛推送過來的秘鑰生效,
注意:在執(zhí)行這條命令之前請確保/home/git/下沒有.ssh文件夾,若有請手動刪除,因為在執(zhí)行gitosis-init命令時會在/home/git目錄下創(chuàng)建一個.ssh目錄,同時在.ssh目錄下創(chuàng)建authorized_keys文件,并且將id_rsa.pub這個密鑰寫入authorized_keys這個文件中,這樣該密鑰的擁有者就對gitosis-admin.git這個倉庫具有訪問權(quán)限.
sudo -H -u git gitosis-init < /tmp/id_rsa.pub執(zhí)行這條命令后會打印如下log:
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/ Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/由log我們可以看到已經(jīng)自動生成了一個gitosis-admin的倉庫,同時以后git的默認(rèn)倉庫路徑都在/home/git/repositories/下
?
6.需要對其中的一個post-update文件添加可執(zhí)行的權(quán)限
sudo chmod 755 /home/gitrepository/gitosis-admin.git/hooks/post-update?
好啦,到這為止,服務(wù)器已經(jīng)搭建好啦,但是現(xiàn)在貌似只有管理員的計算機能訪問git服務(wù)器上的倉庫哦,因為現(xiàn)在服務(wù)器上只有管理員的ssh秘鑰呢,所以接下來繼續(xù)配置團隊中其他成員的訪問權(quán)限
這里就需要gitosis上場啦,gitosis就是用來管理authorized_keys文件和簡單連接限制的腳本。添加、刪除用戶或設(shè)定權(quán)限這些工作是通過管理一個特殊的git倉庫來實現(xiàn)的,你只需要在這個倉庫做好相應(yīng)的設(shè)置,然后推送到服務(wù)器上,gitosis就會隨之改變策略,而這個特殊的git倉庫就是剛剛生成的gitosis-admin.git啦
既然服務(wù)器上的環(huán)境已經(jīng)搭建好了,那么之后的步驟就不需要在服務(wù)器上操作啦,切換到管理員的計算機上進行第6步
?
7.克隆git特殊倉庫到管理員計算機上,同樣serverIP還是服務(wù)器IP地址
git clone git@serverIP:gitosis-admin.git執(zhí)行這條語句會得到一個gitosis-admin文件夾,里面包括一個gitosis.conf文件和一個keydir文件夾,gitosis.conf主要是配置用戶、倉庫和權(quán)限的配置文件,而keydir目錄中則保存的是用戶的密鑰,每個用戶都得有一個.pub結(jié)尾的文件
我們看下gitosis.conf文件的具體內(nèi)容
$ cat gitosis.conf [gitosis][group gitosis-admin] members = scott writable = gitosis-admin我們可以這么理解,對于一個gitosis-admin組中,成員scott對gitosis-admin倉庫有讀寫權(quán)限,這也就是我們管理員的用戶名以及對gitosis-admin倉庫的管理權(quán)限
?
8.在服務(wù)器上增加一個git倉庫,同時配置成員屬性
當(dāng)我們需要添加一個新git項目時,由于gitosis-admin倉庫只有管理員具有讀寫權(quán)限,所以只有管理員才有權(quán)限去增加git倉庫或者管理項目成員
這里假設(shè)需要新建一個test倉庫,同時需要增加john,jet成員一起進行版本控制,需要如下幾步
8.1.拿到j(luò)ohn與jet的ssh密鑰,密鑰的生成請參考4.1與4.2,管理員把密鑰文件分別命名為john.pub與jet.pub,cp到gitosis-admin/keydir目錄下
8.2.更改gitosis.conf文件:
[gitosis][group gitosis-admin] members = scott writable = gitosis-admin[group team] members = scott john jet writable = test注意:這里members指定的用戶名必須同".pub"前面的命名相同,例如,如果是scott.pub,那么這里寫上scott就可以了,通常,我們生成密鑰時會跟上機器的名字,如果你的.pub命名帶上"@機器名"的話,那么members這里也要帶上@機器名,總之members指定的名字一定要同".pub"前面命名相同。
既然是權(quán)限控制,那么肯定有只讀的權(quán)限啦
[group testread] members = xiaoming readonly = test8.3.提交到遠(yuǎn)程服務(wù)器上
git initgit add . git commit -m "yourLog" git push origin master
如此,就完成了新倉庫的創(chuàng)建與用戶的配置,如果在Log中需要換行,commit更改為如下指令即可
git commit -m ' 1.aaa 2.bbb '?
這里還有一個問題,在配置的這些用戶中都有權(quán)限去創(chuàng)建test倉庫,所以只需要一人去push就行啦,其他用戶可以直接clone代碼到本地庫,不然會引起沖突的哦
?
說明:當(dāng)我們在gitosis.conf文件中聲明了倉庫名,所以我們不需要在服務(wù)器上新建一個倉庫了,因為當(dāng)我們第一次提交文件到服務(wù)器上的時候會自動新建倉庫的。
?
?---------------------------------------------------------------<完>------------------------------------------------------------------------
?
補充:如果我們要提交一個很大的項目,比如Android4.4等系統(tǒng)源碼,使用遠(yuǎn)程push很費時間,還要依賴網(wǎng)絡(luò),時時擔(dān)心網(wǎng)絡(luò)會不會掉線等
一、所以我們可以在服務(wù)器上直接提交代碼
1.在服務(wù)器上安裝git客戶端
2.生成密鑰,并且把密鑰push到服務(wù)器上(這里為什么不直接復(fù)制?因為在版本庫里是找不到密鑰文件的,可能是由于安全原因吧)
3.在項目文件夾中執(zhí)行以下命令
git init git remote add origin git@127.0.0.1:yourGitProject.git git add . git commit -m "yourLog" git push origin master像這樣很耗時的操作建議自己編寫sh腳本讓其自動執(zhí)行,然后我們就可以去干別的事啦
?
二、git客戶端用戶信息配置請使用
git config --global user.name "yourname" git config --global user.email "youremail"?
三、還有一種辦法可以更改git倉庫,不需要讓管理員添加密鑰
比如倉庫里有一個test.git,同時我們知道服務(wù)器上git用戶的密碼,那么嘿嘿嘿嘿
git clone git@serverIP:/home/git/repositories/test.git對了!使用絕對路徑,一般來說,git上的倉庫都在默認(rèn)的/home/git/repositories目錄下
如果提示以下錯誤
Cloning into 'test'...ERROR:gitosis.serve.main:Repository read access denied fatal: The remote end hung up unexpectedly那么我們加上sudo繼續(xù)執(zhí)行上述命令即可
sudo git clone git@serverIP:/home/git/repositories/test.git接下來會提示你輸入git用戶的登錄密碼,當(dāng)我們輸入密碼之后,嘿嘿嘿,這個倉庫就clone下來了,同樣也是可以push的哦,但是每次都需要輸入git用戶的密碼,當(dāng)然gitosis-admin倉庫也可以哦
此方法在我的機器上能實現(xiàn),不知道大家的能不能實現(xiàn),當(dāng)時我還在糾結(jié)我明明配置了訪問git倉庫的用戶權(quán)限,為何每個用戶都能訪問了,后來在正確配置密鑰然后再clone的時候發(fā)現(xiàn)不需要填寫git用戶的密碼了,所以想是不是git用戶的密碼的原因,因為我已經(jīng)連接上git了呀,或者就是我服務(wù)器沒有配置好的原因了,若有大神指導(dǎo),還請指導(dǎo)一二,不勝感激!!
對了,我的/etc/passwd文件末尾,是沒有/bin/sh屬性的,如下所示
git:x:1000:1000::/home/git:?
最后補充一個大插曲
由于源碼是拿到原廠的源碼,而且不是個純凈版本,里面有幾百個.git目錄與幾百個.gitignore文件,由于第一次傳git,沒有經(jīng)驗,所以沒有對這些文件進行處理,就直接往服務(wù)器上傳了,45w個文件,還好是局域網(wǎng),10GB半個小時傳完了,然后另外一臺電腦clone下來,編譯,我去,提示缺少文件,然后我就進入了一邊編譯看缺少哪些文件一邊改.gitignore文件,然后push到服務(wù)器中,另一臺再pull下來,繼續(xù)編譯,就這么折騰了差不多一天,實在受不了了,這簡直是個無底洞阿,還不知道要弄到什么時候去,原廠在開發(fā)的時候應(yīng)該是首先拿著純凈的源碼,然后一邊開發(fā)一邊寫.gitignore文件(因為如果把編譯過程中生成的二進制文件也傳到服務(wù)器中,這對服務(wù)器也是個不小的挑戰(zhàn))最后release給我們的源碼卻沒有刪掉.gitignore,這怎么辦呢?一個一個改?我去好幾百文件呢,突然想到不是還有回收站嗎,于是,我就把所有的.gitigore文件全部放到回收站里哈哈,然后把剩下的所有源碼push到服務(wù)器中,接著再從回收站里恢復(fù)所有的.gitignore文件,再把這些.gitignore文件加到版本庫里push到服務(wù)器中,搞定!真是機智
?
------20170208 ?update-------------------------------------------------------------------------
問題描述:我在A電腦上更改了compile.sh文件,然后push到遠(yuǎn)程,然后在B電腦上使用fetch下載剛剛改動的文件,(由于B電腦上工作區(qū)改動了很多文件,而我害怕被覆蓋,所以使用了fetch而不是pull),然后再使用git checkout [commit] compile.sh更新暫存區(qū)與工作區(qū)的文件,那么,問題來了:這么做的后果是,當(dāng)我使用git log的時候無法顯示在電腦A上的提交,使用git blame compile.sh命令包含如下信息:
00000000 (Not Committed Yet 2017-02-08 14:16:09 +0800 73) source build/envsetup.sh 00000000 (Not Committed Yet 2017-02-08 14:16:09 +0800 74) lunch aosp_avocado-userdebug?這是由于沒有合并導(dǎo)致的,可以先使用git log -p master..origin/master查看本地與遠(yuǎn)程的區(qū)別,然后再使用git merge origin/master來合并代碼,當(dāng)然也可以使用pull來實現(xiàn),只是這么做不太安全,因為不知道到底會合并了哪些文件。
?
轉(zhuǎn)載于:https://www.cnblogs.com/pngcui/p/6291189.html
超強干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的Git服务器搭建笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【洛谷P1632】点的移动
- 下一篇: 使用 FTP 迁移 SQL Server