Windows下git工具msysGit使用以及Git server初始化
Windows下git工具,這里選擇msysGit,版本為msysGit-netinstall-1.8.1.2-preview20130201。因為Git本身是運行在Linux下的,所以要想在Windows環境下使用,必須構建一個與Linux一樣的虛擬環境。msysgit是 Git 版本控制系統在 Windows 下的版本,msysGit 作為 Window 平台下的原生程序。所以每一個要連接Git server的windows客戶端必須要在本地windows下安裝msysGit。
1、Windows下安裝msysGit
安裝過程非常簡單,確認安裝選擇盤符之后,會跳到如下開始初始化本地git環境:
初始化過程完成之后,就會出現於linux一樣的命令行,如下:
如果安裝完之后,命令行窗口沒有跳出來,請到安裝目錄下點擊msys.bat,如F:/msysGit/msys.bat。
2、生成SSH Key
在本地客戶端通過命令行直接生產SSH Key,
$ ssh-keygen -t rsa
由於我這里已經生成了,所以這里提示這個密鑰已經存在!此時會在~/.ssh/下生成兩個密鑰id_rsa,id_rsa.pub
id_rsa,私鑰
id_rsa.pub 公鑰,這個要保存Git server上,作為訪問Git server的權限。
3、初始化管理員,並啟動Gitosis
在windows客戶端,將公鑰傳輸到遠程的Git server上,如下:
通過命令在客戶端上將公鑰遠程傳輸到線上
$ scp ~/.ssh/id_rsa.pub git@server:/tmp
此時在Git server的/tmp目錄下應該就能看到這個公鑰了。
在Git server上操作如下:
/tmp$ sudo chmod a+r ./id_rsa.pub //先給這個公鑰所有權限
啟動Gitosis命令,完成如下圖:
/tmp$ sudo -H -u git gitosis-init < /tmp/id_rsa.pub
啟動Gitosis之后,初始化gitosis-admin.git庫文件
此時去/home/git/repositories下可以看到gitosis-admin.git庫文件,在gitosis-admin.git下可以看到相關內容如下:
權限控制在gitosis.conf,公鑰SSH Key文件放在/home/git/repositories/gitosis-admin.git/gitosis-export/keydir下,以后所有的客戶端用戶的公鑰都放在這個文件下
另外,給/home/git/repositories/gitosis-admin.git/hooks/post-update權限,如下:
$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
到此管理員初始化完成,Git Server配置完成
4、從Git server上clone版本庫到本地
接下來就是在客戶端遠程訪問版本庫,在windows下開啟msysGit,進入命令窗口
加入想把版本庫存在本地f盤,如下:
$ cd /f
$ git clone git@192.168.10.49:gitosis-admin.git //在本地f盤下可以看到gitosis-admin文件目錄
如上顯示,表示clone完成!
5、測試
在Git server上新建一個版本庫如下:
$ su git
$ mkdir /home/git/repositories/hello.git
$ sudo chown -R git:git /home/git/repositories/hello.git
$ cd /home/git/repositories/hello.git
$ git --bare init
切換root用戶操作
cat /home/git/repositories/gitosis-admin.git/gitosis.conf
新增訪問版本hello的權限,編輯gitosis.conf文件,修改如下:
[gitosis]
[group gitosis-admin]
members = Administrator@CANDLE-PC
writable = gitosis-admin
[group developers]
members = Administrator@CANDLE-PC
writable = hello
初始化完成hello版本庫。然后通過windows客戶端msysGit進行clone,並提交文件如下:
git clone git@192.168.10.49:hello.git
完成版本clone。
測試提交文件,如下:
【第一次提交】
git add a.txt
git commit -a -m 'add a.txt' //第一次提交時,因為當前是一個空項目,commit后面跟一個參數-a,git commit -a 提交當前repos的所有的改變,否則會在git push origin master時報錯
git push origin master
【第二次提交】commit不需要加參數-a
git add a.txt
git commit -m 'add a.txt'
git push origin master
6、問題
A、clone的時候,報錯:ERROR:gitosis.serve.main:Repository read access denied
解決方案:<1>可能是git的權限配置文件members = Administrator@CANDLE-PC,與/home/git/repositories/gitosis-admin.git/gitosis-export/keydir/Administrator@CANDLE-PC.pub這名字不一致,改成一致即可。
<2>git clone路徑問題,通常我們都是采用全路徑,git clone git@192.168.1.100:/home/git/repositories/hello.git,這里訪問可能報上名的錯誤,換成這樣,直接訪問庫文件目錄git clone git@192.168.1.100:hello.git 即可!
B、執行 git push origin master的時候,報錯
error: src refspec master does not match any.
error: failed to push some refs to 'git@192.168.1.100:hello.git'
解決方案:第一次提交時,因為當前是一個空項目,commit后面跟一個參數-a,git commit -a 提交當前repos的所有的改變
【第一次提交】
git add a.txt
git commit -a -m 'add a.txt' //第一次提交時,因為當前是一個空項目,commit后面跟一個參數-a,git commit -a 提交當前repos的所有的改變,否則會在git push origin master時報錯
git push origin master