搭建 Git 服務器

一、遠程登錄服務器

遠程登錄方式很多,常用 ssh 或者 putty,我最常使用的是 ssh
ssh遠程登錄用戶名和ip 按實際情況填寫

 $ ssh [email protected]

使用win7 如果遇到如下問題

$ ssh [email protected]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:E13usrfN0xcsMQjXPRWhM/Odq/Z4Idd+vRiCuFuSen4.
Please contact your system administrator.
Add correct host key in /c/Users/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /c/Users/user/.ssh/known_hosts:13
ECDSA host key for 192.168.102.207 has changed and you have requested strict checking.
Host key verification failed.

解決方法:

C:\Users\user\.ssh\known_hosts  

進入上面路徑,將對應ip 的公鑰刪除即可,不可使用 windows 自帶的文本編輯器,可選用netepad++

二、同步時間

NTP(Network Time Protocol,網絡時間協議)是用來使網絡中的各個計算機時間同步的一種協議。NTP可以使計算機時鐘與 Internet 時間服務器同步。 這意味着可以更新計算機上的時鐘,以與時間服務器上的時鐘匹配,這有助於確保計算機上的時鐘是準確的。它的用途是把計算機的時鐘同步到世界協調時間UTC,其精度在局域網內可達0.1ms,在互聯網上絕大多數的地方其精度可以達到1-50ms。

運行以下命令,啓用NTP:

sudo timedatectl set-ntp true

更改時區

sudo dpkg-reconfigure tzdata

其後全選擇 None of the above 然後按回車,
再選擇 GMT -8
最後查看時間是否正確

pi@raspberrypi:~ $ date

三、安裝 vim 和 git

獲取最新的軟件包

pi@raspberrypi:~ $ sudo apt-get update

安裝 vim

pi@raspberrypi:~ $ sudo apt-get -y install vim

安裝git

pi@raspberrypi:~ $ sudo apt-get install git

四、創建gitadmin 用戶,並生成公鑰私鑰

創建 gitadmin 用戶

pi@raspberrypi:~ $ sudo adduser gitadmin

創建用戶會要求輸入密碼,輸入密碼後,其它直接回車,使用默認即可
切換至gitadmin 用戶

pi@raspberrypi:~ $ su gitadmin  
gitadmin@raspberrypi:/home/pi $ cd ~

生成公鑰私鑰

gitadmin@raspberrypi:~ $ ssh-keygen

按三次回車,第一次是確認路徑,後面是密碼和確認密碼

將公鑰拷貝至 /tmp

gitadmin@raspberrypi:~/.ssh $ cp id_rsa.pub /tmp/gitadmin.pub

五、切換回pi 用戶,再創建git 用戶

pi@raspberrypi:~ $ sudo adduser git

創建用戶會要求輸入密碼,輸入密碼後,其它直接回車,使用默認即可

六、安裝 gitolite

切換爲 git 用戶

pi@raspberrypi:~ $ su git  
git@raspberrypi:/home/pi $ cd ~

輸入剛纔創建用戶時的密碼
然後克隆 gitolite

git@raspberrypi:~ $ git clone git://github.com/sitaramc/gitolite

再在用戶目錄下新建bin目錄

git@raspberrypi:~ $ mkdir -p bin

執行

git@raspberrypi:~ $ gitolite/install -to bin

設置管理員的私鑰

git@raspberrypi:~/bin $ ./gitolite setup -pk /tmp/gitadmin.pub

執行結果如下

Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
Initialized empty Git repository in /home/git/repositories/testing.git/
WARNING: /home/git/.ssh missing; creating a new one
(this is normal on a brand new install)
WARNING: /home/git/.ssh/authorized_keys missing; creating a new one
(this is normal on a brand new install)

至此git 用戶目錄下已經有如下目錄

git@raspberrypi:~ $ ls

bin   gitolite   projects.list   repositories

七、使用 gitolite 方法

切換至gitadmin 用戶

git@raspberrypi:~ $ su gitadmin  
gitadmin@raspberrypi:/home/git $ cd ~

克隆倉庫 gitolite-admin

gitadmin@raspberrypi:~ $ git clone [email protected]:gitolite-admin

修改用戶權限

查看目錄 gitolite-admin

gitadmin@raspberrypi:~/gitolite-admin $ ls

conf  keydir

這兩個目錄
conf 管理repo(增刪,權限)
keydir 管理SSH用戶公鑰

添加倉庫,或者修改用戶權限,都可通過修改 conf 目錄下的 gitolite 文件來實現
新增用戶,可以通過keydir實現

先看conf

gitadmin@raspberrypi:~/gitolite-admin/conf $ cat gitolite.conf

repo gitolite-admin
      RW+ = gitadmin

repo testing
     RW+ = @all

repo 爲 repository 縮寫
如果需要添加倉庫,按照上面方式書寫,再用git 提交即可,如

repo gitolite-admin
     RW+ = gitadmin


repo testing
     RW+ = @all


repo testing2
     RW+ = @all

幾種權限組
權限組: Owner
倉庫的擁有者,可以對倉庫做任何想做的事情,比如push, 修改其它人訪問這個倉庫的權限,甚至刪除,至少需要有一個人

權限組: RW
可讀寫組, clone, push, pull

權限組: R
可讀組, clone, pull

其中 Owner包含 RW, RW權限 包含 R

增加用戶

在用戶電腦上使用scp 將公鑰拷貝至git管理員電腦上,如下

$ scp id_rsa_copy.pub [email protected]:~/gitolite-admin/keydir/user.pub

執行結果

[email protected]’s password:
id_rsa_copy.pub 100% 392 129.9KB/s 00:00

執行完成後,在git 管理員電腦上,使用 gitadmin 用戶執行

gitadmin@raspberrypi:~ $ cd gitolite-admin/  
gitadmin@raspberrypi:~/gitolite-admin $ git status

執行結果

On branch master
Your branch is up-to-date with ‘origin/master’.
Untracked files:
(use “git add …” to include in what will be committed)


    keydir/user.pub


nothing added to commit but untracked files present (use “git add” to track)

user.pub 就是剛纔拷貝的用戶公鑰

提交改動

gitadmin@raspberrypi:~/gitolite-admin $ git add -A  
gitadmin@raspberrypi:~/gitolite-admin $ git commit -m "add user user"

如下情況是因爲沒有配置用戶名,或者用戶郵箱,因爲git 的每次改動,都需要記錄是誰做的修改

*** Please tell me who you are.


Run


  git config --global user.email “[email protected]
  git config --global user.name “Your Name”


to set your account’s default identity.
Omit --global to set the identity only in this repository.


fatal: empty ident name (for <(null)>) not allowed

下面添加用戶名及郵箱

gitadmin@raspberrypi:~/gitolite-admin $ git config --global user.name "gitadmin"  
gitadmin@raspberrypi:~/gitolite-admin $ git config --global user.email "gitadmin@raspberrypi"

然後再提交

gitadmin@raspberrypi:~/gitolite-admin $ git commit -m "add user user"

[master d2f096e] add user user
 1 file changed, 1 insertion(+)
 create mode 100644 keydir/user.pub

最後在試一下使用新添加的用戶,去克隆git 上的 testing 倉庫,如果不需要輸入密碼,便是成功了

後期如果需要移除倉庫,只需將conf 文件中對應的倉庫給移除

gitadmin@raspberrypi:~/gitolite-admin/conf $ vim gitolite.conf

並進入git 用戶,移除repositories 目錄下對應的倉庫即可
如test 倉庫

git@raspberrypi:~ $ cd repositories/  
git@raspberrypi:~/repositories $ ls  

gitolite-admin.git    test.git    testing.git

git@raspberrypi:~/repositories $ rm -rf test.git/

這樣就移除了倉庫 test

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章