Muszę usunąć stare i nieobsługiwane gałęzie z naszego zdalnego repozytorium. Próbuję znaleźć sposób na wyświetlenie zdalnych oddziałów według daty ich ostatniej modyfikacji, ale nie mogę.
Czy istnieje łatwy sposób na utworzenie listy zdalnych oddziałów w ten sposób?
git
maintenance
administration
branch
Roni Yaniv
źródło
źródło
Odpowiedzi:
commandlinefu ma 2 ciekawe propozycje:
lub:
To jest dla lokalnych oddziałów, w składni Unix. Używając
git branch -r
, możesz w podobny sposób pokazać zdalne gałęzie:Michael Forrest wspomina w komentarzach, że zsh wymaga znaków ucieczki dla
sed
wyrażenia:kontinuity dodaje w komentarzach :
W wielu wierszach:
Uwaga: n8tr jest odpowiedź , na podstawie
git for-each-ref refs/heads
jest czystsze. I szybciej .Zobacz także „ Opcja Tylko nazwa dla
git branch --list
? ”Mówiąc bardziej ogólnie, tripleee przypomina nam w komentarzach :
(Zilustrowałem ten punkt w 2014 r. Za pomocą „ Jaka jest różnica między programowaniem powłoki
$(command)
i`command`
w programie? ”)źródło
/json
na końcu dowolnego adresu URL commandlinefu.com, a otrzymasz wszystkie polecenia jako JSON.Oto czego używam:
Oto wynik:
W przypadku oddziałów zdalnych użyj po prostu „refs / remotes” zamiast „refs / heads”:
Opierając się na odpowiedzi n8tr , jeśli interesuje Cię również ostatni autor w branży i masz dostępne narzędzie "kolumnowe", możesz użyć:
Co da ci:
Możesz wcześniej wywołać „git fetch --prune”, aby uzyskać najnowsze informacje.
źródło
authordate
(co wygląda na to, że gałąź została utworzona po raz pierwszy?). Jeśli zmieniszauthordate
nacommitterdate
, zobaczysz daty ostatniego zatwierdzenia w każdej gałęzi. Na przykład:git for-each-ref --sort='-committerdate:iso8601' --format=' %(committerdate:iso8601)%09%(refname)' refs/heads
Opierając się na Olivier Croquette , lubię używać względnej daty i skracać nazwę oddziału w następujący sposób:
Co daje wynik:
Zalecam utworzenie pliku Bash w celu dodania wszystkich ulubionych aliasów, a następnie udostępnienie skryptu zespołowi. Oto przykład, aby dodać tylko ten:
Następnie możesz to zrobić, aby uzyskać ładnie sformatowaną i posortowaną listę lokalnych oddziałów:
źródło
Aby dodać do komentarza @VonC, wybierz preferowane rozwiązanie i dodaj je do swojej listy aliasów ~ / .gitconfig dla wygody:
Następnie prosta „git branchdate” wyświetla listę za Ciebie ...
źródło
--format='%(authordate)%09%(objectname:short)%09%(refname)'
który również pobiera krótki skrót każdej gałęzi.| tac
, tylko--sort='authordate'
zamiast-authordate
Oto, co wymyśliłem po przejrzeniu tego .
PREV_REF
Wyboru jest usunąć duplikaty, jeśli więcej niż jeden punkty odgałęzienia do tej samej popełnić. (Podobnie jak w lokalnym oddziale, który istnieje również w zdalnym).PAMIĘTAJ, że zgodnie z żądaniem OP
git branch --merged
igit branch --no-merged
są przydatne w identyfikowaniu oddziałów, które można łatwo usunąć.[ https://git-scm.com/docs/git-branch]
źródło
Posortowane zdalne gałęzie i data ostatniego zatwierdzenia dla każdej gałęzi.
źródło
Zrobiłem dwa warianty w oparciu o odpowiedź VonC .
Mój pierwszy wariant:
Obsługuje lokalne i zdalne gałęzie (
-a
), obsługuje stan odłączonej głowy (dłuższe polecenie sed, chociaż rozwiązanie jest trochę prymitywne - po prostu zastępuje informacje o odłączonej gałęzi słowem kluczowym HEAD), dodaje w zatwierdzeniu temat (% s ), i umieszcza rzeczy w kolumnach za pomocą znaków potoku dosłownego w ciągu formatu i przekazuje wynik końcowy docolumn -t -s "|"
. (Możesz użyć dowolnego separatora, o ile jest to coś, czego nie oczekujesz w pozostałej części wyniku).Mój drugi wariant jest dość hakerski, ale naprawdę chciałem czegoś, co nadal ma wskaźnik „to jest gałąź, na której aktualnie jesteś”, tak jak robi to polecenie gałęzi.
Powoduje to,
*
że that oznacza bieżącą gałąź w słowo kluczowe, a gdy treść pętli widzi słowo kluczowe, zamiast tego ustawia flagę i nic nie wyświetla. Flaga jest używana do wskazania, że dla następnego wiersza należy zastosować inne formatowanie. Jak powiedziałem, jest to totalnie hacky, ale działa! (Przeważnie. Z jakiegoś powodu moja ostatnia kolumna staje się nieaktualna w bieżącej linii gałęzi).źródło
git for-each-ref
to przyjazny dla skryptów sposób przetwarzania gałęzi. Musisz raz uruchomić symbolic-ref, aby uzyskać aktualną gałąź.Zrobiłem prosty alias, nie jestem pewien, czy dokładnie o to pytałem, ale jest prosty
Zrobiłem to, ponieważ chciałem wyświetlić wszystkie gałęzie, a nie tylko moje lokalne gałęzie, które robią tylko powyższe polecenia
alias git_brs="git fetch && git branch -av --format='\''%(authordate)%09%(authordate:relative)%09%(refname)'\'"
Możesz przejść wyżej do,
grep origin
aby uzyskać tylko źródłaWyświetla wszystkie gałęzie wraz z datą ostatniej modyfikacji, pomaga mi zdecydować, który z nich powinienem pobrać dla najnowszej wersji
Skutkuje to poniższym typem wyświetlania
Spróbuj i daj mi znać, jeśli to pomogło, szczęśliwy gitting
źródło
Lub możesz użyć mojego skryptu PHP, https://gist.github.com/2780984
źródło
Oto funkcja, którą możesz dodać do swojego bash_profile, aby to ułatwić.
Użycie w repozytorium Git:
branch
drukuje wszystkie lokalne oddziałybranch -r
wypisuje wszystkie zdalne gałęzieFunkcjonować:
źródło
W programie PowerShell poniżej przedstawiono gałęzie na pilocie, które są już scalone i mają co najmniej dwa tygodnie (
author:relative
format zaczyna wyświetlać tygodnie zamiast dni po dwóch tygodniach):źródło