2011-10-04 16 views
7

Aşağıdaki post-commit Neden GIT_WORK_TREE ayarı post-commit kancada çalışmıyor?

#!/bin/sh 
export GIT_WORK_TREE=/var/www/example/ 
export GIT_DIR=/home/mark/test/.git/ 
git checkout -f 

#!/bin/sh 
export GIT_WORK_TREE=/var/www/example/ 
export GIT_DIR=/home/mark/test/.git/ 
git checkout -f 
$ git commit -m 'An example commit.' 
fatal: Unable to create '/var/www/example/.git/index.lock': No such file or directory 
[master 0938e48] An example commit. 

xx GIT_WORK_TREE ayarı göz ardı ediliyorsa. Bu ortam değişkeninin ayarlanması neden çalışmıyor gibi görünüyor? Git sürüm 1.7.4.1 kullanıyorum.

cevap

18

Buradaki sorun (ayrıca ve pre-commit, prepare-commit-msg ve commit-msgt) post-commit kanca içinde GIT_INDEX_FILE ortam değişkeni .git/index için ayarlanmış olmasıdır. (Bu githooks documentation belgelenmiştir ama başka yerde about the settings of environment variables and the current directory in git hooks gönderdiniz.)

GIT_INDEX_FILE ortam değişkeninin etkisi olarak git adam sayfasının ÇEVRE DEĞİŞKENLERİ bölümünde açıklanmaktadır:

GIT_INDEX_FILE

This environment [variable] allows the specification of an alternate index file. If not specified, the default of $GIT_DIR/index is used.

... ve bazı nedenlerle, bu durumda GIT_WORK_TREE'a göre kullanılıyor.

#!/bin/sh 
unset GIT_INDEX_FILE 
export GIT_WORK_TREE=/var/www/example/ 
export GIT_DIR=/home/mark/test/.git/ 
git checkout -f 
+1

bu da worktree ve gitdir seçenekleri Git üzerinde çalışmasını sağlamak için kullanılabilir:

size kanca gibi görünecektir böylece, sadece, GIT_INDEX_FILE unset gerekir beklediğiniz gibi kanca çalışması için stash ve diğer komutlar? 'git --worktree --gitdir ' sadece belirli komutlar üzerinde çalışıyor gibi görünüyor. –

+0

@Adam Dymitruk: "--work-tree = DIRECTORY" ve "--git-dir = DIRECTORY" komutlarının ne olursa olsun, güvenli bir şekilde kancaların dışında çalıştığını buldum. (b) nihai iş ağacının ve depo dizininin nasıl hesaplandığı hakkında kafa karıştırıcı kuralları hatırlamaktan kaçınmak için her ikisini de mutlak yollara ayarlamanız yeterlidir ... –

+0

bu, bir kanca dışındadır. Bazı işler, bazıları yok .. Bazılarının göreceli yollardan dolayı işe yarayıp yaramadığını teyit etmeliyim .. Ama aynı yolu kullandığım ve sadece değiştiğim için bu tarz davranışlar garip olurdu. komuta. –