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:

  • Proje hiç senkronize edilmediyse repo sync, git clone ile 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 kullanıma alınan 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 önce nproc --all komutunu çalıştırın.
  • -q: Durum mesajlarını bastırarak sessizce çalıştırın.
  • -s: Geçerli manifestteki manifest-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 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. Yükleme işlemini çalıştırmadan önce git rebase -i kullanarak birkaç kontrol noktası commit'ini tek bir commit'te birleştirebilirsiniz.

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 git rebase -i veya git commit --amend kullanarak yerel commit'lerinizi güncelleyin. 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 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 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ığı şekildedir.

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'ye yazdığı mesajları gösterir.

prune

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 var, dizinde yok
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, küçük harf, çalışma dizininin dizinden nasıl farklı olduğunu gösterir.

Mektup Anlamı Açıklama
- Yeni/Bilinmiyor 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} # 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 onaylama kimliğini kontrol edin, yeni bir dal başlatın ve ardından bu dalı birleştirin.

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.