2011-01-04 16 views
54

Ho scritto il mio hook post-merge personalizzato, ora ho aggiunto una directory "hooks" alla mia cartella di progetto principale (dato che git non tiene traccia delle modifiche in .git/hooks), da qualche parte letto che posso fare un link simbolico da ganci per .git/ganci in modo da non dover copiare il file da una cartella all'altra ogni volta che qualcuno lo cambia così ho provato:Link simbolico a un hook in git

ln -s -f hooks/post-merge .git/hooks/post-merge

Ma non sembra funzionare, qualche idea perché? "Ganci LN/post-merge .git/ganci/post-merge" funziona bene, ma fare un hard link è lo stesso che copyin immagino ....

+15

Poiché il collegamento simbolico viene risolto in relazione alla sua posizione. Un link simbolico in '.git/hooks /' che punta a 'hooks/post-merge' viene risolto in' .git/hooks/hooks/post-merge', che non esiste. Vuoi 'ln -s -f ../../hooks/post-merge .git/hooks/post-merge'. O rendi la tua vita più semplice: "ln -s -f ../hooks .git/hooks". Il tuo problema non ha niente a che fare con git. –

+1

http://stackoverflow.com/questions/3462955/putting-git-hooks-into-repository e http://stackoverflow.com/questions/427207/can-git-hook-scripts-be-managed-along-with -il-repository (e http://stackoverflow.com/questions/3703159/git-remote-shared-pre-commit-hook) sottolinea il fatto che symlink può funzionare. – VonC

risposta

123

hai appena usato strada sbagliata, dovrebbe essere:

ln -s -f ../../hooks/post-merge .git/hooks/post-merge 
+7

Non capisco perché ho bisogno di andare su due directory per collegare una risorsa che vive nella cartella in cui ho 'cd''d. Non dovrebbe essere solo 'ln -s./Ganci /'? – Droogans

+27

Questo. Quando git sta valutando il link simbolico, apparentemente lo fa usando '.git/hooks' come directory di lavoro, quindi i percorsi relativi dovrebbero essere relativi a quella directory. Questo è più auto-esplicativo se prima si esegue il comando 'cd' in' .git/hooks' prima di creare il link simbolico e si calcola il percorso relativo da lì. – Eliot

+10

@Eliot né la creazione né la risoluzione dei collegamenti simbolici sono influenzate dalla directory di lavoro. Qualsiasi cosa tu fornisca 'ln' verrà memorizzata come target e risolta rispetto alla posizione del link. –

2

Modifica directory prima che collega

cd /path/to/project-repo/.git/hooks 
ln -s -f ../../hooks/post-merge ./post-merge 
1

perché non solo cp ./hooks/* .git/ganci/

questo ha lavorato per il mio in Mac OS

+6

Perché "Non devo copiare il file da una cartella all'altra ogni volta che qualcuno cambia" –