मैं कई वर्षों से Perforce का उपयोग कर रहा हूं। मैं अपने व्यक्तिगत कोड के लिए git का उपयोग करने के लिए स्विच करना चाहूंगा, लेकिन उन सभी git ट्यूटोरियल्स के बारे में जिन्हें मैंने देखा है कि या तो यह मान लें कि आप एक पूर्ण स्रोत नियंत्रण n00b (जो उन्हें अविश्वसनीय रूप से थकाऊ बनाता है) या जिसका आप उपयोग कर रहे हैं svn (जो मैं नहीं हूं)।
मुझे पता है कि पी 4, और मैं एक वितरित स्रोत नियंत्रण प्रणाली के पीछे के विचार को भी समझता हूं (इसलिए मुझे बिक्री पिच की आवश्यकता नहीं है, धन्यवाद)। मुझे जो पसंद है वह p4 कमांड से बराबर git कमांड में ट्रांसलेशन टेबल है, साथ ही "बिना नहीं रह सकता है" कमांड के साथ कोई भी 4 समतुल्य नहीं है।
चूँकि मुझे संदेह है कि प्रत्येक p4 उपयोगकर्ता p4 के एक अलग उपसमूह का उपयोग करता है, यहाँ कुछ चीजें हैं जो मैं नियमित रूप से p4 में करता हूं जो मैं git में करने में सक्षम होना चाहता हूं जो मैंने जिस डॉक्स को देखा है उससे तुरंत स्पष्ट नहीं हैं :
- एक ही क्लाइंट में कई लंबित चेंजेलिस्ट बनाएँ। (
p4 change
) - एक लंबित चेंजेलिस्ट को संपादित करें। (भी
p4 change
) - मेरे सभी लंबित पत्रकारों की सूची देखें (
p4 changes -s pending
) - मेरे क्लाइंट में सभी परिवर्तित फ़ाइलों की सूची (
p4 opened
) या एक लंबित चेंजलिस्ट में (p4 describe
) - पेंडिंग चेंजलिस्ट का एक अंतर देखें (मैं इसके लिए एक रैपर स्क्रिप्ट का उपयोग करता हूं जो उपयोग करता है
p4 diff
औरp4 describe
) - किसी दिए गए फ़ाइल के लिए, देखें कि किन चेंजलिस्टों ने प्रभावित किया है कि कौन सी लाइनें (
p4 annotate
) - किसी दिए गए फ़ाइल के लिए, फ़ाइल को प्रभावित करने वाले चेंजेलिस्ट के विवरणों की एक सूची देखें (
p4 log
) - लंबित चेंजलिस्ट (
p4 submit -c
) जमा करें - एक लंबित चेंजलिस्ट को गर्भपात कराएं (
p4 revert
)
इनमें से बहुत सारे "चैंजिस्ट" के आसपास घूमते हैं। "चैंजिस्ट" पी 4 शब्दावली है। Git समतुल्य शब्द क्या है?
ऐसा लगता है कि शाखाएं क्या हो सकती हैं जो g4 उपयोगकर्ताओं के स्थान पर git उपयोगकर्ताओं का उपयोग करती हैं। थोड़ा भ्रामक है, क्योंकि पी 4 में भी कुछ शाखा होती है, हालांकि वे केवल संबंधित अवधारणाएं लगती हैं। (हालांकि मुझे हमेशा लगता था कि पी 4 की एक शाखा की अवधारणा बहुत अजीब थी लेकिन यह एक शाखा के क्लासिक आरसीएस अवधारणा से फिर भी अलग है।)
वैसे भी ... मुझे यकीन नहीं है कि मैं g4 की शाखाओं के साथ पी 4 चेंजलगिस्ट में सामान्य रूप से क्या करूं। P4 में मैं ऐसा कुछ कर सकता हूं:
$ p4 edit a.txt
$ p4 change a.txt
Change 12345 created.
इस बिंदु पर मेरे पास एक चेंजलिस्ट है, जिसमें a.txt है। मैं विवरण को संपादित कर सकता हूं और चेंजलिस्ट को प्रस्तुत किए बिना काम करना जारी रख सकता हूं। इसके अलावा, अगर यह पता चला है कि मुझे कुछ अन्य फ़ाइलों में कुछ बदलाव करने की आवश्यकता है, जैसे कि कोड की किसी अन्य परत में बगफिक्स कहते हैं, तो मैं उसी क्लाइंट में कर सकता हूं:
$ p4 edit z.txt
$ p4 change z.txt
Change 12346 created.
अब मेरे पास एक ही क्लाइंट में दो अलग-अलग चैनल हैं। मैं इन समवर्ती पर काम कर सकते हैं, और मुझे उन्हें "बीच स्विच" करने के लिए कुछ भी करने की आवश्यकता नहीं है। जब यह करने का समय आएगा, मैं उन्हें अलग से प्रस्तुत कर सकता हूं:
$ p4 submit -c 12346 # this will submit the changes to z.txt
$ p4 submit -c 12345 # this will submit the changes to a.txt
मैं समझ नहीं पा रहा हूँ कि इसे कैसे दोहराया जा सकता है। मेरे प्रयोगों से, यह प्रकट नहीं होता है कि git add
वर्तमान शाखा के साथ जुड़ा हुआ है। जहां तक मैं बता सकता हूं, जब मैं git commit
यह करने के लिए सभी फाइलें करने जा रहा हूं कि उस समय मैं 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
इस उदाहरण में, aardvark और ज़ेबरा शाखाओं में ठीक उसी परिवर्तन के सेट को सम्मिलित किया गया है, और इसके आउटपुट के आधार पर git status
ऐसा प्रतीत होता है कि दोनों में एक ही कार्य करने का एक ही प्रभाव होगा। क्या मुझसे कुछ ग़लत हो रहा है?