Apache-2.2

僅在 ubuntu 伺服器上帶有 apache 的 git 儲存庫 .git 路徑

  • August 25, 2017

我有一個執行 apache2 的 ubuntu 伺服器。我正在嘗試將其設置為通過 http 為 git 儲存庫提供服務。

在閱讀了數十個範例之後,我以非常簡化的配置文件結束,為簡單起見刪除了所有身份驗證。

我在 conf.d 中的 git_conf 文件如下所示:

SetEnv GIT_PROJECT_ROOT /srv/repos/git/
SetEnv GIT_HTTP_EXPORT_ALL

ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

<Location /git>
</Location>

我創建了一個空的 git 儲存庫,如下所示:

# git --bare init myrepo
# cd myrepo
# git --bare update-server-info
# cd ..
# chown -R www-data:www-data myrepo

現在,樂趣開始了。我能夠在本地機器上複製 repo:

# cd ~/tmp
# git clone /my/repo/path/myrepo test1

但是,每當我嘗試像這樣從遠端機器複製時:

$ git clone http://myserver/git/myrepo test1

我收到:

fatal: http://cfs-int-redmine/git/iosdemo/info/refs not found: did you run git update-server-info on the server?

如果在伺服器上,我創建一個指向 repo 的符號連結,例如:

# ln -s myrepo myrepo.git

然後我嘗試複製http://myserver/git/myrepo.git,它可以工作。

發生什麼了?我應該離開使用“.git”以便能夠使用儲存庫嗎?沒有.git,我如何讓它工作?

通常,任何主機都會使用該.git後綴。從技術的角度來看,我並不認為它是必需的,但在這一點上它是一個非常根深蒂固的標準,你自己的測試似乎證實了git這一點。目錄名稱上的.git後綴將目錄標記為 git 裸儲存庫,類似於該.git文件夾用於將 git 儲存庫資訊儲存在非裸儲存庫中的方式。

這個問題的另一個解決方案也是 100% 確保您的ScriptAlias指向正確的git-http-backend位置。

SetEnv GIT_PROJECT_ROOT /data/git/
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/

引用自:https://serverfault.com/questions/320464