AFAIK, nie ma dostępnej konfiguracji, która powiedziałaby gitowi, aby zawsze używał force-with-lease
zamiast force
. Wydaje się, że to dobry przykład na żądanie funkcji; jeśli nie masz problemu z zanurzeniem się w bazie kodu git, możesz zaimplementować go samodzielnie i przesłać do przeglądu.
EDYCJA W obecnej postaci jest to nadal aktualne w kwietniu 2019 r.
Do tego czasu jedyną opcją, jaką widzę, jest, jak to często bywa, utworzenie, alias
które służy do tego celu.
Utwórz alias
Aby utworzyć alias git config --global alias.<alias-name> <command>
, w naszym przypadku sugerowałbym coś podobnego.
git config --global alias.pushf "push --force-with-lease"
Spowoduje to utworzenie wpisu w .gitconfig
pliku globalnym (który zwykle można znaleźć w swoim katalogu domowym ). Następnie możesz po prostu użyć git pushf
do wymuszenia z dzierżawą .
Zabrudz sobie ręce
Jeśli chcesz zaimplementować tę funkcję samodzielnie, ale nie jesteś pewien, od czego zacząć, powinieneś najpierw spojrzeć na katalog dokumentacji w repozytorium git . Tutaj możesz znaleźć wskazówki dotyczące kodowania i informacje o tym, jak przesyłać poprawki .
Możesz znaleźć wszystkie te linki i więcej na oficjalnej stronie społeczności .
rm
dorm -i
w twoim .bashrc; pewnego dnia zapomnisz i usuniesz ważny plik na serwerze. Idąc z własnym aliasem nie ma tego problemu :)pushf
użyćpush -f
aliasu, ale zawsze dwukrotnie sprawdzałem, czy nie robię , ponieważ wygląda podobnie do aliasu. Niektórzy członkowie zespołu ipush -f
tak go używali , myśląc, że alias jest dla niego tylko kosmetycznym skrótem. Ostatecznie zmieniliśmy bezpieczniejszą formę na aliaspushfl
i przestaliśmy się tym martwić.Git 2.13 (Q2 2017) wyjaśnia, dlaczego nie ma „ochrony” przed zapomnieniem tej opcji wypychania, ponieważ nawet jeśli nie zapomnisz jej na
git push
poziomie, może ona zostać zignorowana.Zobacz commit f17d642 (19 kwietnia 2017) autorstwa Ævara Arnfjörð Bjarmason (
avar
) .(Scalone przez Junio C Hamano -
gitster
- w zobowiązaniu 46bdfa3 , 26 kwietnia 2017 r.)Tak więc dokumentacja na
git push
razie obejmuje:źródło
Moim rozwiązaniem było stworzenie skryptu opakowującego i użycie aliasu, aby zawsze używać go zamiast prawdziwego
git
.Ilekroć próbuję
git push -f
, widzę następujące informacje:Niektóre zalety tego skryptu to:
--force-with-lease
, więc nie denerwuję się, gdy się mylęgit push --force
zadziała.Jak to wdrożyć:
-f
git
Te instrukcje zakładają Linuksa lub Maca z uruchomionym bash. Nie próbowałem tego z zsh lub Windows, ale zakładam, że to też zadziała.
~/.bash_profile
:~./git_wrapper.sh
:Po tych zmianach zrestartuj terminal i
git
powinieneś teraz być zarozumiały, gdy spróbujesz wymusić push.źródło
Dla osób używających OMYZSH możesz po prostu użyć
ggfl
.źródło
Chcę, aby przypomniało mi się, że nie powinienem używać
-f
, ale nie chcę dać się zwieść i uwierzyć, że-f
to oznacza--force-with-lease
. Więc to jest moje podejście:Dodaj do swojej
.bash_profile
,.bashrc
lub.zshrc
.źródło
Możesz utworzyć funkcję bash, która zastępuje
git
i używa--force-with-lease
zamiast--force
# replaces `git push --force` with `git push --force-with-lease` git() { if [[ $@ == 'push -f'* || $@ == 'push --force'* ]]; then command git push --force-with-lease else command git "$@" fi }
lub w jednym wierszu:
git() { if [[ $@ == 'push -f'* || $@ == 'push --force'* ]]; then command git push --force-with-lease; else command git "$@"; fi; }
Po prostu dodaj go do swojego
~/.bashrc
lub~/.zshrc
.źródło