useradd git #建立git使用者
passwd git #設定密碼
su git #切換到git使用者
cd ~/ #切換到home目錄
git init --bare cube #建立一個叫cube的項目倉庫
git clone git@IP位址:cube ~/cube
需要說明的是這裡會要求輸入使用者git的密碼,我們稍後建立主機信任後就不需要輸入密碼了.
然後在cube下建立一個README.txt
git add *
git commit -m "create new file"
git push origin master
在本地執行
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub
拷貝檔案公鑰内容
在伺服器執行
mkdir ~/.ssh
chmod 755 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
echo 拷貝的公鑰 >> ~/.ssh/authorized_keys
要注意檔案權限的問題.
使用gitosis來配置和管理git服務端
該<code>git</code>使用者
<code>git</code>該使用者所屬的組
該<code>/srv/gitosis</code>目錄将儲存Gitosis的資料和存儲庫
要配置Gitosis,您不要直接在伺服器上編輯檔案。相反,Gitosis提供了一個包含配置的Git存儲庫。要更新此配置,您<code>gitosis-admin</code>可以像任何其他存儲庫一樣克隆,送出和推送。
您現在可以初始化管理存儲庫。
注意:在某些情況下,這可能會導緻此類錯誤:
原因可能是git主目錄沒有正确設定。通過手動設定來修複它:
此外,此指令建立<code>/srv/gitosis/repositories</code>将存儲實際托管存儲庫的目錄。
在管理存儲庫初始化完成後,禁用使用者git的基于密碼的ssh登入可能是合理的。
要實作這一點,添加
在......的最後 <code>/etc/ssh/sshd_config</code>
如上所述,通過将送出推送到<code>gitosis-admin</code>存儲庫來配置Gitosis 。要克隆此存儲庫(使用Gitosis!),請運作:
在<code>gitosis-admin</code>存儲庫中,您将看到兩件事:
<code>gitosis.conf</code> - Gitosis和存儲庫權限的配置檔案
<code>keydir</code> - 包含每個使用者公用密鑰的目錄
要修改存儲庫或使用者,或配置Gitosis,隻需送出克隆中的更改并将其推回到伺服器。
您可以在/ usr / share / doc / gitosis中找到一些示例配置檔案。
這定義了一個名為“free_monkey”的新組,它是一個任意字元串。“jdoe”是myteam的成員,可以通路“gitosis”存儲庫。“monkey_deployer”鍵将隻能通路“free_monkey”。
将此添加到gitosis.conf中,送出并推送它:
現在,使用者“jdoe”可以通路名為“free_monkey”的存儲庫,但是我們還沒有建立一個存儲庫。我們将做的是在本地建立一個新的存儲庫,在Git伺服器上進行初始化,然後推送它:
做一些工作,git添加和送出檔案
當使用SSH時,最後一個指令将失敗,并顯示錯誤消息“不顯示為Git存儲庫”這可以通過在伺服器上手動初始化存儲庫來修複
并重試最後一個指令
随着最後的推動,你将會參加比賽。存儲庫“free_monkey”已在伺服器上建立(在/ srv / gitosis / repositories中),您可以像任何ol'Git存儲庫一樣開始使用它。
Git病毒庫也可以用于gitweb; 隻需将gitweb配置中包含存儲庫的目錄指向。
下一個自然的事情是讓幸運的幾個送出通路FreeMonkey項目。這是一個簡單的兩步過程。
首先,收集他們的公共SSH密鑰,我将其稱為“alice.pub”和“bob.pub”,并将其放入當地gitosis-admin存儲庫的keydir /。其次,編輯gitosis.conf并将其添加到“成員”清單中。
請注意,密鑰檔案名必須有“.pub”擴充名。
gitosis.conf更改:
送出和推送:
而已。Alice和Bob現在可以像這樣克隆free_monkey存儲庫:
愛麗絲和鮑勃也将有承諾的權利。
如果您正在運作一個公共項目,您的使用者将擁有送出權限,然後您将擁有其他所有人。我們如何讓别人隻讀通路,而不用SSH密鑰?
我們隻是使用git-daemon。這是獨立于Gitosis,它與Git本身一起。
這将使您使用Gitosis管理的所有存儲庫對于公衆來說是隻讀的。有人可以像這樣克隆FreeMonkey:
要僅導出一些存儲庫而不是其他存儲庫,您需要在要公開的每個存儲庫的根目錄(例如/srv/gitosis/repositories/free_monkey.git)内觸摸git-daemon-export-ok。然後從上面的git-daemon指令中删除“--export-all”。
gitosis.conf可以設定做一些其他的巧妙的技巧。在Gitosis源目錄中打開example.conf(您最初在頂部克隆Gitosis方式),以檢視所有選項的摘要。您可以将一些存儲庫指定為隻讀(與可寫)相反,但尚未公開)。組成員清單可以包括另一個組。還有一些其他的技巧,我會留給讀者發現。
注意事項
如果您的伺服器上的/srv/gitosis/.gitosis.conf似乎沒有更新,以比對您的本地副本(他們應該比對),即使您正在進行更改和推送,可能是您的更新後挂接不可執行。較舊版本的setuptools可能導緻這種情況。一定要解決這個問題:
如果您的Python好東西處于非标準位置,則必須另外編輯更新後,并在頂部放置“export PYTHONPATH = ...”行。第一次嘗試在gitosis-admin中推送更改時,不這樣做會給您一個Python堆棧跟蹤。
如果您想在非标準位置安裝Gitosis,我不推薦它。這是一個邊緣的情況,作者沒有反抗,直到我發現他幫助我讓它工作。
對于勇氣,您需要編輯系統上的任何檔案來控制非登入,非互動式shell的預設PATH。在Ubuntu上,這是/ etc / environment。将Gitosis的路徑添加到PATH行。還為PYTHONPATH插入一行,并将其設定為非标準的Python site-packages目錄。例如,這是我的/ etc / environment:
進行這些更改後,請務必登出并重新登入。
不要使用我上面提到的gitosis-init行進行标準安裝,而是使用這個略微修改的代碼:
確定在上述更新後的鈎子中設定PYTHONPATH。
那個*應該這樣做 我有目的地簡化了這個非标準的設定,因為我認為沒有很多人會使用它。如果您需要更多資訊(我的nick是up_the_irons),請在FreeNode上的#git中打開我。
如果您在伺服器上的非标準端口上運作SSH,則有兩種方法可以指定Git将嘗試連接配接哪個端口。一個是明确聲明您正在使用SSH協定,因為這可以讓您在該URL中輸入端口号:
或者你可以把它放在你的/ .ssh / config檔案中:
[repo]塊用于定義與gitweb一起使用的一些必要區域。
[組]塊用于兩者:
定義使用者組
定義存儲庫權限
@用于定義使用者組。
您應該送出并推送您在此檔案中所做的任何更改。
keydir隻是一個包含使用者公鑰的目錄。一些鍵可以是user @ machine的形式,這些鍵必須用gitosis.conf中的那個格式定義。最好建立使用者組并将其用作存儲庫的成員。一旦添加新的密鑰來啟用一些新使用者,您應該将檔案添加到Git存儲庫并送出并推送它們。新使用者将使用上述格式的Git指令,就像您用來克隆gitosis-admin存儲庫一樣。
gitweb
gitweb是一個簡單的可視化網頁界面,可以使用任何相容CGI的網頁服務來運作,這裡選用的Apache
git clone git://git.kernel.org/pub/scm/git/git.git
cd git/
make GITWEB_PROJECTROOT="/home/git/repositories"\
GITWEB_JS="gitweb/static/gitweb.js" \
GITWEB_CSS="gitweb/static/gitweb.css" \
GITWEB_LOGO="gitweb/static/git-logo.png" \
GITWEB_FAVICON="gitweb/static/git-favicon.png" \
bindir=/usr/local/bin \
gitweb
make gitwebdir=/var/www/cgi-bin/gitweb install-gitweb
需要注意的是GITWEB_PROJECTROOT應該修改成你的倉庫的路徑,并且其權限(包括子目錄)應是705。
然後修改/etc/gitweb.conf,改成下面的樣子
$projectroot = "/home/git/repositories"; #倉庫路徑
$GIT = "/usr/local/bin/git"; #git可執行檔案路徑
在/etc/httpd/conf/httpd.conf中加入以下内容:
<VirtualHost *:80>
ServerName gitserver
DocumentRoot /var/www/cgi-bin/gitweb
<Directory /var/www/cgi-bin/gitweb>
Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
AllowOverride All
order allow,deny
Allow from all
AddHandler cgi-script cgi
DirectoryIndex gitweb.cgi
</Directory>
</VirtualHost>
這就弄好了!
git clone git@IP:gitosis-admin.git
Initialized empty Git repository in /home/yang/gitosis-admin/.git/
Agent admitted failure to sign using the key.
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
// 解決方法,在管理者PC上
# ssh-add ~/.ssh/id_rsa
如果遇到gieweb的頁面顯示找不到工程,多半是權限設定錯誤。
簡單的說就是Apache使用者組不具備通路你倉庫目錄的權限,例如我的倉庫是放在/home/git/repositories下的,是以應将/home/git和/home/git/repositories以及你倉庫中的所有項目的權限都設定成705,之前在網上發現有人說設定成775的,如果你設定成775的話雖然也能用,但會導緻無法使用指令通路代碼倉庫,原因我還不清楚。
svn 遷移到git
http://blog.csdn.net/huaishu/article/details/41083951
本文轉自yzy121403725 51CTO部落格,原文連結:http://blog.51cto.com/lookingdream/1945807,如需轉載請自行聯系原作者