Git taahhüt sonra otomatik olarak itmek nasıl?

Git'i, yerel repoya yapılan her işlemden sonra otomatik olarak uzak bir repo'ya (otomatik olarak parolamı sağlayarak dahil) itmeyi nasıl ayarlayabilirim?

60
Hangi protokolü zorluyorsun? Parola soruyorsa, bunun SSH veya HTTP olduğunu varsayalım.
katma yazar Mark Longair, kaynak
Ayrıca, en azından hangi işletim sistemini kullandığınızdan bahsetmek için git soruları ile yardımcı olur.
katma yazar Mark Longair, kaynak
Böyle bir kurgunun bilgeliğini sorgularım. Bu, değişikliklerinizi farklı bir taahhüt kümesine yeniden düzenleme yeteneğini ortadan kaldırır (özellikle rebasing). Benim için yararlı olmanın sonu gibi bir set için çok fazla hata yaptım.
katma yazar jpmc26, kaynak

5 cevap

Öncelikle, şifrenizi vermeden manuel olarak basabildiğinizden emin olun. HTTP veya HTTPS'yi zorlarsanız, bu bir giriş detayları ile bir .netrc dosyası yaratma veya kullanıcı adınızı ve parolanızı, uzaktan kumandanın URL'sine ekleyerek . SSH kullanıyorsanız, özel anahtarın parolasının olmadığı bir anahtar parola oluşturabilir veya Özel anahtarınızı önbelleğe almak için ssh-agent kullanın .

Ardından, aşağıdakileri içeren .git/hooks/post-commit dosyasında bir dosya oluşturmalısınız:

#!/bin/sh
git push origin master

... origin 'dan başka bir kanala geçmek istiyorsanız veya master ' dan başka bir şubeye basmak istiyorsanız bu satırı özelleştirin. Bu dosyayı yürütülebilir yaptığınızdan emin olun.

110
katma
Ssh-agent parolamı hatırlamıyordu, bu yüzden boş olmalıydı. Umarım karım hesabımı hacklemez :)
katma yazar ulu, kaynak
git itme
katma yazar Yada, kaynak
Özelleştirme hakkında konuşmak gerekirse, tüm şubeleri bu şekilde değil, bazılarını zorlamak istersek ne olur? Örneğin, özellik/xy/ önekiyle .git/config içinde belirtilen ilgili uzak şubeye sahip olan şubeleri otomatik olarak itmek istiyorum.
katma yazar A-B-B, kaynak
chmod + x .git/hooks/post-commit
katma yazar UnchartedWorks, kaynak

Ana branştan daha fazla kullanmaya başlarsanız, mevcut şubeye otomatik olarak basmak isteyebilirsiniz. Kancam ( .git/hooks/post-commit ) şunun gibi görünüyor:

#!/usr/bin/env bash

branch_name=`git symbolic-ref --short HEAD` 
retcode=$?
non_push_suffix="_local"


# Only push if branch_name was found (my be empty if in detached head state)
if [ $retcode = 0 ] ; then
    #Only push if branch_name does not end with the non-push suffix
    if [[ $branch_name != *$non_push_suffix ]] ; then
        echo
        echo "**** Pushing current branch $branch_name to origin [i4h_mobiles post-commit hook]"
        echo
        git push origin $branch_name;
    fi
fi

Şube ismini git sembolik-ref ile belirleyebiliyorsa, mevcut şubeyi iter.

" Şu andaki şube adı nasıl alınır? " anlaşmalar Bu ve mevcut şube adını almak için diğer yollar ile.

Her dal için otomatik bir itme, bazı sosis yapımından gerçekleşmesi için (ittirdikten sonra kolayca yeniden üretemezsiniz). Böylece kanca, tanımlanmış bir sonekle sona eren dalları ("_local" örneğinde) itmeyecektir.

23
katma
İlk satır için, çalışmasını sağlamak için #!/Bin/sh kullanmalıydım. Aksi halde şöyle devam etti: error: .git/hooks/post-commit komutunu çalıştıramıyor: Böyle bir dosya veya dizin yok . Teşekkürler, çözümünüzü en çok beğendim.
katma yazar oyalhi, kaynak
Yorum için teşekkürler, @oyalhi, cevaptaki shebang çizgisini güncelledim. Şimdi daha iyi liman olmalı!
katma yazar i4h, kaynak

Otomatik olarak bir parola oluşturmak istiyorsanız, değiştirmeye ihtiyaç duyulmasına rağmen .git/hooks dizinindeki "post push" adlı bir dosya oluşturun.

8
katma
Senin için yaptım.
katma yazar ulu, kaynak
Mark Longair'in yanıtını kabul ediyorum. Yapabilirdim.
katma yazar Colin R, kaynak
Bir dakika ne? Colin R şimdi en üst% 2'de :)
katma yazar Post Self, kaynak

Bu git-autopush komut dosyası bir " Otomatik itmeyi nasıl yapılandırabilirim? " bölümünde önerilenlere benzer bir işlem sonrası kanca.
Ancak, şifre için bir ssh-agent <�çalıştırmanız gerekir./a>.

3
katma

İşte Linux ve Windows (git bash) kullanan kişiler için ssh üzerinde parola vermeden/çekerek basit bir talimat

Müşterinizde:

  1. Check out if you have ssh keys generated:

    $ ls ~/.ssh/id_rsa.pub; ls ~/.ssh/id_dsa.pub
    /c/Users/Cermo/.ssh/id_rsa.pub  <-- I have RSA key
    ls: cannot access '/c/Users/Cermo/.ssh/id_dsa.pub': No such file or directory
    
  2. If you don't have any key (two "ls: cannot access ..." lines) generate a new one. If you have any of the keys skip this step.

    $ ssh-keygen.exe
    Generating public/private rsa key pair.
    Enter file in which to save the key (/c/Users/Cermo/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase): <-- press Enter
    Enter same passphrase again: <-- press Enter
    
  3. Copy your key to remote server from which you want to pull or push using git:

    $ ssh-copy-id [email protected]_name
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to 
    filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you 
    are prompted now it is to install the new keys
    [email protected]_name's password:
    
    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh '[email protected]_name'"
    and check to make sure that only the key(s) you wanted were added.
    

Not: Bu işlem sırasında şifre sağlamalısınız. Bundan sonra çekme/itme işlemleri parola istemez.

Not2: Bu yordamı kullanmadan önce en az bir kez user_name kullanarak sunucuya giriş yapmanız gerekir (ilk oturum sırasında ssh anahtarlarının kopyalandığı ana dizin oluşturulur)

0
katma