簡體   English   中英

通過HTTP在個人服務器上克隆git存儲庫會導致克隆一個空的存儲庫

[英]Cloning git repository over HTTP on personal server results in cloning an empty repository

我有一個git存儲庫托管在基於Debian的個人Apache Web服務器上。 如果我像這樣訪問它:
git "command" user@server:/path/to/repo.git
我可以克隆,推,拉等。沒問題。 接下來,我添加了一個虛擬主機,並在DNS記錄中添加了一個子域,以便git.domain.com轉到將存儲庫的目錄中。我可以成功導航至git.domain.com/repo。 git並查看存儲庫中的文件和目錄。 但是,當我嘗試通過帶有域的http克隆它時:
git clone git.domain.com/repo.git
它導致錯誤:
warning: You appear to have cloned an empty repository.
我真的被這個錯誤吸引住了,因為我可以使用ssh克隆它,並且可以在服務器內部( git clone /path/to/repo )進行git clone /path/to/repo ,並且Web服務器應該完全按照內部文件的方式提供文件。

克隆它並收到一個空的存儲庫后,進入存儲庫目錄並運行git show-ref ,命令通過了(沒有失敗),但是沒有輸出。

任何幫助,將不勝感激。 謝謝!

從所謂的“ Dumb http backend”(提供git目錄的Web服務器)公開存儲庫時,需要使某些文件保持最新。 默認情況下,git不會使這些文件保持最新狀態,因為這意味着它僅對所有git用戶使用的一小部分使用不必要的CPU周期。

您可以使用git update-server-info直接更新這些文件,但在每次對存儲庫進行更改后都應注意這樣做,以使文件保持最新。

確保此文件保持最新狀態,方法是將git配置為在使用其他傳輸進行推送時自動運行上述命名的命令。 通過轉到.git/hook ,並將post-update.sample重命名為post-update ,可以輕松啟用此功能。

請注意,以這種方式在http上運行git可能會增加服務器負載,因為它通常需要從服務器請求許多文件,並且如果客戶端已經包含文件的某些部分,則無法部分下載包文件。 https://git-scm.com/book/en/v2/Git-on-the-Server-Smart-HTTP所述 ,可以通過使用Smart git HTTP后端來改善此行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM