Bazı C++ projeleri içeren varolan bir SVN deposuyla etkileşimde bulunmak için git-svn kullanıyorum. subwcrev.exe, bir C++ üstbilgisinde (svnversion.h) bazı dizeleri güncellemek için önceden oluşturulmuş bir olay olarak kullanılır. Bu dizeler, sonuçta ortaya çıkan ikili için bazı sürüm bilgileri oluşturmak için zorlanır.Git-svn kullanırken öykünme subvcrev
Subwcrev çalışması için .svn meta verileri gerektirdiğinden, pre-build olayı git-svn çalışma kopyasında kullanıldığında başarısız olur. Bu yüzden git repositoryum için post-commit ve post-checkout kasa olarak kullandığım aşağıdaki bash betiği ile geldim. Komut dosyası, git svn bilgisinin (yerel bir dosyada önbelleğe alınmış) çıktısına bağlı olarak subwcrev ile aynı şeyi yapmaya çalışır. Gerçekten şimdiye kadar taklit edilemez Ne
#!/bin/sh
if [ ! -f svninfo ] ; then
git svn info > svninfo
fi
revision=`sed -e "/Revision/!d" -e "s/Revision: \(.*\)/\1/" svninfo`
lastchange=`sed -e "/Last Changed Rev/!d" -e "s/Last Changed Rev: \(.*\)/\1/" svninfo`
# Get the last changed date, extract timestamp, replaces dashes with slashes
changedate=`sed -e "/Last Changed Date/!d" -e "s/Last Changed Date: \(.\{19\}\).*/\1/" -e "s!-!\\\\\\/!g" svninfo`
now=`date "+%Y\/%m\/%d %H:%M:%S"`
gitcommit=`git show --abbrev-commit | sed -n -e "s/commit //p"`
for entry in $(find -name svnversion_template.h); do
newname=`echo $entry|sed -e "s/_template//"`
sed -e "s/\\\$WCRANGE\\\$/${revision}/" \
-e "s/\\\$WCREV\\\$/${lastchange}-${gitcommit}/" \
-e "s/\\\$WCDATE\\\$/${changedate}/" \
-e "s/\\\$WCNOW\\\$/${now}/" \
-e "s/\\\$WCURL\\\$/local git repo/" \
-e "s/\\\$WCMODS.*\\\$/(true)/" \
-e "s/\\\$WCMIXED.*\\\$/(false)/" \
$entry > `echo $entry|sed -e "s/_template//"`
done
subwcrev denli yararlı olmasını (son teslim SVN revizyon dayalı) yerel bir kararsız değişikliklerin otomatik olarak tespit edilmesi.
$WCREV$
, SVN deposunun (altwcrev'nin yaptığı gibi) revizyon numarası ile değiştiriliyor ancak bu sefer derlediğim kodu tanımlamak için kısaltılmış git commit hash'imi ekliyorum. Benim sorum şu: Bir kabuk betiğini, benim mevcut HEAD'ımın son getirilen SVN revizyonundan farklı olup olmadığını ayırt etmenin bir yolu var, bu yüzden -${gitcommit}
parçasını eklemeyi ihmal edebilir ve $WCMODS$
değerini false olarak ayarlayabilir miyim?
post-"git svn dcommit"
kanca gibi bir şey varsa, benim sorunum da çözülecektir, çünkü o zamandan beri özel kanca svnversion.h farklı şekilde yaratacaktır. Böyle bir kanca bir şekilde eklenebilir mi?