मैं इस उत्तर को जोड़ रहा हूं क्योंकि यहां पहुंचने के बाद (एक ही प्रश्न के साथ), कोई भी उत्तर वास्तव में सभी आवश्यक चरणों का वर्णन नहीं करता है जो कि पूरी तरह से प्रयोग करने योग्य रिमोट (नंगे) रेपो में जाने के लिए आवश्यक हैं।
नोट: यह उदाहरण नंगे रेपो के स्थान के लिए स्थानीय रास्तों का उपयोग करता है, लेकिन अन्य गिट प्रोटोकॉल (जैसे ओपी द्वारा इंगित एसएसएच) ठीक काम करना चाहिए।
मैंने git से कम परिचित लोगों के लिए रास्ते में कुछ नोट्स जोड़ने की कोशिश की है।
1. नंगे रेपो की शुरुआत ...
> git init --bare /path/to/bare/repo.git
Initialised empty Git repository in /path/to/bare/repo.git/
यह एक फ़ोल्डर (repo.git) बनाता है और इसे git रेपो का प्रतिनिधित्व करने वाली git फ़ाइलों के साथ पॉप्युलेट करता है। जैसा कि यह खड़ा है, यह रेपो बेकार है - इसमें कोई कमिट नहीं है और अधिक महत्वपूर्ण बात, कोई शाखा नहीं है । यद्यपि आप इस रेपो को क्लोन कर सकते हैं, लेकिन आप इससे नहीं खींच सकते।
अगला, हमें एक कामकाजी फ़ोल्डर बनाने की आवश्यकता है। ऐसा करने के कुछ तरीके हैं, जो इस बात पर निर्भर करता है कि आपके पास मौजूदा फाइलें हैं या नहीं।
2 ए। खाली रेपो को क्लोन करके एक नया वर्किंग फोल्डर (कोई मौजूदा फाइल नहीं) बनाएं
git clone /path/to/bare/repo.git /path/to/work
Cloning into '/path/to/work'...
warning: You appear to have cloned an empty repository.
done.
यह कमांड केवल तभी काम करेगा जब /path/to/work
मौजूद नहीं है या एक खाली फ़ोल्डर है। चेतावनी पर ध्यान दें - इस स्तर पर, आपके पास अभी भी कुछ उपयोगी नहीं है। यदि आप cd /path/to/work
और दौड़ते हैं git status
, तो आपको कुछ मिलेगा:
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)
लेकिन यह झूठ है। आप वास्तव में शाखा में नहीं हैं master
(क्योंकि git branch
कुछ भी नहीं लौटाते हैं) और अब तक, कोई कमिट नहीं हैं।
इसके बाद, काम करने वाले फ़ोल्डर में कुछ फ़ाइलों को कॉपी / मूव / क्रिएट करें, उन्हें git में जोड़ें और पहला कमिट बनाएं।
> cd /path/to/work
> echo 123 > afile.txt
> git add .
> git config --local user.name adelphus
> git config --local user.email adelphus@example.com
> git commit -m "added afile"
[master (root-commit) 614ab02] added afile
1 file changed, 1 insertion(+)
create mode 100644 afile.txt
git config
आदेशों केवल जरूरत है अगर आप पहले से Git तुम कौन हो नहीं बताया है। ध्यान दें कि यदि आप अब चलाते हैं git branch
, तो आप अब master
सूचीबद्ध शाखा देखेंगे । अब चलाएं git status
:
On branch master
Your branch is based on 'origin/master', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
nothing to commit, working directory clean
यह भी भ्रामक है - अपस्ट्रीम "चला गया" नहीं है, यह अभी तक नहीं बनाया गया है और git branch --unset-upstream
यह मदद नहीं करेगा। लेकिन यह ठीक है, अब जब हमारी पहली प्रतिबद्धता है, हम धक्का दे सकते हैं और नंगे रेपो पर मास्टर बनाया जाएगा।
> git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 207 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /path/to/bare/repo.git
* [new branch] master -> master
इस बिंदु पर, हमारे पास एक पूरी तरह कार्यात्मक नंगे रेपो है, जिसे एक मास्टर शाखा पर कहीं और क्लोन किया जा सकता है और साथ ही एक स्थानीय कामकाजी प्रतिलिपि जो खींच और धक्का दे सकती है।
> git pull
Already up-to-date.
> git push origin master
Everything up-to-date
2 बी। मौजूदा फ़ाइलों से एक कार्यशील फ़ोल्डर बनाएं
यदि आपके पास पहले से ही इसमें फ़ाइलों के साथ एक फ़ोल्डर है (ताकि आप इसमें क्लोन न कर सकें), तो आप एक नई गिट रेपो को इनिशियलाइज़ कर सकते हैं, पहले कमिट जोड़ सकते हैं और फिर बाद में इसे नंगे रेपो से जोड़ सकते हैं।
> cd /path/to/work_with_stuff
> git init
Initialised empty Git repository in /path/to/work_with_stuff
> git add .
# add git config stuff if needed
> git commit -m "added stuff"
[master (root-commit) 614ab02] added stuff
20 files changed, 1431 insertions(+)
create mode 100644 stuff.txt
...
इस बिंदु पर हमारे पास हमारी पहली प्रतिबद्ध और एक स्थानीय मास्टर शाखा है जिसे हमें एक दूरस्थ-ट्रैक अपस्ट्रीम शाखा में बदलना होगा।
> git remote add origin /path/to/bare/repo.git
> git push -u origin master
Counting objects: 31, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (31/31), done.
Writing objects: 100% (31/31), 43.23 KiB | 0 bytes/s, done.
Total 31 (delta 11), reused 0 (delta 0)
To /path/to/bare/repo.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
-u
(नई) ट्रैक अपस्ट्रीम ब्रांच को सेट करने के लिए गिट पुश पर ध्वज को नोट करें । पहले की तरह, अब हमारे पास पूरी तरह कार्यात्मक नंगे रेपो हैं, जिन्हें एक मास्टर शाखा पर कहीं और क्लोन किया जा सकता है और साथ ही एक स्थानीय वर्किंग कॉपी जो खींच और धक्का दे सकती है।
यह सब कुछ स्पष्ट लग सकता है, लेकिन git मुझे सबसे अच्छे समय में भ्रमित करता है (यह त्रुटि और स्थिति संदेशों को वास्तव में कुछ काम करने की आवश्यकता है) - उम्मीद है, यह दूसरों की मदद करेगा।
--shared
विकल्प को भी जोड़ सकते हैंinit
यदि आप अन्य लोगों को इस रेपो में धकेलने की योजना बनाते हैं। यह स्वचालित रूप से समूह लेखन अनुमतियों को रिपॉजिटरी से जोड़ता है - लिंक