天天看點

私有git 搭建在伺服器上建立使用者和項目倉庫(repository)clone項目并送出修改(本地)建立主機信任關系可能遇到的問題

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中加入以下内容:

&lt;VirtualHost *:80&gt;  

    ServerName gitserver  

    DocumentRoot /var/www/cgi-bin/gitweb  

    &lt;Directory /var/www/cgi-bin/gitweb&gt;  

        Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch  

        AllowOverride All  

        order allow,deny  

        Allow from all  

        AddHandler cgi-script cgi  

        DirectoryIndex gitweb.cgi  

    &lt;/Directory&gt;  

&lt;/VirtualHost&gt;  

這就弄好了!

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,如需轉載請自行聯系原作者