Repo, birden fazla depoda çalışmayı kolaylaştırarak Git'i tamamlar. Repo ile Git arasındaki ilişki hakkında açıklama için Kaynak kontrolü araçları başlıklı makaleyi inceleyin. Repo hakkında daha fazla bilgi için Repo README dosyasını inceleyin.
Depo kullanımı aşağıdaki biçimde olur:
repo command options
İsteğe bağlı öğeler köşeli parantez içinde [] gösterilir. Örneğin, birçok komut project-list öğesini bağımsız değişken olarak alır. project-list Projeler için ad listesi veya yerel kaynak dizinlerinin yol listesi olarak belirtebilirsiniz:
repo sync [project0 project1 ... projectn]repo sync [/path/to/project0 ... /path/to/projectn]
yardım
repo help
repo komutuyla ilgili yardım sağlar. Bir komutu seçenek olarak belirterek belirli bir Repo komutu hakkında ayrıntılı bilgi edinebilirsiniz:
repo help command
Örneğin, aşağıdaki komut, init komutu için bir açıklama ve seçenek listesi oluşturur:
repo help init
Bir komut için yalnızca kullanılabilir seçeneklerin listesini görmek istiyorsanız şunu çalıştırın:
repo command --help
Örneğin:
repo init --help
init
repo init -u url [options]
Repo'yu geçerli dizine yükler. Bu komut, Repo kaynak kodu ve standart Android manifest dosyaları için Git depolarının bulunduğu bir .repo/
dizini oluşturur.
Seçenekler:
-u: Manifest deposunun alınacağı bir URL belirtin. Ortak manifesthttps://android.googlesource.com/platform/manifestadresinde bulunur.-m: Depodaki bir manifest dosyasını seçin. Bildiri adı seçilmezse varsayılan olarakdefault.xmlkullanılır.-b: Bir düzeltme, yani belirli bir manifest-branch belirtin.
senkronizasyon
repo sync [project-list]
Yeni değişiklikleri indirir ve yerel ortamınızdaki çalışma dosyalarını günceller. Bu sayede, tüm Git veri havuzlarında git fetch işlemi gerçekleştirilir. repo sync komutunu bağımsız değişken olmadan çalıştırırsanız tüm projelerdeki dosyalar senkronize edilir.
repo sync komutunu çalıştırdığınızda şunlar olur:
Proje hiç senkronize edilmediyse
repo sync,git cloneile eşdeğerdir. Uzak depodaki tüm dallar yerel proje dizinine kopyalanır.Proje daha önce senkronize edildiyse
repo syncşu anlama gelir:git remote update git rebase origin/branch
Burada branch, yerel proje dizinindeki mevcut kullanıma alınmış daldır. Yerel dal, uzak depodaki bir dalı izlemiyorsa proje için senkronizasyon gerçekleşmez.
repo sync başarıyla çalıştırıldıktan sonra, belirtilen projelerdeki kod güncel olur ve uzak depodaki kodla senkronize edilir.
Temel seçenekler:
-c: Sunucudan yalnızca mevcut manifest dalını getirin.-d: Belirtilen projeleri manifest revizyonuna geri döndürün. Bu seçenek, proje bir konu dalındaysa ancak manifest revizyonuna geçici olarak ihtiyaç duyuluyorsa faydalıdır.-f: Bir proje senkronize edilemese bile diğer projeleri senkronize etmeye devam edin.-j threadcount: Daha hızlı tamamlamak için senkronizasyonu ileti dizileri arasında bölme. Makinenizi aşırı yüklemediğinizden emin olun. Diğer görevler için biraz CPU ayırın. Kullanılabilir CPU sayısını görmek için öncenproc --allkomutunu çalıştırın.-q: Durum mesajlarını bastırarak sessizce çalıştırın.-s: Geçerli manifest dosyasındakimanifest-serveröğesinde belirtildiği gibi bilinen iyi bir derlemeyle senkronize edin.
Diğer seçenekler için repo help sync komutunu çalıştırın.
yükle
repo upload [project-list]
Değişiklikleri inceleme sunucusuna yükler. Belirtilen projeler için Repo, yerel dalları son Repo senkronizasyonu sırasında güncellenen uzak dallarla karşılaştırır. Repo, inceleme için yüklenmemiş dallardan birini veya daha fazlasını seçmenizi ister.
Seçilen dallardaki tüm işlemeler daha sonra bir HTTPS bağlantısı üzerinden Gerrit'e iletilir. Yükleme yetkilendirmesini etkinleştirmek için bir HTTPS şifresi yapılandırmanız gerekir. HTTPS üzerinden kullanmak için yeni bir kullanıcı adı/şifre çifti oluşturmak üzere Şifre oluşturucu'yu ziyaret edin.
Gerrit, sunucusu üzerinden nesne verilerini aldığında her bir commit'i değişikliğe dönüştürür. Böylece inceleme yapanlar belirli bir commit hakkında yorum yapabilir.
Yükleme işlemini çalıştırmadan önce birkaç kontrol noktası commit'ini tek bir commit'te birleştirmek için git rebase -i kullanın.
repo upload komutunu bağımsız değişken olmadan çalıştırırsanız yüklenmesi gereken değişiklikler için tüm projelerde arama yapılır.
Yüklendikten sonra değişiklikleri düzenlemek için yerel işlemelerinizi güncellemek üzere git rebase -i veya git commit --amend gibi bir araç kullanın. Düzenlemeleriniz tamamlandıktan sonra:
- Güncellenen dalın, şu anda kullanıma sunulan dal olduğunu doğrulayın.
- Eşleşme değişikliği düzenleyicisini açmak için
repo upload --replace PROJECTkısayolunu kullanın. Serideki her bir commit için Gerrit değişiklik kimliğini parantez içine girin:
# Replacing from branch foo [ 3021 ] 35f2596c Refactor part of GetUploadableBranches to lookup 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.
Yükleme tamamlandıktan sonra değişikliklere ek bir yama seti uygulanır.
Yalnızca şu anda kullanıma alınmış Git dalını yüklemek istiyorsanız --current-branch (veya kısaca --cbr) işaretini kullanın.
İlgili değişiklikler için tüm CL'leri aynı konuda tutmak faydalıdır. --topic=TOPIC ile yükleme yaparken konu adı ekleyebilirsiniz. Alternatif olarak, konu adını yerel şube adıyla aynı olacak şekilde ayarlamak için -t değerini iletebilirsiniz.
fark
repo diff [project-list]
git diff kullanarak commit ile çalışma ağacı arasındaki bekleyen değişiklikleri gösterir.
indir
repo download target change
İncelenen sistemdeki belirtilen değişikliği indirir ve projenizin yerel çalışma dizininde kullanılabilir hale getirir.
Örneğin, change 23823 dosyasını platform/build dizininize indirmek için:
repo download platform/build 23823
repo sync komutunu çalıştırmak, repo download ile alınan tüm commit'leri kaldırır. Alternatif olarak, git checkout m/main kullanarak uzak şubeyi kontrol edebilirsiniz.
forall
repo forall [project-list] -c command
Belirtilen kabuk komutunu her projede yürütür. Aşağıdaki ek ortam değişkenleri repo forall tarafından sağlanır:
REPO_PROJECT, projenin benzersiz adına ayarlanır.REPO_PATH, istemcinin köküne göre olan yoldur.REPO_REMOTE, bildirideki uzak sistemin adıdır.REPO_LREV, manifest'teki düzeltmenin yerel izleme dalına çevrilmiş adıdır. Manifest revizyonunu yerel olarak yürütülen bir Git komutuna iletmeniz gerekiyorsa bu değişkeni kullanın.REPO_RREV, manifestteki düzeltmenin adıdır ve manifestte yazıldığı şekliyle kullanılır.
Seçenekler:
-c: Yürütülecek komut ve bağımsız değişkenler. Komut,/bin/sharacılığıyla değerlendirilir ve bundan sonraki tüm bağımsız değişkenler, kabuk konumsal parametreleri olarak iletilir.-p: Belirtilen komutun çıkışından önce proje başlıklarını gösterir. Bu, boruları komutun stdin, stdout ve sterr akışlarına bağlayarak ve tüm çıkışı tek bir sayfalayıcı oturumunda görüntülenen kesintisiz bir akışa yönlendirerek sağlanır.-v: Komutun stderr'ye yazdığı mesajları gösterir.
budama
repo prune [project-list]
Zaten birleştirilmiş konuları temizler (siler).
start
repo start branch-name [project-list]
Manifest dosyasında belirtilen düzeltmeden başlayarak geliştirme için yeni bir dal oluşturur.
BRANCH_NAME bağımsız değişkeni, projelerde yapmaya çalıştığınız değişikliğin kısa bir açıklamasını sağlar. Bilmiyorsanız default adını kullanabilirsiniz.
project-list bağımsız değişkeni, bu konu dalına hangi projelerin katıldığını belirtir.
durum
repo status [project-list]
Çalışma ağacını, hazırlama alanıyla (dizin) ve belirtilen her projede bu daldaki en son işlemeyle (HEAD) karşılaştırır. Bu üç durum arasında fark olan her dosya için bir özet satırı gösterir.
Yalnızca mevcut şubenin durumunu görmek için repo status . komutunu çalıştırın. Durum bilgileri projeye göre listelenir. Projedeki her dosya için iki harfli bir kod kullanılır.
İlk sütunda, büyük harf, hazırlama alanının son kaydedilen durumdan nasıl farklı olduğunu gösterir.
| Mektup | Anlamı | Açıklama |
|---|---|---|
| - | Değişiklik yok | HEAD ve dizinde aynı |
| A | Eklendi | HEAD'de değil, dizinde |
| A | Değiştirildi | ANA'da, dizinde değiştirildi |
| D | Silindi | HEAD'de, dizinde değil |
| R | Yeniden adlandırıldı | HEAD öğesinde değil, dizinde yol değiştirildi |
| C | Kopyalandı | HEAD'de değil, dizindeki başka bir öğeden kopyalandı |
| T | Mod değiştirildi | HEAD ve dizinde aynı içerik var, mod değiştirildi |
| U | Birleştirilmemiş | HEAD ve dizin arasında çakışma var; çözülmesi gerekiyor |
İkinci sütunda, çalışma dizininin dizinden nasıl farklı olduğunu gösteren küçük bir harf bulunur.
| Mektup | Anlamı | Açıklama |
|---|---|---|
| - | Yeni/Bilinmeyen | Dizinde değil, çalışma ağacında |
| m | Değiştirildi | Dizinde, çalışma ağacında, değiştirildi |
| g | Silindi | Dizinde, çalışma ağacında değil |
Depo hatalarını giderme
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 .
repo: error: no branches ready for upload komutu oturumun başında çalıştırılmadığında repo start hatası gösterilir. Kurtarmak için commit kimliğini kontrol edebilir, yeni bir dal başlatıp ardından birleştirebilirsiniz.
Git deposu yapısı
Android'de Git depoları (projeler) iç içe yerleştirilmez. Her proje, kaynak ağacındaki belirli bir dizinle ilişkilendirilir ve bu dizinin altındaki tüm alt dizinler ve dosyalar aynı projenin parçasıdır.
Android geliştirme için Repo'nun git submodule özelliğini kullanmaktan kaçının.