Şirket sunucusunda yaşayan şu andaki çengelimde şu anki kanca var: git push origin master
Bu kancalar Assembla'ya iter. İhtiyacım olan şey, birisi sunucumuzdaki bu şubeye değişiklikleri iterken ve diğer şubelere yapılan itirazları görmezden geldiğinde yalnızca bir dalı (ana, ideal olarak) zorlamaktır. Şubeyi çıplak bir repodan seçmek mümkün mü ve sadece bu dalı Assembla'ya itmek mümkün mü?Belirli bir şube ile başa çıkmak için git sonrası alma kancası yazılıyor
cevap
Sonradan alma kancasının stdin almasıyla ilgili son parametre, ref değerinin değiştirilmesidir, bu yüzden bu değerin "refs/heads/master" olup olmadığını kontrol etmek için kullanabiliriz. Bir kullanmak ne benzer yakut Biraz kanca sonrası alırsınız: o itildi her ref bir çizgi aldığını
STDIN.each do |line|
(old_rev, new_rev, ref_name) = line.split
if ref_name =~ /master/
# do your push
end
end
Not, bu nedenle sadece ana daha itilirse, hala çalışacaktır.
Ruby örneği için teşekkürler. Buna benzer bir şey yapacağım. – Leif
ancak this yaptı:
#!/bin/bash
echo "determining branch"
if ! [ -t 0 ]; then
read -a ref
fi
IFS='/' read -ra REF <<< "${ref[2]}"
branch="${REF[2]}"
if [ "master" == "$branch" ]; then
echo 'master was pushed'
fi
if [ "staging" == "$branch" ]; then
echo 'staging was pushed'
fi
echo "done"
Basit bir isimle (master, test, vb.) Şubeler için çalıştım. Ama ben böyle bir şube adı var: prod12/proj250/ropesPatch12. iyi işe yaramıyor. Bu özel karakterlerle çalışabilecek bir çözümünüz var mı? –
bir kanca biçiminde <oldrev> <newrev> <refname>
yılında, stdin'den Bağımsız değişkenlerini alır sonrası alırlar. Bu argümanlar bir komut satırı argümanından değil, stdin'den geldiğinden, $1 $2 $3
yerine read
kullanmanız gerekir.
sonrası almak (birisi git push --all
yaparsa örneğin) bir kerede birden fazla şubesi alabilir kanca, bu yüzden de bir while
döngü içinde read
sarmak gerekiyor. Yukarıda benim için çalıştı çözümlerin
#!/bin/bash
while read oldrev newrev refname
do
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ "master" == "$branch" ]; then
# Do something
fi
done
Bu, doğru cevap olarak işaretlenmelidir. – jackyalcine
"==" benim için çalışmıyor. Tek ile "=" benim için iyi çalışıyor. – Ray
Bu garip. Çift eşittir ve tek eşittir burada hem iyi çalışmalıdır (bkz. Http://stackoverflow.com/questions/2600281/what-is-the-difference-between-operator-and-in-bash). Bash'tan başka bir şey kullanıyor musun? Ne olursa olsun, bunun için bir düzeltme bulduğunuz için sevindim. – pauljz
Ne:
Bir çalışma pasajı şuna benzer. Çok fazla hata ayıklama işleminden sonra, 'read' komutunu kullanmanın işe yaramayacağı ortaya çıkıyor - bunun yerine, komut satırı argümanlarını ayrıştırma işlemi normal şekilde çalışıyor.
Şu anda CentOS 6.3'te şimdi başarıyla test ettiğim tam güncelleştirme sonrası kanca.
#!/bin/bash
echo "determining branch"
branch=`echo $1 | cut -d/ -f3`
if [ "master" == "$branch" ]; then
echo "master branch selected"
fi
if [ "staging" == "$branch" ]; then
echo "staging branch selected"
fi
exec git update-server-info
GÜNCELLEME: Bir daha da garip bir not, kanca nedenle (vay, demek hiç düşünmezdim) 'okundu' ile okumak, Stdin aracılığıyla kendi girdi alır öncesi alırlar. Güncelleme sonrası kanca hala benim için 1 $ ile çalışır.
Bu işlevi yapmak için kendim için bir PHP betiği yazmıştım.
https://github.com/fotuzlab/githubdump-php
Sunucu sunucu üzerinde bu dosya, tercihen repo kökü ve github webhooks içinde URL tanımlamalıdır.
ör.
function githubdump($payload_object) {
// Write your code here.
exec('git push origin master');
}
Basit yaklaşım, git hook
yazma içinde
read refname
echo $refname
Basit - daha bu büyük linke hooking system
pre-push
gibi belirli git kanca için çalışıyor @pauljz gelen cevap üzerine bilgi, ancak pre-commit
yapar oldrev newrev refname
Bu değişkenlere erişemediğim için Ön-taahhüt ya da gerçekten ve kanca için çalışır. Bu, master
dalında DEĞİLSE husky
komut dosyasını çalıştıracak olan pre-commit
kancasını.
#!/bin/bash
# git 'commit' does not have access to these variables: oldrev newrev refname
# So get the branch name off the head
branchPath=$(git symbolic-ref -q HEAD) # Something like refs/heads/myBranchName
branch=${branchPath##*/} # Get text behind the last/of the branch path
echo "Head: $branchPath";
echo "Current Branch: $branch";
if [ "master" != "$branch" ]; then
# If we're NOT on the Master branch, then Do something
# Original Pre-push script from husky 0.14.3
command_exists() {
command -v "$1" >/dev/null 2>&1
}
has_hook_script() {
[ -f package.json ] && cat package.json | grep -q "\"$1\"[[:space:]]*:"
}
cd "frontend" # change to your project directory, if .git is a level higher
# Check if precommit script is defined, skip if not
has_hook_script precommit || exit 0
# Node standard installation
export PATH="$PATH:/c/Program Files/nodejs"
# Check that npm exists
command_exists npm || {
echo >&2 "husky > can't find npm in PATH, skipping precommit script in package.json"
exit 0
}
# Export Git hook params
export GIT_PARAMS="$*"
# Run npm script
echo "husky > npm run -s precommit (node `node -v`)"
echo
npm run -s precommit || {
echo
echo "husky > pre-commit hook failed (add --no-verify to bypass)"
exit 1
}
fi
Umarım birilerine yardımcı olur. if
ve fi
ifadeleri arasında ihtiyaçlarınızı kolayca değiştirebilirsiniz.
- 1. git sonrası itme kancası?
- 2. Bir captcha ile başa çıkmak için Scrapy'yi nasıl kurarım
- 3. Uygulama Hangs/Deadlocks ile başa çıkmak C#
- 4. makrolar düzgün sembol çözünürlüğü ile başa çıkmak
- 5. Rails konsolunda Time.now ile başa çıkmak
- 6. InputStream - Ağ değişiklikleri ile başa çıkmak
- 7. EWS azaltma politikaları ile başa çıkmak
- 8. Git: biz çok büyük bir git deposunda (90Go) başa çıkmak zorunda İş yerinde uzak
- 9. Git geri alma yerel şube sil
- 10. git ön alım kancası heroku ile reddedildi
- 11. Git kancası çalıştırılamıyor
- 12. AJAX talebi yoluyla Zend Kimlik Doğrulama hatası ile başa çıkmak
- 13. python: bir değişken üzerinde kilit ile başa çıkmak için zarif bir yol?
- 14. Git: Birleştirme "geri alma"
- 15. Kod çoğaltmasını önlemek için başkaları ile başa çıkmak için bir yöntem kullanmanın bir yolu var mı?
- 16. Süresi dolmuş auth jetonu ile başa çıkmak android hesap yöneticisi
- 17. ASP.NET Core 1.0 üzerinde büyük dosya yüklemeleri ile başa çıkmak
- 18. bizon: Çatışma ile başa çıkmak, hangi yolu kullanmalıyım?
- 19. İfade Karışımı'nın C++/CLI projeleri için destek eksikliğiyle başa çıkmak
- 20. raylar üzerinde yakut NaN ile nasıl başa çıkmak
- 21. Belirli bir uzak alanın şube adlarının listesi
- 22. 'Git' için JIRA kod doğrulama işlemi kancası
- 23. RxJS birçok giriş akışı. Onlarla başa çıkmak için uygun yol?
- 24. Git: Bir şubeyi silerken posta alma çengelini arama yok
- 25. Şube adlarını git'e git
- 26. git şube izinleri
- 27. Bir BitBucket git taahhüt kancası oluşturulsun mu?
- 28. ileti alma kancası - GIT_WORK_DIR: böyle bir dosya veya dizin yok
- 29. Git - Her Şube için farklı Uzaklık
- 30. App: arkadaş bulmak için adres defteri kullanın ::: Ülke kodu ile başa çıkmak için
Ne demek istiyorsun? Git itme kökeni ana, sadece 'master' dalını Assembla olarak tanımladığımı farzedilen 'origin' uzaktan kumandasına itecektir. Sadece birisinin '' özellik1''in tersine '' usta '' ya iterken, ya da böyle bir şey olduğunda * tetiklemeniz gerektiğini mi söylüyorsunuz? –
@Stefan Tam olarak bu. Kelimeyi bulamadım hehe. –
Yinelenen http://stackoverflow.com/questions/6372334/git-commit-hooks-per-branch – insign