Git
不確定我的 git 儲存庫在哪裡儲存文件
我已經創建了一個遠端 git 儲存庫
mkdir /var/www/html/myproject.git chmod 0770 /var/www/html/myproject.git ln -s /var/www/html/myproject.git myproject.git cd myproject.git git --bare init
並成功連接到它並將其複製到我自己的機器上
git clone git@myserver.co.uk:myproject.git
然後上傳一些文件到它
git push
再次嘗試時顯示儲存庫已經是最新的。
但是,我在遠端伺服器上環顧四周,實際上找不到 git 儲存這些文件的位置!它不在
/var/www/html/
也不/home/git
,我唯一設法找到的是 HEAD 文件,其中包含我在/var/www/html/myproject.git/refs/heads/master
. (所以我知道推送有效)文件可能在哪裡?
答案實際上是
objects/pack
在裸儲存庫中時,所有文件都作為散列文件儲存在目錄中。您不能直接從那裡獲取文件。如果有人偶然嘗試做我所做的事情並且在伺服器上有一組可由 git 管理的文件(例如,Web 伺服器),那麼您需要這樣做:
複製您希望文件可訪問的儲存庫(確保 git 可以寫入它,尤其是裡面的 .git 目錄)
mkdir /path/to/clone/repo chmod -R 0775 /path/to/clone/repo cd /path/to/clone/repo git clone /path/to/bare/repo.git
在包含以下行的裸儲存庫中創建一個新的更新後掛鉤:
vi /path/to/bare/repo.git/hooks/post-update #!/bin/sh # Update the real-file cloned repository unset GIT_DIR cd /path/to/cloned/repo git fetch git reset --hard
確保它是可執行的
chmod a+x /path/to/bare/repo.git/hooks/post-update
將送出推送到裸儲存庫並記下以 開頭的行
remote:
以查看是否發生任何錯誤。