Repo melengkapi Git dengan menyederhanakan pekerjaan di beberapa repositori. Untuk penjelasan tentang hubungan antara Repo dan Git, lihat Alat kontrol sumber. Untuk mengetahui detail selengkapnya tentang Repo, lihat README Repo.
Penggunaan repo memiliki bentuk berikut:
repo command options
Elemen opsional ditampilkan dalam tanda kurung []. Misalnya, banyak perintah menggunakan project-list sebagai argumen. Anda dapat menentukan project-list sebagai daftar nama atau daftar jalur ke direktori sumber lokal untuk project:
repo sync [project0 project1 ... projectn]repo sync [/path/to/project0 ... /path/to/projectn]
bantuan
repo help
Memberikan bantuan terkait perintah repo. Anda dapat melihat informasi mendetail tentang
perintah Repo tertentu dengan menentukan perintah sebagai opsi:
repo help command
Misalnya, perintah berikut akan menghasilkan deskripsi dan daftar opsi
untuk perintah init:
repo help init
Atau, untuk melihat hanya daftar opsi yang tersedia untuk suatu perintah, jalankan:
repo command --help
Contoh:
repo init --help
init
repo init -u url [options]
Menginstal Repo di direktori saat ini. Perintah ini akan membuat direktori .repo/
dengan repositori Git untuk kode sumber Repo dan file manifes
Android standar.
Opsi:
-u: Tentukan URL tempat mengambil repositori manifes. Manifes umum dapat ditemukan dihttps://android.googlesource.com/platform/manifest.-m: Pilih file manifes dalam repositori. Jika tidak ada nama manifes yang dipilih, defaultnya adalahdefault.xml.-b: Tentukan revisi, yaitu manifest-branch tertentu.
Untuk semua perintah Repo yang tersisa, direktori kerja saat ini harus berupa
direktori induk .repo/ atau subdirektori dari direktori induk.
sinkronisasi
repo sync [project-list]
Mendownload perubahan baru dan memperbarui file kerja di lingkungan lokal Anda, yang pada dasarnya menyelesaikan git fetch di semua repositori Git. Jika Anda menjalankan repo sync tanpa argumen, perintah ini akan menyinkronkan
file untuk semua project.
Saat Anda menjalankan repo sync, berikut yang terjadi:
Jika project belum pernah disinkronkan, maka
repo syncsetara dengangit clone; semua cabang di repositori jarak jauh disalin ke direktori project lokal.Jika project telah disinkronkan sebelumnya, maka
repo syncsama dengan:git remote updategit rebase origin/branchDengan branch adalah cabang yang saat ini di-checkout di direktori project lokal. Jika cabang lokal tidak melacak cabang di repositori jarak jauh, maka tidak ada sinkronisasi untuk project.
Setelah repo sync berhasil dijalankan, kode di project yang ditentukan akan
diperbarui dan disinkronkan dengan kode di repositori jarak jauh.
Opsi utama:
-c: Hanya mengambil cabang manifes saat ini dari server.-d: Mengalihkan project yang ditentukan kembali ke revisi manifes. Opsi ini berguna jika project berada di cabang topik, tetapi revisi manifes diperlukan untuk sementara.-f: Lanjutkan sinkronisasi project lain meskipun sinkronisasi project gagal.-j threadcount: Membagi sinkronisasi di seluruh thread agar penyelesaian lebih cepat. Pastikan Anda tidak membebani mesin—sisakan beberapa CPU untuk tugas lainnya. Untuk melihat jumlah CPU yang tersedia, jalankannproc --allterlebih dahulu.-q: Berjalan tanpa menampilkan pesan status.-s: Sinkronkan ke build yang diketahui berfungsi dengan baik seperti yang ditentukan oleh elemenmanifest-serverdalam manifes saat ini.
Untuk opsi lainnya, jalankan repo help sync.
upload
repo upload [project-list]
Mengupload perubahan ke server peninjauan. Untuk project yang ditentukan, Repo membandingkan cabang lokal dengan cabang jarak jauh yang diperbarui selama sinkronisasi Repo terakhir. Repo akan meminta Anda memilih satu atau beberapa cabang yang belum diupload untuk ditinjau.
Semua commit di cabang yang dipilih kemudian ditransmisikan ke Gerrit melalui koneksi HTTPS. Anda harus mengonfigurasi sandi HTTPS untuk mengaktifkan otorisasi upload. Untuk membuat pasangan nama pengguna dan sandi baru yang akan digunakan melalui HTTPS, buka Generator sandi.
Saat menerima data objek melalui servernya, Gerrit akan mengubah setiap commit menjadi perubahan sehingga peninjau dapat mengomentari commit tertentu. Untuk menggabungkan
beberapa commit titik pemeriksaan menjadi satu commit, gunakan git rebase -i sebelum
Anda menjalankan upload.
Jika Anda menjalankan repo upload tanpa argumen, perintah ini akan menelusuri semua project untuk menemukan perubahan yang akan diupload.
Untuk mengedit perubahan setelah diupload, gunakan git rebase -i atau
git commit --amend untuk memperbarui commit lokal Anda. Setelah pengeditan Anda selesai:
- Pastikan cabang yang diperbarui adalah cabang yang saat ini di-checkout.
- Gunakan
repo upload --replace PROJECTuntuk membuka editor pencocokan perubahan. Untuk setiap commit dalam seri, masukkan ID perubahan Gerrit di dalam tanda kurung:
# 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.
Setelah upload selesai, perubahan akan memiliki set patch tambahan.
Untuk mengupload hanya cabang Git yang saat ini di-checkout, gunakan flag
--current-branch (atau --cbr).
Untuk perubahan terkait, simpan semua CL dalam topik yang sama. Tambahkan nama topik saat
mengupload dengan --topic=TOPIC atau teruskan -t untuk menetapkan nama topik ke nama
cabang lokal.
diff
repo diff [project-list]
Menampilkan perubahan yang belum diselesaikan antara commit dan pohon kerja menggunakan
git diff.
download
repo download target change
Mendownload perubahan yang ditentukan dari sistem peninjauan dan menyediakannya di direktori kerja lokal project Anda.
Misalnya, untuk mendownload change 23823 ke direktori platform/build Anda:
repo download platform/build 23823
Menjalankan repo sync akan menghapus semua commit yang diambil dengan repo download. Atau
Anda dapat memeriksa cabang jarak jauh menggunakan git checkout m/main.
forall
repo forall [project-list] -c command
Menjalankan perintah shell yang diberikan di setiap project. Variabel lingkungan tambahan berikut disediakan oleh repo forall:
REPO_PROJECTditetapkan ke nama unik project.REPO_PATHadalah jalur relatif terhadap root klien.REPO_REMOTEadalah nama sistem jarak jauh dari manifes.REPO_LREVadalah nama revisi dari manifes, yang diterjemahkan ke cabang pelacakan lokal. Gunakan variabel ini jika Anda perlu meneruskan revisi manifes ke perintah Git yang dijalankan secara lokal.REPO_RREVadalah nama revisi dari manifes, persis seperti yang ditulis dalam manifes.
Opsi:
-c: Perintah dan argumen yang akan dieksekusi. Perintah dievaluasi melalui/bin/shdan argumen apa pun setelahnya diteruskan sebagai parameter posisional shell.-p: Menampilkan header project sebelum output perintah yang ditentukan. Hal ini dicapai dengan mengikat saluran ke aliran stdin, stdout, dan stderr perintah, serta menyalurkan semua output ke dalam aliran berkelanjutan yang ditampilkan dalam satu sesi pager.-v: Menampilkan pesan yang ditulis perintah ke stderr.
prune
repo prune [project-list]
Menghapus (menghapus) topik yang sudah digabungkan.
mulai
repo start branch-name [project-list]
Memulai cabang baru untuk pengembangan, dimulai dari revisi yang ditentukan dalam manifes.
Argumen BRANCH_NAME memberikan deskripsi singkat tentang perubahan yang Anda coba lakukan pada project. Jika Anda tidak tahu, pertimbangkan untuk menggunakan nama
default.
Argumen project-list menentukan project mana yang berpartisipasi dalam cabang topik ini.
status
repo status [project-list]
Membandingkan pohon kerja dengan area penahapan (indeks) dan commit terbaru di cabang ini (HEAD) di setiap project yang ditentukan. Menampilkan garis ringkasan untuk setiap file yang memiliki perbedaan antara ketiga status ini.
Untuk melihat status cabang saat ini saja, jalankan repo status .. Informasi
status dicantumkan berdasarkan project. Untuk setiap file dalam project, kode dua huruf digunakan.
Di kolom pertama, huruf kapital menunjukkan perbedaan area penyiapan dengan status terakhir yang di-commit.
| Huruf | Arti | Deskripsi |
|---|---|---|
| - | Tidak ada perubahan | Sama di HEAD dan indeks |
| A | Ditambahkan | Tidak ada di HEAD, ada di indeks |
| M | Diubah | Di HEAD, diubah dalam indeks |
| D | Dihapus | Ada di HEAD, tidak ada di indeks |
| R | Diganti nama | Tidak ada di HEAD, jalur diubah dalam indeks |
| C | Disalin | Tidak ada di HEAD, disalin dari yang lain dalam indeks |
| T | Mode diubah | Konten yang sama di HEAD dan indeks, mode diubah |
| U | Tidak digabungkan | Konflik antara HEAD dan indeks; resolusi diperlukan |
Di kolom kedua, huruf kecil menunjukkan perbedaan antara direktori kerja dan indeks.
| Huruf | Arti | Deskripsi |
|---|---|---|
| - | Baru/tidak diketahui | Tidak ada dalam indeks, ada dalam hierarki kerja |
| m | Diubah | Dalam indeks, dalam hierarki kerja, diubah |
| d | Dihapus | Dalam indeks, bukan dalam pohon kerja |
Menangani error repo
git commit -a # Commit local changes first so they aren't lostrepo start branch-name # Start the branchgit reset --hard HEAD@{1} # Reset the branch so that it matches the commit before repo startrepo upload .
Error repo: error: no branches ready for upload muncul saat
perintah repo start tidak dijalankan di awal sesi. Untuk memulihkan, periksa ID commit, mulai cabang baru, lalu gabungkan.
Struktur repositori Git
Untuk Android, repositori Git (project) tidak bertingkat. Setiap project dikaitkan dengan direktori tertentu di pohon sumber, dan semua subdirektori serta file di bawah direktori tersebut adalah bagian dari project yang sama.
Hindari penggunaan fitur git submodule Repo untuk pengembangan Android.