2011-08-18 12 views
17

Git'i Gerrit Code Review ile kuruyorum ve Git'e yeni olabilecek kullanıcılar için gerekli Git komutlarını nispeten kolay bir şekilde yapmak için bir yol arıyorum.Gerrit ile birlikte kullanıldığında Git için spesifik yukarı itme refspec'i nasıl yapılandırılır?

git checkout baseline 
git pull 
git checkout -b work1234 
git push -u origin work1234 

Bu, bazı baseline den kollara yeni bir çalışma paketi work1234 başlar ve son hamle şube oluşturur:

olan esasen yeni bir özellik dalı başlatmak için ben şu anda sahip komutları (Gerrit origin olduğunu varsayarak) Gerrit ve yukarı akışını ayarlar. Özel bir refspec anında iletilmesi incelenmek üzere

[branch "work1234"] 
     remote = origin 
     merge = refs/heads/work1234 

Şimdi, Gerrit istediği yeni kaydedilmesini, örneğin refs/for/work1234: Yani .git/config şöyle görünür. Birlikte elle yapabilirsiniz:

git push origin work1234:refs/for/work1234 

Ne yapmak istiyorum düz git push Gerrit gerektirir uzaktan kumandadaki refspec mevcut şube itmek böylece .git/config kurmak için bir yol bulmak. Aşağıdaki git config alanlar baktım: Burada sanki upstream

  • remote.<name>.push istiyoruz - - -
  • push.default
  • refspec itmek ayarlanması için herhangi bir özel seçenek var gibi görünmüyor

    • branch.<name>.* Ben refs/heads/*:refs/for/* çalıştı sadece akım Branch isterken burada ama git push hep bu durumda tüm yerel şubeleri aktarmak istiyor

    Git'i tek başına yapamazsam, refspec'leri tam olarak belirten küçük bir sarmalayıcı komut dosyası yazacağım. Bununla birlikte, Git doğal olarak doğru yere gidebilirse daha iyi olurdu. Ben /usr/local/libexec/git-core/git-submit Bu komut dosyasını ve incelenmek üzere Gerrit için yeni kodu göndermek için bir komut var

    #!/bin/sh -e 
    
    if [ -z "$1" ]; then 
        REMOTE=origin 
    else 
        REMOTE=$1 
    fi 
    
    BRANCH=`git symbolic-ref HEAD` 
    case $BRANCH in 
        refs/heads/*) 
         BRANCH=`basename $BRANCH` 
         ;; 
        *) 
         echo "I can't figure out which branch you are on." 
         exit 1 
         ;; 
    esac 
    
    git push $REMOTE HEAD:refs/for/$BRANCH 
    

    :

    $ git submit 
    

    Gerrit ise

    cevap

    9

    Ben yeni git-submit senaryoyu yazma sona erdi origin uzaktan değil, daha sonra uygun olarak git submit <remote> kullanın.

    +1

    , 'hakemler/için/master' demek daha basit bir git-tek çözüm olur mu? ([İşte] (http://stackoverflow.com/questions/29664305/equivalent-of-branch-name-merge-for-git-push) benim SO sorunun basit bir sürümü olduğunu soran soru.) Bu kırardı – Pradhan

    0
    git config push.default upstream 
    git config branch.work1234.merge refs/for/work1234 
    git config branch.work1234.remote origin 
    

    veya .git/config: tüm branşlarda çalışması için herhangi bir yere orada bir joker koymak için bir yol varsa

    [push] 
         default = upstream 
    [branch "work1234"] 
         merge = refs/for/work1234 
         remote = origin 
    

    emin değilim.

    +0

    'git-pull', başarısız olan refs/for/* 'den almaya çalıştığı gibi. Varsayılan "kaynak" olduğu için uzaktan kumandaya gerek yoktur. – Wernight

    4

    İki seçenek buldum:

    1) GGH, yaptığım bir proje göz atın: https://github.com/hobbs/ggh

    2) Eğer uzaktan varsayılan itme refspec yapılandırabilirsiniz.İşte

    [remote "origin"] 
        fetch = +refs/heads/*:refs/remotes/origin/* 
        url = ssh://gerrit/repo 
        push = HEAD:refs/for/master 
    
    2

    bir: Ben sadece hala her zaman izlediğiniz uzak iter, böylece uzaktan refspec joker nasıl anlamaya çalışırken, bir kodlanmış uzaktan şube ile bunun nasıl çözdüm Greg Hewgill'in cevabının iyileştirilmesi.

    (hatta Windows üzerinde, gerekirse bir tane oluşturun) profil bin klasörüne gibi, yolda bir yerlerde bir komut dosyası oluşturun:

    #!/bin/sh -e 
    
    if [ -z "$1" ]; then 
        REMOTE=origin 
    else 
        REMOTE=$1 
    fi 
    
    BRANCH=`git symbolic-ref HEAD` 
    case $BRANCH in 
        refs/heads/*) 
         BRANCH=`basename $BRANCH` 
         ;; 
        *) 
         echo "I can't figure out which branch you are on." 
         exit 1 
         ;; 
    esac 
    
    REMOTE_BRANCH=`git config --get "branch.$BRANCH.merge"` 
    if [ -z $REMOTE_BRANCH ] 
    then 
        echo "There is no tracking information for the current branch." 
        echo "If you wish to set tracking information for this branch you can do so with:" 
        echo "" 
        echo " git branch --set-upstream $BRANCH <remote>/<branch>" 
        echo "" 
        exit 1 
    fi 
    
    git push $REMOTE HEAD:refs/for/$REMOTE_BRANCH 
    

    sizi farz: Aşağıdaki içerikle

    $ mkdir ~/bin 
    $ vi ~/bin/git-submit 
    

    sadece çağırabilir

    $ git checkout -b MyBranch origin/master 
    

    : gibi bir uzak izleme şube oluşturmakBu durumda refs/for/master10'a basmak için ... ... . Hep sabit bir hedefe itmek istiyorum

    İlgili konular