Repo komut referansı

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/manifest adresinde bulunur.

  • -m: Depodaki bir manifest dosyasını seçin. Manifest adı seçilmezse varsayılan olarak default.xml kullanı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 sync git 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 update
    git rebase origin/branch
    

    Burada 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 önce nproc --all komutunu çalıştırın.
  • -q: Durum mesajlarını bastırarak sessizce çalıştırın.
  • -s: Geçerli manifest dosyasındaki manifest-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 PROJECT kı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_RREV manifest 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/sh aracı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 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 .

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.