SORU
2 HAZİRAN 2010, ÇARŞAMBA


Neden anlamı “” ve “onlar” git-svn ile ters bizimdir

Kullanıyorum git-svn ve fark ettim ki mecbur kaldığımda düzeltme, birleştirme çakışma yaptıktan sonra bir git svn rebase anlam --ours --theirs seçenekleri, örneğin git checkout tersine. Yani, eğer orada bir çatışma ve ben devam etmek istiyorum sürümü geldi SVN server ve atmak değişiklikleri yaptım yerel olarak, ben kullanmak zorunda ours, ne zaman vereceğini bekliyor olacak theirs.

Bu yüzden mi?

Örnek:

mkdir test
cd test
svnadmin create svnrepo
svn co file://$PWD/svnrepo svnwc
cd svnwc
echo foo > test.txt
svn add test.txt
svn ci -m 'svn commit 1'
cd ..
git svn clone file://$PWD/svnrepo gitwc
cd svnwc
echo bar > test.txt 
svn ci -m 'svn commit 2'
cd ..
cd gitwc
echo baz > test.txt 
git commit -a -m 'git commit 1'
git svn rebase

git checkout --ours test.txt
cat test.txt 
# shows "bar" but I expect "baz"

git checkout --theirs test.txt
cat test.txt 
# shows "baz" but I expect "bar"

CEVAP
2 HAZİRAN 2010, ÇARŞAMBA


Bir rebase ne ile tutarlı görünüyor.

  • git svn rebase mevcut BAŞKANI SVN ebeveynden düzenlemeler getirir ve buna karşı (SVN kaydedilmemiş) geçerli çalışma rebases.

  • git rebase söz yok:
    Bir rebase her <upstream> dal üstünde çalışan şubesinden taahhüt tekrarlayarak çalışır birleştirmek unutmayın.
    Bir birleştirme bu nedenle, çatışma olur:

    • yan so-far rebased serisi <upstream> ile başlayan satılık olduğunu bildirdi,
    • ve işçi şube onlarındır.
      Diğer bir deyişle,bu Taraf değiştirdi.

git rebase tekrarları <upstream> dal üstünde çalışan şube işlemek.

İkiniz de tanımlar mutabakat:

  • SVN gelen olan yerel Gıt tamamlar tekrarlanmış olup üstünde olanlar tamamlar. Bu bir parçası "şimdiye kadar rebased", ve referans olarak "" (senin durumunda, bar test.txt dosya içeriği) . bizim dizi
  • çalışma şube (içeren Gıt tamamlar bilinmeyen SVN, senin durumunda, test.txt dosyası ile baz içerik) "onların", ve her biri yerel Gıt taahhüt ediliyor tekrarlanmış.

Diğer bir deyişle, SVN ya da değil:

  • "<upstream>" yetmezmiş gibi bir şey tekrarlanmış ve şimdiye kadar rebased kaydeder parçası olan (")". şube ^strong>bizimki".
  • tekrarlanmış olmak nedir (şube)"onlarınki".

CommaToast mnemonic tip iyi:

işaret ne varsa"". bizim

(git rebase upstream çıkış yaptığı ilk şey yetmezmiş gibi rebase için istediğiniz upstream şube: upstream -- ours BAŞ gösterir artık.)


Bu karışıklık muhtemelen 50 ** klasik bir çalışma Dalı rolü geliyor.
Birleştirdiğiniz zaman:

  • "çalışma Dalı" ne içeren "şimdiye kadar", olarak kabul edilir"",. bizim birleştirilmiş
  • diğer -- tekrarlanmış ama çalışmıyor Dalı üzerine birleştirme ve kabul edildiğini temsil commit "".

git rebase man sayfasına bahseder gibi, bir tarafı takas rebase bir araç birleştirme sırasında.


Aynı şeyi söylemek için başka bir yol olduğunu düşünün

  • ne varkontrol şube 'bizimki',
  • yaşadığımız şey(ve birleştirilmiş ya da tekrar ediliyor)onlarınki'.

Bir birleştirme:

x--x--x--x--x(*) <- current branch B ('*'=HEAD)
    \
     \
      \--y--y--y <- other branch to merge

mevcut şube değişmeyiz 'B', çok (ve biz başka bir şube birleştirme) üzerinde çalışıyorduk hala

x--x--x--x--x---------o(*)  MERGE, still on branch B
    \       ^        /
     \     ours     /
      \            /
       --y--y--y--/  
               ^
              their

Amabir rebasebir rebase yaptığı ilk iş çıkış için yukarı şube çünkü! biz yan geçiş (mevcut üzerine tamamlar tekrar)

x--x--x--x--x(*) <- current branch B
    \
     \
      \--y--y--y <- upstream branch

Birgit rebase upstreamöncelikle üst Dalı HEAD B HEAD değişecek (dolayısıyla geçiş 'bizim' ve 'onların' önceki "" çalışma Dalı.) geçerli karşılaştırıldığında

x--x--x--x--x <- former "current" branch, new "theirs"
    \
     \
      \--y--y--y(*) <- upstream branch with B reset on it,  
                       new "ours", to replay x's on it

ve sonra rebase replay 'onların' yeni iptalleri '' B şube: . bizim

x--x..x..x..x <- old "theirs" commits, now "ghosts", available through reflogs
    \
     \
      \--y--y--y--x'--x'--x'(*) <-  branch B with HEAD updated ("ours")
               ^
               |
        upstream branch

Sadece fazladan bir adımgit svn rebasebir svn "ilk Gıt gerçekleştirilir uzak şube SVN temsil eden" tamamlar. getir.
Başlangıçta var:

x--x--x--x--x(*) <- current branch B, "ours" for now.
    \                                   
     \
      \--y--y--y <- SVN tracking branch, "theirs for now"

öncelikle SVN izleme şube SVN gelen iptalleri güncelleştirin

x--x--x--x--x(*) <- current branch B, still "ours", not for long
    \                                   
     \
      \--y--y--y--y'--y' <- SVN tracking branch updated

o zaman SVN tarafı için geçerli dala geçiş olur ("") bizimki

x--x--x--x--x <- for "B", now "their" during the rebase
    \                                   
     \
      \--y--y--y--y'--y'(*) <- SVN tracking branch updated, and branch B: 
                               now "ours" (this is "what we now have")

(ama şimdi "" rebase) sırasında . onların üzerinde çalıştığınız tamamlar yeniden önce

x--x..x..x..x <- old "theirs" commits, now "ghosts", available through reflogs
    \
     \
      \--y--y--y--y'--y'--x'--x'--x'(*) <-  branch B with HEAD updated ("ours")
                      ^
                      |
        upstream SVN tracking branch

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • JTechTalk

    JTechTalk

    11 Temmuz 2010
  • Matthew Smith

    Matthew Smit

    24 Mayıs 2010
  • SRI International

    SRI Internat

    30 NİSAN 2008