Git - kait pasca-terima dengan tarikan git “Gagal menemukan direktori git yang valid”

17

Ini sangat aneh tetapi ketika mengatur repositori git dan membuat kait pasca-terima dengan:

echo "--initializing hook--"
cd ~/websites/testing
echo "--prepare update--"
git pull
echo "--update completed--"

kait memang berjalan, tetapi tidak pernah berhasil menjalankan git pull dengan benar:

6bfa32c..71c3d2a  master -> master
--initializing hook--
--prepare update--
fatal: Not a git repository: '.'
Failed to find a valid git directory.
--update completed--

jadi saya bertanya pada diri saya sekarang, bagaimana mungkin untuk membuat hook memperbarui klon dengan pasca-terima?

dalam hal ini pengguna menjalankan proses adalah sama, dan semuanya di dalam folder pengguna jadi saya benar-benar tidak mengerti ... karena jika saya masuk secara manual ke

cd ~/websites/testing
git pull

ini bekerja tanpa masalah ...

bantuan apa pun akan sangat dihargai

Terima kasih banyak

Zanona
sumber

Jawaban:

25

Saat hook sedang berjalan, GIT_DIRdan (jika worktree didefinisikan secara eksplisit) GIT_WORK_TREEdiatur. Itu artinya tarikan Anda tidak akan berjalan dengan repositori kedua di direktori tempat Anda berubah.

Coba git --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull; atau unset lingkungan repo-lokal git dengan ini:

unset $(git rev-parse --local-env-vars)

Info lebih lanjut tentang variabel lingkungan ini dalam man 1 git .

Tobu
sumber
1
Terima kasih banyak untuk itu, itu benar-benar bekerja, saya akan memeriksa lebih banyak informasi tentang itu juga. Cheers
zanona
6

Satu hal yang saya alami adalah menggunakan post-updatehook '- git-dir' bekerja sangat baik tetapi git masih mengeluh tentang pohon yang hilang (walaupun menggunakan '--work-tree')

Singkatnya, ini tidak berhasil:

git --git-dir /path/to/websites/testing/.git --work-tree /path/to/websites/testing pull

sedangkan ini bekerja:

cd /path/to/websites/testing
git --git-dir /path/to/websites/testing/.git pull


sumber
1

Tidakkah ini berhasil?

cd /home/smb/websites/testing
env -i git pull

Diedit

Lebih baik lagi

cd /home/smb/websites/testing
unset GIT_DIR
git pull
tommasop
sumber
0

Sudahkah Anda mencoba dengan path lengkap bukannya ~?

cd /home/smb/websites/testing
git pull
sutra
sumber
0

Script mungkin dipanggil dengan /bin/sh, yang tidak mengerti ~. Cobalah dengan path lengkap ~sebagai gantinya.

Darren Chamberlain
sumber
0

Jawaban yang disarankan pertama adalah benar - ketika sebuah hook sedang menjalankan GIT_DIR dll sudah diatur. Namun, jika Anda ingin dapat menggunakan skrip di repositori lain maka metode itu cacat karena kode-keras mengatur ulang GIT_DIR. Seperti yang tersirat, cara lain adalah menghapus variabel dengan menggunakan env sebagai berikut: env -i git reset --Dengan jelas perintah apa yang Anda jalankan di sana terserah Anda - itu hanya bit 'env -i' yang penting .


sumber