Repo uzupełnia Git, upraszczając pracę w wielu repozytoriach. Zobacz Narzędzia kontroli źródła , aby uzyskać wyjaśnienie związku między Repo i Git. Więcej informacji na temat Repo można znaleźć w README Repo .
Wykorzystanie repo przybiera następującą formę:
repo command options
Elementy opcjonalne są pokazane w nawiasach [ ]. Na przykład wiele poleceń przyjmuje project-list jako argument. Możesz określić project-list jako listę nazw lub listę ścieżek do lokalnych katalogów źródłowych projektów:
repo sync [project0 project1 ... projectn]
repo sync [/path/to/project0 ... /path/to/projectn]
Wsparcie
Ta strona przedstawia jedynie kluczowe opcje. Zobacz pomoc wiersza poleceń, aby uzyskać szczegółowe informacje. Po zainstalowaniu Repo możesz znaleźć najnowszą dokumentację, zaczynając od podsumowania wszystkich poleceń, uruchamiając:
repo help
Możesz zobaczyć szczegółowe informacje o dowolnym poleceniu, uruchamiając to w drzewie Repo:
repo help command
Na przykład poniższe polecenie daje opis i listę opcji dla argumentu init
Repo, który inicjuje Repo w bieżącym katalogu. (Szczegóły w init .)
repo help init
Lub, aby zobaczyć tylko listę dostępnych opcji, uruchom:
repo command --helpNa przykład:
repo init --help
w tym
repo init -u url [options]
Instaluje repozytorium w bieżącym katalogu. Spowoduje to utworzenie katalogu .repo/
z repozytoriami Git dla kodu źródłowego Repo i standardowych plików manifestu systemu Android.
Opcje:
-
-u
: określ adres URL, z którego chcesz pobrać repozytorium manifestu. Wspólny plik manifestu można znaleźć podhttps://android.googlesource.com/platform/manifest
. -
-m
: Wybierz plik manifestu w repozytorium. Jeśli nie wybrano żadnej nazwy manifestu, wartością domyślną jestdefault.xml
. -
-b
: Określ wersję, czyli konkretną manifest-branch .
Uwaga: W przypadku wszystkich pozostałych poleceń Repo bieżący katalog roboczy musi być albo katalogiem nadrzędnym .repo/
, albo podkatalogiem katalogu nadrzędnego.
synchronizacja
repo sync [project-list]
Pobiera nowe zmiany i aktualizuje pliki robocze w Twoim lokalnym środowisku, zasadniczo wykonując git fetch
we wszystkich repozytoriach Git. Jeśli uruchomisz repo sync
bez argumentów, zsynchronizuje ona pliki dla wszystkich projektów.
Po uruchomieniu repo sync
dzieje się tak:
Jeśli projekt nigdy nie był synchronizowany, synchronizacja
repo sync
jest odpowiednikiemgit clone
. Wszystkie gałęzie w zdalnym repozytorium są kopiowane do lokalnego katalogu projektu.Jeśli projekt był wcześniej synchronizowany,
repo sync
jest równoważna:git remote update git rebase origin/branch
gdzie
branch
to aktualnie wyewidencjonowana gałąź w lokalnym katalogu projektu. Jeśli oddział lokalny nie śledzi oddziału w repozytorium zdalnym, dla projektu nie nastąpi synchronizacja.Jeśli operacja rebase Git powoduje konflikty scalania, użyj normalnych poleceń Git (na przykład
git rebase --continue
), aby rozwiązać konflikty.
Po pomyślnym uruchomieniu repo sync
kod w określonych projektach jest aktualny i zsynchronizowany z kodem w zdalnym repozytorium.
Oto kluczowe opcje. Zobacz repo help sync
, aby uzyskać więcej informacji:
-c
: pobierz tylko bieżącą gałąź manifestu z serwera.-d
: Przełącz określone projekty z powrotem do wersji manifestu. Jest to przydatne, jeśli projekt znajduje się obecnie w gałęzi tematu, ale wersja manifestu jest tymczasowo potrzebna.-f
: Kontynuuj synchronizację innych projektów, nawet jeśli projekt się nie zsynchronizuje.-j threadcount
: Podziel synchronizację na wątki w celu szybszego zakończenia. Upewnij się, że nie przeciążysz swojej maszyny - zostaw trochę procesora zarezerwowanego dla innych zadań. Aby zobaczyć liczbę dostępnych procesorów, najpierw uruchom:nproc --all
-q
: Uruchom cicho, pomijając komunikaty o stanie.-s
: Synchronizuj ze znaną dobrą kompilacją określoną przez element manifest-server w bieżącym manifeście.
Przekazać plik
repo upload [project-list]
W przypadku określonych projektów Repo porównuje oddziały lokalne z oddziałami zdalnymi zaktualizowanymi podczas ostatniej synchronizacji repozytorium. Repo prosi o wybranie jednej lub więcej gałęzi, które nie zostały przesłane do przeglądu.
Wszystkie zatwierdzenia w wybranych gałęziach są następnie przesyłane do Gerrita przez połączenie HTTPS. Aby włączyć autoryzację przesyłania, musisz skonfigurować hasło HTTPS. Odwiedź Generator haseł , aby wygenerować nową parę nazwa użytkownika/hasło do użycia przez HTTPS.
Kiedy Gerrit otrzymuje dane obiektu na swoim serwerze, zamienia każde zatwierdzenie w zmianę, dzięki czemu recenzenci mogą komentować określone zatwierdzenie. Aby połączyć kilka zatwierdzeń w punktach kontrolnych w jedno zatwierdzenie, użyj git rebase -i
przed uruchomieniem przesyłania.
Jeśli uruchomisz repo upload
bez argumentów, przeszuka wszystkie projekty pod kątem zmian do przesłania.
Aby edytować zmiany po ich przesłaniu, użyj narzędzia takiego jak git rebase -i
lub git commit --amend
, aby zaktualizować lokalne zatwierdzenia. Po zakończeniu edycji:
- Sprawdź, czy zaktualizowana gałąź jest aktualnie wyrejestrowaną gałęzią.
- Dla każdego zatwierdzenia w serii wprowadź identyfikator zmiany Gerrit w nawiasach:
# Replacing from branch foo [ 3021 ] 35f2596c Refactor part of GetUploadableBranches to lookup one specific... [ 2829 ] ec18b4ba Update proto client to support patch set replacments # Insert change numbers in the brackets to add a new patch set. # To create a new change record, leave the brackets empty.
Po zakończeniu przesyłania zmiany mają dodatkowy zestaw poprawek.
Jeśli chcesz przesłać tylko aktualnie pobraną gałąź Git, użyj flagi --current-branch
(lub w skrócie --cbr
).
różnica
repo diff [project-list]
Pokazuje zaległe zmiany między zatwierdzeniem a drzewem roboczym za pomocą git diff
.
Ściągnij
repo download target change
Pobiera określoną zmianę z systemu recenzji i udostępnia ją w lokalnym katalogu roboczym projektu.
Na przykład, aby pobrać zmianę 23823 do katalogu platform/build:
repo download platform/build 23823
Uruchomienie repo sync
usuwa wszelkie zatwierdzenia pobrane podczas pobierania repo download
. Możesz też sprawdzić gałąź zdalną za pomocą git checkout m/master
.
Uwaga: istnieją opóźnienia w replikacji na wszystkich serwerach na całym świecie, więc istnieje niewielkie opóźnienie w tworzeniu kopii lustrzanych między momentem, gdy zmiana jest widoczna w sieci w Gerrit , a momentem, w którym repo download
może znaleźć zmianę dla wszystkich użytkowników.
dla wszystkich
repo forall [project-list] -c command
Wykonuje podane polecenie powłoki w każdym projekcie. Następujące dodatkowe zmienne środowiskowe są udostępniane przez repo forall
:
REPO_PROJECT
jest ustawiona na unikalną nazwę projektu.REPO_PATH
to ścieżka względna do katalogu głównego klienta.REPO_REMOTE
to nazwa systemu zdalnego z manifestu.REPO_LREV
to nazwa wersji z manifestu, przetłumaczona na lokalną gałąź śledzenia. Użyj tego, jeśli chcesz przekazać wersję manifestu do lokalnie wykonywanego polecenia Git.REPO_RREV
to nazwa zmiany z manifestu, dokładnie taka, jak zapisano w manifeście.
Opcje:
-c
: Polecenie i argumenty do wykonania. Polecenie jest oceniane przez/bin/sh
i wszelkie argumenty po nim są przekazywane jako parametry pozycyjne powłoki.-p
: Pokaż nagłówki projektu przed wyjściem określonego polecenia. Osiąga się to poprzez powiązanie potoków ze strumieniami stdin, stdout i sterr polecenia oraz potokowanie wszystkich danych wyjściowych w ciągły strumień, który jest wyświetlany w pojedynczej sesji pagera.-v
: Pokaż komunikaty, które polecenie zapisuje na stderr.
suszona śliwka
repo prune [project-list]
Przycina (usuwa) tematy, które są już połączone.
początek
repo start branch-name [project-list]
Rozpoczyna nową gałąź do rozwoju, zaczynając od wersji określonej w manifeście.
Argument BRANCH_NAME
zawiera krótki opis zmiany, którą próbujesz wprowadzić w projektach. Jeśli nie wiesz, rozważ użycie nazwy default
.
Argument project-list
projektów określa, które projekty należą do tej gałęzi tematu.
Uwaga: Kropka ( . ) jest skrótem nazwy projektu w bieżącym katalogu roboczym.
status
repo status [project-list]
Porównuje drzewo robocze z obszarem pomostowym (indeks) i najnowszym zatwierdzeniem w tej gałęzi (HEAD) w każdym określonym projekcie. Wyświetla wiersz podsumowania dla każdego pliku, w którym występuje różnica między tymi trzema stanami.
Aby zobaczyć status tylko bieżącego oddziału, uruchom repo status .
. Informacje o stanie są wyświetlane według projektu. Dla każdego pliku w projekcie używany jest dwuliterowy kod.
W pierwszej kolumnie wielka litera wskazuje, jak obszar przemieszczania różni się od ostatniego zatwierdzonego stanu.
List | Oznaczający | Opis |
---|---|---|
- | Brak zmiany | To samo w HEAD i indeksie |
A | Dodany | Nie w HEAD, w indeksie |
M | Zmodyfikowany | W HEAD, zmodyfikowany w indeksie |
D | Usunięto | W HEAD, nie w indeksie |
R | Zmieniono nazwę | Nie w HEAD, ścieżka zmieniona w indeksie |
C | Skopiowane | Nie w HEAD, skopiowane z innego w indeksie |
T | Zmieniono tryb | Ta sama treść w HEAD i index, zmieniony tryb |
U | Niescalone | Konflikt między HEAD a indeksem; wymagana rozdzielczość |
W drugiej kolumnie mała litera wskazuje, jak katalog roboczy różni się od indeksu.
List | Oznaczający | Opis |
---|---|---|
- | Nowy/nieznany | Nie w indeksie, w drzewie pracy |
m | Zmodyfikowany | W indeksie, w drzewie roboczym, zmodyfikowany |
d | Usunięto | W indeksie, a nie w drzewie pracy |
Obsługa błędów repo
git commit -a # Commit local changes first so they aren't lost. repo start branch-name # Start the branch git reset --hard HEAD@{1} # And reset the branch so that it matches the commit before repo start repo upload .
Błąd repo: error: no branches ready for upload
pojawia się, gdy komenda repo start
nie została uruchomiona na początku sesji. Aby odzyskać, możesz sprawdzić identyfikator zatwierdzenia, uruchomić nową gałąź, a następnie ją scalić.