Dokumentacja polecenia Repo

Repo uzupełnia Git, upraszczając pracę w wielu repozytoriach. Wyjaśnienie relacji między Repo a Git znajdziesz w artykule Narzędzia do kontroli kodu źródłowego. Więcej informacji o Repo znajdziesz w pliku README Repo.

Użycie Repo ma następującą postać:

repo command options

Elementy opcjonalne są wyświetlane w nawiasach kwadratowych []. Na przykład wiele poleceń przyjmuje jako argument project-list. Listę projektów 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]

pomoc

repo help

Wyświetla pomoc dotyczącą polecenia repo. Szczegółowe informacje o konkretnym poleceniu Repo możesz wyświetlić, podając polecenie jako opcję:

repo help command

Na przykład poniższe polecenie wyświetla opis i listę opcji polecenia init:

repo help init

Aby wyświetlić tylko listę dostępnych opcji polecenia, uruchom:

repo command --help

Przykład:

repo init --help

init

repo init -u url [options]

Instaluje Repo w bieżącym katalogu. To polecenie tworzy katalog .repo/ z repozytoriami Git dla kodu źródłowego Repo i standardowych plików manifestu Androida.

Opcje:

  • -u: podaj adres URL, z którego ma zostać pobrane repozytorium manifestu. Wspólny manifest znajduje się pod adresem https://android.googlesource.com/platform/manifest.

  • -m: wybierz plik manifestu w repozytorium. Jeśli nie wybierzesz nazwy manifestu, domyślnie zostanie użyta nazwa default.xml.

  • -b: określ wersję, czyli konkretną manifest-branch.

W przypadku wszystkich pozostałych poleceń Repo bieżący katalog roboczy musi być katalogiem nadrzędnym katalogu .repo/ lub jego podkatalogiem.

synchronizacja

repo sync [project-list]

Pobiera nowe zmiany i aktualizuje pliki robocze w środowisku lokalnym, co w zasadzie odpowiada wykonaniu polecenia git fetch we wszystkich repozytoriach Git. Jeśli uruchomisz polecenie repo sync bez argumentów, zsynchronizuje ono pliki wszystkich projektów.

Gdy uruchomisz polecenie repo sync, dzieje się to:

  • Jeśli projekt nigdy nie był synchronizowany, polecenie repo sync jest równoważne poleceniu git clone. Wszystkie gałęzie w repozytorium zdalnym są kopiowane do lokalnego katalogu projektu.

  • Jeśli projekt był już synchronizowany, polecenie repo sync jest równoważne poleceniu:

    git remote update
    git rebase origin/branch
    

    gdzie branch to bieżąca gałąź w lokalnym katalogu projektu. Jeśli gałąź lokalna nie śledzi gałęzi w zdalnym repozytorium, synchronizacja projektu nie nastąpi.

Po pomyślnym uruchomieniu polecenia repo sync kod w określonych projektach jest aktualny i zsynchronizowany z kodem w zdalnym repozytorium.

Najważniejsze opcje:

  • -c: pobierz z serwera tylko bieżącą gałąź manifestu.
  • -d: przełącz określone projekty z powrotem na wersję manifestu. Ta opcja jest przydatna, jeśli projekt znajduje się w gałęzi tematu, ale tymczasowo potrzebna jest wersja manifestu.
  • -f: kontynuuj synchronizację innych projektów, nawet jeśli synchronizacja projektu się nie powiedzie.
  • -j threadcount: podziel synchronizację na wątki, aby przyspieszyć jej zakończenie. Upewnij się, że nie przeciążasz komputera – zostaw trochę procesora zarezerwowanego na inne zadania. Aby sprawdzić liczbę dostępnych procesorów, najpierw uruchom polecenie nproc --all.
  • -q: uruchom w trybie cichym, pomijając komunikaty o stanie.
  • -s: zsynchronizuj z znaną dobrą kompilacją określoną przez manifest-server element w bieżącym manifeście.

Więcej opcji znajdziesz, uruchamiając polecenie repo help sync.

przesyłanie|importowanie

repo upload [project-list]

Przesyła zmiany na serwer recenzji. W przypadku określonych projektów Repo porównuje gałęzie lokalne z gałęziami zdalnymi zaktualizowanymi podczas ostatniej synchronizacji Repo. Repo wyświetla prośbę o wybranie co najmniej 1 gałęzi, która nie została przesłana do sprawdzenia.

Wszystkie zatwierdzenia w wybranych gałęziach są następnie przesyłane do Gerrit przez połączenie HTTPS. Aby włączyć autoryzację przesyłania, musisz skonfigurować hasło HTTPS. Aby wygenerować nową parę nazwy użytkownika i hasła do użycia przez HTTPS, otwórz generator haseł.

Gdy Gerrit odbierze dane obiektu przez serwer, przekształci każde zatwierdzenie w zmianę, aby recenzenci mogli komentować konkretne zatwierdzenie. Aby połączyć kilka zatwierdzeń punktu kontrolnego w jedno zatwierdzenie, przed uruchomieniem przesyłania użyj polecenia git rebase -i.

Jeśli uruchomisz polecenie repo upload bez argumentów, przeszuka ono wszystkie projekty w poszukiwaniu zmian do przesłania.

Aby edytować zmiany po ich przesłaniu, użyj polecenia git rebase -i lub git commit --amend, aby zaktualizować lokalne zatwierdzenia. Po zakończeniu edycji:

  • Sprawdź, czy zaktualizowana gałąź jest bieżącą gałęzią.
  • Aby otworzyć edytor dopasowywania zmian, użyj polecenia repo upload --replace PROJECT.
  • W przypadku każdego zatwierdzenia w serii wpisz identyfikator zmiany Gerrit w nawiasach kwadratowych:

    # Replacing from branch foo
    [ 3021 ] 35f2596c Refactor part of GetUploadableBranches to look up one specific...
    [ 2829 ] ec18b4ba Update proto client to support patch set replacements
    # 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.

Aby przesłać tylko bieżącą gałąź Git, użyj flagi --current-branch (lub --cbr).

W przypadku powiązanych zmian wszystkie CL powinny znajdować się w tym samym temacie. Podczas przesyłania dodaj nazwę tematu za pomocą polecenia --topic=TOPIC lub przekaż -t, aby ustawić nazwę tematu na nazwę gałęzi lokalnej.

różnice

repo diff [project-list]

Wyświetla oczekujące zmiany między zatwierdzeniem a drzewem roboczym za pomocą polecenia git diff.

pobierz

repo download target change

Pobiera określoną zmianę z systemu recenzji i udostępnia ją w lokalnym katalogu roboczym projektu.

Aby na przykład pobrać zmianę 23823 do katalogu platform/build:

repo download platform/build 23823

Uruchomienie polecenia repo sync usuwa wszystkie zatwierdzenia pobrane za pomocą polecenia repo download. Możesz też sprawdzić gałąź zdalną za pomocą polecenia git checkout m/main.

forall

repo forall [project-list] -c command

Wykonuje podane polecenie powłoki w każdym projekcie. Polecenie repo forall udostępnia te dodatkowe zmienne środowiskowe:

  • 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 tej zmiennej, jeśli musisz przekazać wersję manifestu do lokalnie wykonywanego polecenia Git.
  • REPO_RREV to nazwa wersji z manifestu, dokładnie taka, jak jest zapisana w manifeście.

Opcje:

  • -c: polecenie i argumenty do wykonania. Polecenie jest oceniane za pomocą /bin/sh, a wszystkie argumenty po nim są przekazywane jako parametry pozycyjne powłoki.
  • -p: przed wyjściem określonego polecenia wyświetl nagłówki projektu. Jest to realizowane przez powiązanie potoków ze strumieniami stdin, stdout i stderr polecenia oraz przekierowanie wszystkich danych wyjściowych do ciągłego strumienia, który jest wyświetlany w jednej sesji pagera.
  • -v: wyświetl komunikaty, które polecenie zapisuje w stderr.

prune

repo prune [project-list]

Usuwa tematy, które zostały już scalone.

rozpocznij

repo start branch-name [project-list]

Rozpoczyna nową gałąź do programowania, 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, użyj nazwy default.

Argument project-list określa, które projekty biorą udział w tej gałęzi tematu.

status

repo status [project-list]

Porównuje drzewo robocze z obszarem przejściowym (indeksem) 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 3 stanami.

Aby wyświetlić stan tylko bieżącej gałęzi, uruchom polecenie repo status .. Informacje o stanie są wyświetlane według projektu. W przypadku każdego pliku w projekcie używany jest 2-literowy kod.

W pierwszej kolumnie wielka litera wskazuje, czym obszar przejściowy różni się od ostatniego zatwierdzonego stanu.

Litera Znaczenie Opis
- Bez zmian Takie same w HEAD i indeksie
A Dodano Brak w HEAD, w indeksie
M Zmodyfikowano W HEAD, zmodyfikowane w indeksie
D Usunięto W HEAD, brak w indeksie
R Zmieniono nazwę Brak w HEAD, ścieżka zmieniona w indeksie
C Skopiowano Brak w HEAD, skopiowane z innego w indeksie
T Zmieniono tryb Ta sama treść w HEAD i indeksie, zmieniony tryb
U Niescalone Konflikt między HEAD a indeksem; wymagane rozwiązanie

W drugiej kolumnie mała litera wskazuje, czym katalog roboczy różni się od indeksu.

Litera Znaczenie Opis
- Nowy/nieznany Brak w indeksie, w drzewie roboczym
m Zmodyfikowano W indeksie, w drzewie roboczym, zmodyfikowane
d Usunięto W indeksie, brak w drzewie roboczym

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} # Reset the branch so that it matches the commit before repo start
repo upload .

Błąd repo: error: no branches ready for upload występuje, gdy polecenie repo start nie zostało uruchomione na początku sesji. Aby rozwiązać ten problem, sprawdź identyfikator zatwierdzenia, rozpocznij nową gałąź, a następnie ją scal.

Struktura repozytorium Git

W Androidzie repozytoria Git (projekty) nie są zagnieżdżone. Każdy projekt jest powiązany z konkretnym katalogiem w drzewie źródłowym, a wszystkie podkatalogi i pliki w tym katalogu są częścią tego samego projektu. Podczas programowania na Androida unikaj używania funkcji git submodule w Repo.