मैं विशिष्ट पुनरीक्षण के साथ जीआईटी रिपॉजिटरी को कैसे क्लोन कर सकता हूं, जैसा कि मैं आमतौर पर मर्क्यूरियल में करता हूं:
hg clone -r 3 /path/to/repository
मैं विशिष्ट पुनरीक्षण के साथ जीआईटी रिपॉजिटरी को कैसे क्लोन कर सकता हूं, जैसा कि मैं आमतौर पर मर्क्यूरियल में करता हूं:
hg clone -r 3 /path/to/repository
जवाबों:
UPDATE 2 चूंकि Git 2.5.0 नीचे वर्णित सुविधा को कॉन्फ़िगरेशन चर के साथ सर्वर साइड पर सक्षम किया जा सकता है uploadpack.allowReachableSHA1InWant
, यहाँ GitHub सुविधा अनुरोध और GitHub इस सुविधा को सक्षम करने के लिए प्रतिबद्ध है । ध्यान दें कि कुछ Git सर्वर इस विकल्प को डिफ़ॉल्ट रूप से सक्रिय करते हैं, जैसे Bitbucket Server ने 5.5+ संस्करण के बाद से इसे सक्षम किया । कॉन्फ़िगरेशन विकल्प को सक्रिय करने के तरीके के बारे में जानने के लिए Stackexchange पर यह उत्तर देखें ।
अद्यतन 1 Git संस्करणों के 1.7 < v < 2.5
लिए git क्लोन और git रीसेट का उपयोग करते हैं, जैसा कि वैभव बाजपेयी के उत्तर में वर्णित है
यदि आप पूर्ण रिपॉजिटरी नहीं लाना चाहते हैं, तो संभवतः आपको उपयोग नहीं करना चाहिए clone
। आप हमेशा उस शाखा का चयन करने के लिए भ्रूण का उपयोग कर सकते हैं जिसे आप लाना चाहते हैं। मैं एक hg विशेषज्ञ नहीं हूँ, इसलिए मुझे इसका विवरण नहीं पता है -r
लेकिन git में आप ऐसा कुछ कर सकते हैं।
# make a new blank repository in the current directory
git init
# add a remote
git remote add origin url://to/source/repository
# fetch a commit (or branch or tag) of interest
# Note: the full history up to this commit will be retrieved unless
# you limit it with '--depth=...' or '--shallow-since=...'
git fetch origin <sha1-of-commit-of-interest>
# reset this repository's master branch to the commit of interest
git reset --hard FETCH_HEAD
git fetch origin <sha1>
काम करता है; ऐसा लगता है जैसे आपको एक नाम या संदर्भ का नाम जैसे संदर्भ देने की आवश्यकता है। Kerneltrap.org/mailarchive/git/2009/1/13/4707444 पर
git fetch origin <SHA1>
किसी भी संशोधन पर स्विच करने के लिए उपयोग करने में सक्षम था जो मैं चाहता था कि मैं मास्टर को रिमोट से प्राप्त करूँ और reset --hard
स्थानीय रूप से शाखा को वास्तविक रूप से इंस्टेंट करने के लिए किया । मैं व्यक्तिगत संशोधनों को सीधे लाने में सक्षम नहीं था। Git 1.7 के साथ, git fetch origin <SHA1>
काम नहीं किया, जैसा कि @artur द्वारा रिपोर्ट किया गया है; आप git checkout <SHA1>
एक के बाद का उपयोग करने की जरूरत है reset --hard
।
$ git clone $URL
$ cd $PROJECT_NAME
$ git reset --hard $SHA1
फिर से सबसे हालिया प्रतिबद्ध पर वापस जाने के लिए
$ git pull
--depth
जो कि अन्य रेपो के लिए बहुत महत्वपूर्ण है। इस समाधान के लिए सभी वस्तुओं को खींचने की आवश्यकता होती है, और फिर पहले के संशोधन पर रीसेट करना होता है। यह नेटवर्क बैंडविड्थ के लिए बहुत समय लेने वाला और बेकार है।
गिट रिपॉजिटरी को क्लोन करना, उपयुक्त रूप से, पूरे रिपॉजिटरी को क्लोन करता है: क्लोन करने के लिए केवल एक संशोधन का चयन करने का कोई तरीका नहीं है। हालांकि, एक बार जब आप प्रदर्शन करते हैं git clone
, तो आप एक विशिष्ट संशोधन कर सकते हैं checkout <rev>
।
git clone
पूरे भंडार को पकड़ लेता है। एक बार आपके पास होने के बाद, आप एक विशिष्ट संशोधन की जांच कर सकते हैं।
git clone --single-branch ...
किसी विशेष शाखा या टैग के उपयोग पर केवल एक ही विशिष्ट प्रतिबद्धता का क्लोन बनाने के लिए:
git clone --depth=1 --branch NAME https://github.com/your/repo.git
दुर्भाग्य से, NAME
केवल शाखा का नाम या टैग नाम हो सकता है (SHA नहीं)।
--depth
पूरे इतिहास को डाउनलोड करने के लिए ध्वज को छोड़ें और फिर उस शाखा या टैग को चेकआउट करें:
git clone --branch NAME https://github.com/your/repo.git
यह गिट के हालिया संस्करण के साथ काम करता है (मैंने इसे संस्करण के साथ किया था 2.18.0
)।
अगर आपका मतलब है कि आप शुरू से ही एक विशेष बिंदु तक सब कुछ प्राप्त करना चाहते हैं, तो चार्ल्स बैली का जवाब एकदम सही है। यदि आप वर्तमान दिनांक से वापस जाने वाले इतिहास के एक सबसेट को उल्टा करना चाहते हैं और प्राप्त कर सकते हैं, तो आप उस जगह का उपयोग कर सकते हैं git clone --depth [N]
जहाँ N आपके इच्छित इतिहास के क्रमांक की संख्या है। तथापि:
--depth
निर्दिष्ट संख्या में संशोधन के लिए एक इतिहास के साथ उथले क्लोन बनाएं। उथले रिपॉजिटरी की कई सीमाएँ हैं (आप इसे क्लोन या इससे प्राप्त नहीं कर सकते, न ही इसमें से धक्का दे सकते हैं और न ही इसमें से), लेकिन पर्याप्त है यदि आप एक लंबे इतिहास के साथ एक बड़ी परियोजना के हाल के इतिहास में रुचि रखते हैं और चाहते हैं। पैच के रूप में सुधार में भेजें।
बस चीजों को योग करने के लिए (git v। 1.7.2.1):
git clone
जहां आप रेपो चाहते हैं (आज तक सब कुछ मिलता है - मुझे पता है, जो नहीं चाहता है, हम वहां पहुंच रहे हैं) git checkout <sha1 rev>
आप चाहते हैं की संशोधितgit reset --hard
git checkout -b master
master
और इसे स्विच करता है।
git reset --hard
? डॉक्स का कहना है कि "इंडेक्स और वर्किंग ट्री को रीसेट करता है। वर्किंग ट्री में ट्रैक की गई फाइलों में कोई बदलाव <प्रतिबद्ध> [जो कि HEAD को डिफॉल्ट करता है, जो अब <sha1 rev>
खत्म हो गया है]।" लेकिन इस बिंदु पर हमने क्लोनिंग के बाद से कोई बदलाव नहीं किया है, तो इसका क्या उद्देश्य है? क्या यह वर्तमान शाखा को काटता है <sha1 rev>
?
टीएल; डीआर - बस उस भ्रूण के कमांड में टैग का उपयोग करने के लिए प्रतिबद्ध करने के लिए स्रोत रिपॉजिटरी में एक टैग बनाएं। आप बाद में सफाई करने के लिए मूल रेपो से टैग हटा सकते हैं।
खैर, इसका 2014 और ऐसा लग रहा है कि 2010 से चार्ल्स बेली का स्वीकृत उत्तर अच्छी तरह से और अब तक पुराना है और अन्य उत्तरों में से अधिकांश (सभी?) में क्लोनिंग शामिल है, जिससे कई लोग बचने की उम्मीद कर रहे हैं।
निम्नलिखित समाधान प्राप्त करता है कि ओपी और कई अन्य क्या ढूंढ रहे हैं, जो इतिहास सहित एक भंडार की एक प्रति बनाने का एक तरीका है, लेकिन केवल एक निश्चित प्रतिबद्ध तक।
यहाँ कुछ कमांड्स हैं जिनका उपयोग मैंने git संस्करण 2.1.2 के साथ किया है ताकि एक स्थानीय रेपो (किसी अन्य निर्देशिका में एक रिपॉजिटरी) को एक निश्चित बिंदु तक क्लोन किया जा सके:
# in the source repository, create a tag against the commit you want to check out
git tag -m "Temporary tag" tmptag <sha1>
# create a new directory and change into that directory
cd somewhere_else;mkdir newdir;cd newdir
# ...and create a new repository
git init
# add the source repository as a remote (this can be a URL or a directory)
git remote add origin /path/to/original/repo
# fetch the tag, which will include the entire repo and history up to that point
git fetch origin refs/tags/tmptag
# reset the head of the repository
git reset --hard FETCH_HEAD
# you can now change back to the original repository and remove the temporary tag
cd original_repo
git tag -d tmptag
उम्मीद है कि यह समाधान कुछ और वर्षों तक काम करता रहेगा! :-)
आप बस का उपयोग कर सकते हैं git checkout <commit hash>
इस क्रम में
bash
git clone [URLTORepository]
git checkout [commithash]
प्रतिबद्ध हैश इस तरह दिखता है "45ef55ac20ce2389c9180658fdba35f4a66d204/
उपरोक्त उत्तरों में से 2 का उपयोग करना ( विशिष्ट संशोधन / परिवर्तन के साथ git रिपॉजिटरी को कैसे क्लोन करना है ? और विशिष्ट रीविजन / बदलाव के साथ git रिपॉजिटरी को कैसे क्लोन करना है? ) ने मुझे एक निश्चित के साथ आने में मदद की। यदि आप किसी बिंदु पर क्लोन बनाना चाहते हैं, तो उस बिंदु को एक टैग / शाखा होना चाहिए न कि केवल एक SHA या FETCH_HEAD भ्रमित हो जाता है। अगर आप किसी शाखा या टैग नाम का उपयोग करते हैं, तो आपको एक प्रतिक्रिया मिलती है, यदि आप SHA-1 का उपयोग करते हैं, तो आपको प्रतिक्रिया नहीं मिलती है।
यहाँ मैंने क्या किया है: - वास्तविक रेपो से पूर्ण रेपो का पूर्ण कार्यशील क्लोन बनाएं
cd <path to create repo>
git clone git@<our gitlab server>:ui-developers/ui.git
फिर एक स्थानीय शाखा बनाएं, उस बिंदु पर जो दिलचस्प है
git checkout 2050c8829c67f04b0db81e6247bb589c950afb14
git checkout -b origin_point
फिर अपने मूल के रूप में मेरी स्थानीय प्रति के साथ, मेरा नया रिक्त प्रतिनिधि बनाएं
cd <path to create repo>
mkdir reduced-repo
cd reduced-repo
git init
git remote add local_copy <path to create repo>/ui
git fetch local_copy origin_point
उस समय मुझे यह प्रतिक्रिया मिली। मैं इसे नोट करता हूं क्योंकि यदि आप ऊपर की शाखा के स्थान पर SHA-1 का उपयोग करते हैं, तो कुछ भी नहीं होता है, इसलिए प्रतिक्रिया, इसका मतलब है कि यह काम करता है
/ var / www / html / ui-hacking $ git लाने के लिए local_copy Origin_point दूरस्थ: गिनती की वस्तुओं: 45493, किया। दूरस्थ: संपीड़ित वस्तुएं: 100% (15928/15928), किया। दूरस्थ: कुल ४५४ ९ ३ (डेल्टा २8५० Total), पुन: ४५३ del (डेल्टा २3४६३) प्राप्त वस्तुएं: 100% (45493/45493), 53.64 MiB | 50.59 MiB / s, किया गया। समाधान डेल्टा: 100% (27508/27508), किया। से / var / www / html / ui * शाखा का मूल_ बिंदु -> FETCH_HEAD * [एक नई शाखा] Origin_point -> मूल / Origin_point
अब मेरे मामले में, मुझे फिर से एक नए रेपो के रूप में गीतालाब को वापस लाने की आवश्यकता थी, इसलिए मैंने किया
git remote add origin git@<our gitlab server>:ui-developers/new-ui.git
जिसका मतलब था कि मैं अपने रेपो को क्रिएट_पाइंट से फिर से चुनकर git --git-dir=../ui/.git format-patch -k -1 --stdout <sha1> | git am -3 -k
चेरी पिक रिमूव कर सकता हूं, फिर git push origin
पूरे लॉट को अपने नए घर में अपलोड करने के लिए उपयोग कर सकता हूं ।
आशा है कि किसी की मदद करता है
git fetch local_copy origin_point
जेम्सगैस से अलग कैसे है git fetch origin refs/tags/tmptag
?
git fetch local_copy origin_point
एक खाली साथ एक राज्य में तुम्हें छोड़ reduced-repo
निर्देशिका, केवल एक युक्त .git
। इन निर्देशों को कुछ और याद आ रहा है ...
मेरा संस्करण स्वीकृत और सबसे उत्कीर्ण उत्तरों का संयोजन था। लेकिन यह थोड़ा अलग है, क्योंकि हर कोई SHA1 का उपयोग करता है, लेकिन कोई भी आपको यह नहीं बताता है कि इसे कैसे प्राप्त किया जाए
$ git init
$ git remote add <remote_url>
$ git fetch --all
अब आप सभी शाखाएँ और कमिट देख सकते हैं
$ git branch -a
$ git log remotes/origin/master <-- or any other branch
अंत में आप वांछित प्रतिबद्ध SHA1 को जानते हैं
git reset --hard <sha1>
मैं किसी भी संशोधन टैग, शाखा या हैश को बंद करने के लिए GNU मेक के साथ इस स्निपेट का उपयोग करता हूं
यह git संस्करण 2.17.1 पर परीक्षण किया गया था
${dir}:
mkdir -p ${@D}
git clone --recursive --depth 1 --branch ${revison} ${url} ${@} \
|| git clone --recursive --branch ${revison} ${url} ${@} \
|| git clone ${url} ${@}
cd ${@} && git reset --hard ${revison}
ls $@
git clone https://github.com/ORGANIZATION/repository.git
(क्लोन भंडार)
cd repository (navigate to the repository)
git fetch origin 2600f4f928773d79164964137d514b85400b09b2
git checkout FETCH_HEAD
# clone special tag/branch without history
git clone --branch=<tag/branch> --depth=1 <repository>
# clone special revision with minimal histories
git clone --branch <branch> <repository> --shallow-since=yyyy-MM-ddTHH:mm:ss # get the commit time
cd <dir>
git reset --hard <revision>
यदि uploadpack.allowReachableSHA1InWant=true
सर्वर पर सेट नहीं किया गया है, तो आपको इतिहास के बिना कोई संशोधन नहीं मिल सकता है , जबकि आप इसके लिए एक टैग बना सकते हैं और इसके बजाय विशेष टैग को क्लोन कर सकते हैं।
git clone -o <sha1-of-the-commit> <repository-url> <local-dir-name>
git
शब्द का उपयोग origin
लोकप्रिय रूप से ज्ञात के अनुसार होता हैrevision
निम्नलिखित मैनुअल से एक स्निपेट है $ git help clone
--origin <name>, -o <name>
Instead of using the remote name origin to keep track of the upstream repository, use <name>.
--depth=1
जवाब में उल्लेख नहीं किया गया है, तो आप इस बात को क्यों कहेंगे कि यदि आपने और चीजों को जोड़ा है जो यहां उल्लेखित नहीं हैं? मुझे खुशी है कि यह आपके लिए काम कर रहा है, लेकिन यह उत्तर भ्रामक है और भाग में भी इस सवाल का जवाब नहीं देता है। इसलिए डाउनवोट्स।
git clone <url> <local_dir_name>
, बस इसे अपने लिए आज़माएँ। एकमात्र अंतर यह है कि रिमोट (उपयोग करके दिखाया गया git remote
) को "मूल" नाम के बजाय कुछ क्रिप्टिक शा 1 अनुक्रम कहा जाएगा जो प्रथागत है। दूसरे शब्दों में, <sha1-of-the-commit>
इस उत्तर में उल्लिखित कोई असर नहीं है, जिस पर सर्वर से संशोधन किए जाते हैं या किस शाखा की जाँच की जाएगी।
git clone -o 896066ee1cf4d653057dac4e952f49c96ad16fa7 https://github.com/torvalds/linux.git linux --depth=1
। यह मुझे संशोधन देता है 8a28d674
और आपके जैसा नहीं है 896066ee
और यह उत्तर दावा करता है।
git clone -b 10.1 https://github.com/MariaDB/server.git --depth=1 mariadb-server-src