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'yi 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. Projeler için project-list ad listesi veya yerel kaynak dizinlerine giden 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 manifest dosyasıhttps://android.googlesource.com/platform/manifestadresinde bulunur.-m: Depodaki bir manifest dosyasını seçin. Manifest adı seçilmezse varsayılan olarakdefault.xmlkullanılır.-b: Bir düzeltme, yani belirli bir manifest-branch belirtin.
Geriye kalan tüm Repo komutları için geçerli çalışma dizini, .repo/ öğesinin üst dizini veya üst dizinin bir alt dizini olmalıdır.
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 depoları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:
Eğer proje daha önce hiç senkronize edilmemişse,
repo syncgit clone'e 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 updategit rebase origin/branchBurada branch, yerel proje dizininde şu anda seçili olan dalıdır. Yerel dal, uzak depodaki bir dalı izlemiyorsa proje için senkronizasyon gerçekleşmez.
repo sync işleminin başarılı bir şekilde tamamlanmasının ardından, belirtilen projelerdeki kod güncel hale gelir 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 projelerin senkronizasyonuna devam edin.-j threadcount: Daha hızlı tamamlamak için senkronizasyonu ileti dizileri arasında bölme. Bilgisayarınızı aşırı yüklememeye özen gösterin; diğer görevler için de biraz işlemci gücü 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öğesi tarafından belirtilen bilinen iyi bir derlemeyle senkronize edin.
Daha fazla seçenek 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 kullanılacak yeni bir kullanıcı adı ve şifre çifti oluşturmak için şifre oluşturucuya gidin.
Gerrit, sunucusu üzerinden nesne verilerini aldığında her bir işlemeyi bir değişikliğe dönüştürür. Böylece inceleme yapanlar belirli bir işlemeyle ilgili yorum yapabilir. Birden fazla kontrol noktası kaydını tek bir kayıtta birleştirmek için, yüklemeyi çalıştırmadan önce git rebase -i ifadesini kullanın.
Eğer repo upload komutunu argüman olmadan çalıştırırsanız, yüklenecek değişiklikler için tüm projeleri arar.
Yüklenen değişiklikleri düzenlemek için, yerel commit'lerinizi güncellemek üzere git rebase -i veya git commit --amend kullanın. Düzenlemeleriniz tamamlandıktan sonra:
- Güncellenen dalın, şu anda seçili olan dal olduğundan emin olun.
- 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 parantezlerin içine girin:
# 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.
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 için --current-branch (veya --cbr) işaretini kullanın.
İlgili değişiklikler için tüm CL'leri aynı konuda tutun. --topic=TOPIC ile yükleme yaparken bir konu adı ekleyin veya konu adını yerel dal adı olarak ayarlamak için -t değerini iletin.
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
İnceleme sisteminden 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 çalıştırıldığında, repo download ile alınan tüm commit'ler silinir. Alternatif olarak, git checkout m/main kullanarak uzak şubeyi kontrol edebilirsiniz.
tüm
repo forall [project-list] -c command
Verilen shell 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 dosyasındaki revizyonun adıdır ve yerel bir izleme dalına çevrilmiştir. Yerel olarak yürütülen bir Git komutuna manifest revizyonunu iletmeniz gerekiyorsa bu değişkeni kullanın.REPO_RREVmanifest dosyasındaki revizyonun adıdır, manifest dosyasında tam olarak yazıldığı gibidir.
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 stderr 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'e yazdığı mesajları göster.
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 argümanı, projelere yapmaya çalıştığınız değişikliğin kısa bir açıklamasını sağlar. Eğer bilmiyorsanız, default adını kullanmayı düşünün.
project-list bağımsız değişkeni, bu konu dalına hangi projelerin katıldığını belirtir.
durum
repo status [project-list]
Belirtilen her projede, çalışma ağacını hazırlık alanı (index) ve bu daldaki en son commit (HEAD) ile 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.
Birinci sütunda, büyük harf, hazırlık alanının son onaylanmış durumdan nasıl farklı olduğunu gösterir.
| Mektup | Anlamı | Açıklama |
|---|---|---|
| - | Değişiklik yok | HEAD ve index'te de aynı durum geçerli. |
| A | Eklendi | HEAD'de değil, dizinde |
| A | Değiştirildi | ANA'da, dizinde değiştirildi |
| D | Silindi | HEAD'de var, dizinde yok |
| R | Yeniden adlandırıldı | HEAD dizininde değil, dizin yolunda değişiklik yapıldı. |
| C | Kopyalandı | HEAD dizininde değil, dizindeki başka bir yerden 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, küçük harf çalışma dizininin dizinden nasıl farklı olduğunu gösterir.
| Mektup | Anlamı | Açıklama |
|---|---|---|
| - | Yeni/Bilinmiyor | Dizin içinde değil, çalışma ağacında. |
| m | Değiştirildi | Dizinde, çalışma ağacında, değiştirildi |
| g | Silindi | Dizin dosyasında, iş ağacında değil. |
Depo hatalarını ele alın
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 .
repo: error: no branches ready for upload hatası, repo start komutu oturumun başında çalıştırılmadığında gösterilir. Kurtarmak için, commit kimliğini kontrol edin, yeni bir dal başlatın ve ardından birleştirin.
Git deposu yapısı
Android'de Git depoları (projeleri) iç içe geçmez. 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.