Perforce'u birkaç yıldır kullanıyorum. Kişisel kodum için git kullanmaya geçmek istiyorum, ancak gördüğüm git öğreticilerinin tümü ya tam bir kaynak denetimi n00b (bu da onları inanılmaz derecede sıkıcı yapıyor) ya da alışkın olduğunuzu varsayıyor svn (ben değilim).
P4'ü biliyorum ve ayrıca dağıtılmış bir kaynak kontrol sisteminin arkasındaki fikri de anlıyorum (bu yüzden bir satış konuşmasına ihtiyacım yok, teşekkürler). İstediğim şey, p4 komutundan eşdeğer git komutlarına bir çeviri tablosu ve p4 eşdeğeri olmayan "olmadan yaşayamaz" komutlarıdır.
Her p4 kullanıcısının p4'ün farklı bir alt kümesini kullandığından şüphelendiğim için, p4'te düzenli olarak yaptığım, git'te yapmak istediğim ve baktığım belgelerden hemen anlaşılmayan bazı şeyler var. :
- tek bir istemcide birden çok bekleyen değişiklik listesi oluşturun. (
p4 change
) - bekleyen değişiklik listesini düzenleyin. (ayrıca
p4 change
) - tüm bekleyen değişiklik listelerimin bir listesini gör (
p4 changes -s pending
) - Müvekkilim değişti tüm dosyaları listesi (
p4 opened
) veya bekleyen bir değişiklik listesi içinde (p4 describe
) - bekleyen değişiklik listesinin bir farkını gör (bunun için
p4 diff
ve kullanan bir sarmalayıcı komut dosyası kullanıyorump4 describe
) - belirli bir dosya için hangi gönderilmiş değişiklik listelerinin hangi satırları etkilediğini görün (
p4 annotate
) - belirli bir dosya için dosyayı etkileyen değişiklik listelerinin açıklamalarının bir listesine bakın (
p4 log
) - bekleyen değişiklik listesi gönderin (
p4 submit -c
) - bekleyen değişiklik listesini iptal et (
p4 revert
)
Bunların çoğu "değişim listeleri" etrafında dönüyor. "değişiklik listesi" p4 terminolojisidir. Git eşdeğeri terimi nedir?
Görünüşe göre dallar, git kullanıcılarının p4'ün değişiklik listesi dediği şey yerine kullandıkları şey olabilir. Biraz kafa karıştırıcı, çünkü p4'te dal adı verilen bir şey de var, ancak bunlar sadece belli belirsiz ilişkili kavramlar gibi görünüyor. (Her zaman p4'ün dal kavramının oldukça tuhaf olduğunu düşünmeme rağmen, yine bir dalın klasik RCS konseptinden farklıdır.)
Her neyse ... Git'in dalları ile normalde p4 değişim listelerinde yaptığım şeyi nasıl başaracağımdan emin değilim. 4. sayfada şöyle bir şey yapabilirim:
$ p4 edit a.txt
$ p4 change a.txt
Change 12345 created.
Bu noktada a.txt içeren bir değişiklik listem var. Açıklamayı düzenleyebilir ve değişiklik listesini göndermeden çalışmaya devam edebilirim. Ayrıca, kodun başka bir katmanındaki bir hata düzeltmesi gibi başka dosyalarda bazı değişiklikler yapmam gerektiği ortaya çıkarsa, bunu aynı istemcide yapabilirim:
$ p4 edit z.txt
$ p4 change z.txt
Change 12346 created.
Şimdi aynı istemcide iki ayrı değişiklik listem var. Bunlar üzerinde aynı anda çalışabilirim ve "aralarında geçiş" yapmak için hiçbir şey yapmam gerekmiyor. Taahhüt zamanı geldiğinde, bunları ayrı ayrı gönderebilirim:
$ p4 submit -c 12346 # this will submit the changes to z.txt
$ p4 submit -c 12345 # this will submit the changes to a.txt
Bunu git'te nasıl çoğaltacağımı çözemiyorum. Deneylerimden, git add
mevcut dalla ilişkili görünmüyor . Anlayabildiğim kadarıyla, o sırada hangi dalda olursam olayım git commit
, yaptığım tüm dosyaları ne zaman işleyeceğim git add
:
$ git init
Initialized empty Git repository in /home/laurence/git-playground/.git/
$ ls
a.txt w.txt z.txt
$ git add -A .
$ git commit
Initial commit.
3 files changed, 3 insertions(+), 0 deletions(-)
create mode 100644 a.txt
create mode 100644 w.txt
create mode 100644 z.txt
$ vi a.txt z.txt
2 files to edit
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: a.txt
# modified: z.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
$ git branch aardvark
$ git checkout aardvark
M a.txt
M z.txt
Switched to branch 'aardvark'
$ git add a.txt
$ git checkout master
M a.txt
M z.txt
Switched to branch 'master'
$ git branch zebra
$ git checkout zebra
M a.txt
M z.txt
Switched to branch 'zebra'
$ git add z.txt
$ git status
# On branch zebra
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: a.txt
# modified: z.txt
#
$ git checkout aardvark
M a.txt
M z.txt
Switched to branch 'aardvark'
$ git status
# On branch aardvark
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: a.txt
# modified: z.txt
Bu örnekte, aardvark ve zebra dalları tam olarak aynı değişiklik setini içeriyor gibi görünüyor ve çıktısına göre git status
ikisinde de bir commit yapmanın aynı etkiye sahip olacağı görülüyor. Yanlış bir şey mi yapıyorum?