Jak ustawić git na automatyczne wypychanie do zdalnego repozytorium (w tym automatyczne dostarczanie mojego hasła) po każdym zatwierdzeniu do lokalnego repozytorium?
86
Jak ustawić git na automatyczne wypychanie do zdalnego repozytorium (w tym automatyczne dostarczanie mojego hasła) po każdym zatwierdzeniu do lokalnego repozytorium?
Odpowiedzi:
Najpierw upewnij się, że możesz wysłać ręcznie bez podawania hasła. Jeśli przesyłasz przez HTTP lub HTTPS, będzie to przypadek utworzenia
.netrc
pliku z danymi logowania lub dodania nazwy użytkownika i hasła do adresu URL pilota . Jeśli używasz protokołu SSH, możesz utworzyć parę kluczy, w której klucz prywatny nie ma hasła, lub użyć gossh-agent
do buforowania klucza prywatnego .Następnie powinieneś utworzyć plik wykonywalny (
chmod +x
).git/hooks/post-commit
zawierający następujące elementy:... dostosowywanie tej linii, jeśli chcesz wysłać do pilota innego niż
origin
lub wypchnąć gałąź inną niżmaster
. Upewnij się, że ten plik jest wykonywalny.źródło
.git/config
prefiksiefeature/xy/
.Jeśli zaczniesz używać więcej niż gałęzi głównej, możesz chcieć automatycznie wypchnąć bieżącą gałąź. Mój hook (
.git/hooks/post-commit
) wygląda tak:Przesuwa aktualną gałąź, jeśli może określić nazwę gałęzi za pomocą git symbolic-ref.
„ Jak uzyskać nazwę aktualnej gałęzi w Git? ” Dotyczy tego i innych sposobów uzyskania aktualnej nazwy gałęzi.
Automatyczne wypychanie każdej gałęzi może przeszkadzać podczas pracy w gałęziach zadaniowych, w których spodziewasz się zrobienia kiełbasy (nie będziesz w stanie łatwo zmienić bazy po pchnięciu). Zatem hak nie będzie przepychał gałęzi kończących się zdefiniowanym sufiksem (w przykładzie „_local”).
źródło
#!/bin/sh
aby to zadziałało. W przeciwnym razie to powtarzał:error: cannot run .git/hooks/post-commit: No such file or directory
. Dziękuję, najbardziej podoba mi się Twoje rozwiązanie.Utwórz plik o nazwie „post-commit” w katalogu .git / hooks z zawartością „git push”, chociaż jeśli chcesz automatycznie podać hasło, konieczna będzie modyfikacja.
źródło
Ten skrypt git-autopush umożliwia ustawienie przechwytywania po zatwierdzeniu, podobnie do tego, co zostało zalecane w sekcji „ Jak skonfigurować automatyczne przekazywanie? ”.
Ale w przypadku hasła musisz uruchomić plik
ssh-agent
.źródło
ssh-agent
, wystarczy użyć innego hasła mniejgit
-tylkossh
-klawisz:ssh-keygen -t ed25519 -f ~/.ssh/id_pushonly
.echo $'\nHost pushonly\nHostname DESTINATION\nIdentityFile ~/.ssh/id_pushonly\n' >> ~/.ssh/config
. PodczasDESTINATION
konfiguracji,git-shell
jak pokazano na superuser.com/a/444899/72223 przy użyciu klucza pubkey z~/.ssh/id_pushonly.pub
. Potrzebnygit
-URL to coś w stylugit@pushonly:path/to/repo.git
. Do debugowania:ssh git@pushonly COMMAND
musi działaćgit-shell -c COMMAND
naDESTINATION
. DoCOMMAND
zobaczeniaman git-shell
-t ed25519
? Używam ogólnie-t rsa
, choć ostatnio muszę dodać-m PEM
dossh-keygen
( stackoverflow.com/a/53645530/6309 , stackoverflow.com/a/53729009/6309 ).ed25519
dlatego, że daje krótkie i poręczne linki~/.ssh/authorized_keys
. Bardzo interesujące jest również to, co DJB pisze o ed255519 : Zabezpieczenie przed kanałami bocznymi (Spectre), mniej procesora itp. Przy okazji, gdysshd
mam do czynienia ze starymi s, zwykle tworzę dla nich specjalny klucz i konfiguruję go w~/.ssh/config
.Oto prosta instrukcja wypychania / wyciągania bez podawania hasła przez ssh dla osób używających Linuksa i Windowsa (git bash)
Na Twoim kliencie:
Sprawdź, czy masz wygenerowane klucze ssh:
Jeśli nie masz żadnego klucza (dwie linie „ls: cannot access ...”), wygeneruj nowy. Jeśli masz któryś z kluczy, pomiń ten krok.
Skopiuj swój klucz na zdalny serwer, z którego chcesz pobrać lub wypchnąć za pomocą git:
Uwaga: podczas tej operacji będziesz musiał podać hasło. Po tym twoje operacje pull / push nie będą żądać hasła.
Uwaga 2: Musisz zalogować się do serwera używając nazwa_użytkownika przynajmniej raz przed użyciem tej procedury (katalog domowy, do którego kopiowane są klucze ssh jest tworzony podczas pierwszego logowania)
źródło
Oto skrypt bash dla gita, który automatycznie przenosi się
push
do zdalnego repozytorium$ cd /path/to/your/repository
wtedy$ push
Umieść ten skrypt na przykład w pliku
$HOME/.ssh/push
Połącz go z
/bin
katalogiem, aby można go było wywołać za pomocą$ push
poleceniaźródło
Jeśli używasz Husky,
post-commit
domyślnie nadpisze plik hooks.Używamy tego polecenia w package.json, aby automatycznie zmienić bazę i wypchnąć wszystkie zatwierdzenia do mastera. (Pierwszy bieg
yarn add --dev git-branch-is
.)źródło