Czy uważa się za złą praktykę - umieszczanie .git/hooks w repozytorium projektów (na przykład za pomocą dowiązań symbolicznych). Jeśli tak, jaki jest najlepszy sposób dostarczenia tego samego haka do różnych użytkowników git?Umieszczanie haków git w repozytorium
Odpowiedz
Nie, umieszczenie ich w repozytorium jest w porządku, sugerowałbym to (jeśli są one przydatne również dla innych). Użytkownik musi je jawnie włączyć (jak powiedziałeś, na przykład przez dowiązanie symboliczne), co jest z jednej strony trochę uciążliwe, ale chroni użytkowników z drugiej strony przed uruchomieniem dowolnego kodu bez jego zgody.
Generalnie zgadzam się z Scytale, z kilkoma dodatkowymi sugestiami, na tyle, że warto osobnej odpowiedzi.
Najpierw powinieneś napisać skrypt, który tworzy odpowiednie dowiązania symboliczne, szczególnie jeśli te haczyki dotyczą wymuszania zasad lub tworzenia przydatnych powiadomień. Ludzie będą znacznie częściej używać haczyków, jeśli mogą po prostu wpisać bin/create-hook-symlinks
, niż gdy sami muszą to zrobić.
Po drugie, bezpośrednie dowiązania symboliczne uniemożliwiają użytkownikom dodawanie własnych haków. Na przykład wolę próbkę przed zatwierdzeniem, która zapewnia, że nie mam żadnych białych znaków. Świetnym sposobem obejścia tego jest dodanie skryptu przechwytującego haka w repozytorium i dołączenie do niego haczyków symbolicznych. Opakowanie może następnie zbadać $0
(zakładając, że jest to skrypt bash, odpowiednik taki jak argv[0]
w innym przypadku), aby dowiedzieć się, który hak był wywoływany jako, następnie wywołać odpowiedni hak w repozytorium, a także hak odpowiedniego użytkownika, który będzie musiał zmień nazwę, przekazując wszystkie argumenty do każdego. Krótki przykład z pamięci:
#!/bin/bash
if [ -x $0.local ]; then
$0.local "[email protected]" || exit $?
fi
if [ -x tracked_hooks/$(basename $0) ]; then
tracked_hooks/$(basename $0) "[email protected]" || exit $?
fi
Skrypt instalacyjny będzie przenieść wszystkie wcześniej istniejących haków do boku (dołączyć .local
ich nazw), a podlinkowujemy wszystkie znane nazwiska hak do powyższego skryptu:
#!/bin/bash
HOOK_NAMES="applypatch-msg pre-applypatch post-applypatch pre-commit prepare-commit-msg commit-msg post-commit pre-rebase post-checkout post-merge pre-receive update post-receive post-update pre-auto-gc"
# assuming the script is in a bin directory, one level into the repo
HOOK_DIR=$(git rev-parse --show-toplevel)/.git/hooks
for hook in $HOOK_NAMES; do
# If the hook already exists, is executable, and is not a symlink
if [ ! -h $HOOK_DIR/$hook -a -x $HOOK_DIR/$hook ]; then
mv $HOOK_DIR/$hook $HOOK_DIR/$hook.local
fi
# create the symlink, overwriting the file if it exists
# probably the only way this would happen is if you're using an old version of git
# -- back when the sample hooks were not executable, instead of being named ____.sample
ln -s -f ../../bin/hooks-wrapper $HOOK_DIR/$hook
done
Dodałem 'chmod + x .git/hooks/*' do twojego 'bin/create-hook-symlinks', aby to działało. – guneysus
@guneysus Nie powinieneś tego potrzebować, ponieważ zaczepy powinny już być wykonywane (powinny być sprawdzane w ten sposób), a linki nie wymagają specjalnych uprawnień, tylko pliki, do których prowadzą. – Cascabel
Lepszym sposobem na uzyskanie katalogu hook jest 'HOOK_DIR = $ (git rev-parse --show-toplevel) /. Git/hooks'. –
Od http://git-scm.com/docs/git-init#_template_directory, można użyć jednego z tych mechanizmów, aby zaktualizować .git/haki dir każdego nowo utworzonego git repo:
katalog szablon zawierający pliki i bezpośredni które zostaną skopiowane do $ GIT_DIR po utworzeniu.
Katalog szablon będzie jednym z następujących (w kolejności):
argument podany z opcją --template;
zawartość zmiennej środowiskowej $ GIT_TEMPLATE_DIR;
zmienna konfiguracyjna init.templateDir; lub
domyślny katalog szablonów:/usr/share/git-core/templates.
"możesz użyć jednego z tych mechanizmów", ale podasz tylko jeden. – Otheus
https://www.npmjs.com/package/pre-commit pakiet npm obsługuje to elegancko pozwala określić pre-commit haków w package.json.
- 1. Pisanie haków Git w skryptach python/bash
- 2. Wykonywanie haków Git w systemie Windows
- 3. Utrzymywanie repozytorium Git w innym repozytorium git
- 4. Utwórz repozytorium git zawierające inne repozytorium git.
- 5. jak kontrolować własność plików automatycznie pchanych do repozytorium git za pomocą haków commitów?
- 6. Jak monitorować repozytorium git dla zmian?
- 7. Liczba zatwierdzeń w repozytorium git
- 8. Jak dodać repozytorium git jako współdzieloną zależność innego repozytorium git?
- 9. jak zrestartować repozytorium git
- 10. Ikona repozytorium Git
- 11. git podczas zmiany repozytorium
- 12. git tylko część repozytorium
- 13. Zmniejszenie rozmiaru repozytorium git:
- 14. Git - Przeglądaj zdalne repozytorium
- 15. Publikowanie repozytorium "git svn"
- 16. Przenoszenie repozytorium git
- 17. Odzyskiwanie złamany repozytorium git
- 18. Anonimizuj lokalne repozytorium git?
- 19. Nadpisywanie zdalnego repozytorium git z moim repozytorium
- 20. Klonowanie repozytorium git Awaria
- 21. Repozytorium Git za duże
- 22. Wyodrębnij część repozytorium git?
- 23. Git "nie wydaje się być repozytorium git"
- 24. Jak pracować z repozytorium git w innym repozytorium?
- 25. tylko do odczytu lustro git z repozytorium svn
- 26. Zamień zdalne repozytorium git (Heroku)
- 27. Eksportuj repozytorium git do svn
- 28. Konwersja kodu pliku repozytorium git
- 29. repozytorium git ignorowanie wszystkich .dlls
- 30. Jak zachować repozytorium GIT zsynchronizowane?
co jeśli jest to polityka firmy, kod nie jest "arbitralny", to jest wymagany kod, więc byłoby to uważane za ograniczenie w GIT, ponieważ nie ma innego (uprzednio zdefiniowanego) katalogu, który jest śledzony, który również jest wykonywany razem z hakami regularnymi –
Automatyczne dostarczanie haków to problem bezpieczeństwa, cieszę się, że Git nie robi tego bezpośrednio - aby wymusić zasady zespołu/firmy, użyć haków po stronie serwera lub pozwolić użytkownikom ręcznie zdecydować się na włącz ich jako @si opisuje :) –
"chroni użytkowników [...] przed uruchomieniem dowolnego kodu bez jego zgody". Jeśli programista postąpiłby tak, jak sugerujesz (dowiązanie symboliczne), hak mógł zostać zmieniony przez kogoś innego i uruchomić "dowolny kod bez ich zgody". – MiniGod