আমি কীভাবে সুনির্দিষ্ট সংশোধন সহ গিট সংগ্রহস্থলটির ক্লোন করতে পারি, যেমনটি আমি সাধারণত মার্চুরিয়ালে করি:
hg clone -r 3 /path/to/repository
আমি কীভাবে সুনির্দিষ্ট সংশোধন সহ গিট সংগ্রহস্থলটির ক্লোন করতে পারি, যেমনটি আমি সাধারণত মার্চুরিয়ালে করি:
hg clone -r 3 /path/to/repository
উত্তর:
আপডেট 2 যেহেতু নীচে বর্ণিত গিট 2.5.0 বৈশিষ্ট্যটি কনফিগারেশন ভেরিয়েবলের সাথে সার্ভার সাইডে সক্ষম করা যেতে পারে uploadpack.allowReachableSHA1InWant
, এখানে গিটহাব বৈশিষ্ট্য অনুরোধ এবং গিটহাব এই বৈশিষ্ট্যটি সক্ষম করার প্রতিশ্রুতিবদ্ধ । নোট করুন যে কিছু গিট সার্ভারগুলি ডিফল্টরূপে এই বিকল্পটি সক্রিয় করে থাকে, যেমন বিটবকেট সার্ভার এটি সংস্করণ 5.5+ থেকে সক্ষম করেছে । কীভাবে কনফিগারেশন বিকল্পটি সক্রিয় করতে হয় তার একটি উদাহরণ জানতে স্ট্যাকেক্সচেঞ্জে এই উত্তরটি দেখুন ।
আপডেট 1 গিট সংস্করণগুলির 1.7 < v < 2.5
জন্য গাইট ক্লোন এবং গিট রিসেট ব্যবহার করুন, বৈভব বাজপাইয়ের উত্তরে বর্ণিত
আপনি যদি পুরো সংগ্রহ সংগ্রহ করতে চান না তবে আপনার সম্ভবত ব্যবহার করা উচিত নয় clone
। আপনি যে শাখাটি আনতে চান তা চয়ন করতে আপনি সর্বদা সবেমাত্র ব্যবহার করতে পারেন। আমি কোনও এইচজি বিশেষজ্ঞ নই তাই এর বিশদ জানি না -r
তবে গিট এ আপনি এরকম কিছু করতে পারেন।
# 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 fetch origin <SHA1>
১.it গিট দিয়ে, কাজ করেনি, যেমনটি @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]
যেখানে চান ইতিহাসের রেড সংখ্যা হ'ল এন ব্যবহার করতে পারেন। যাহোক:
--depth
নির্দিষ্ট ইতিহাসের সংখ্যার সংক্ষিপ্ত ইতিহাসের সাথে একটি অগভীর ক্লোন তৈরি করুন। অগভীর সংগ্রহশালার অনেকগুলি সীমাবদ্ধতা রয়েছে (আপনি এটির কাছ থেকে ক্লোন করতে বা আনতে পারবেন না, এখান থেকে চাপতেও পারবেন না) তবে আপনি যদি দীর্ঘ ইতিহাসের সাথে কেবলমাত্র একটি বৃহত প্রকল্পের সাম্প্রতিক ইতিহাসে আগ্রহী হন এবং আপনি চান প্যাচ হিসাবে সংশোধন পাঠান।
কেবল জিনিসগুলি যোগ করতে হবে (গিট ভি। 1.7.2.1):
git clone
যেখানে আপনি রেপো চান সেখানে নিয়মিত করুন (সব কিছু আজ পর্যন্ত পাওয়া যায় - আমি জানি, যা চেয়েছিল তা নয়, আমরা সেখানে যাচ্ছি) git checkout <sha1 rev>
আপনি চান রেভ এরgit reset --hard
git checkout -b master
master
করে তাতে পরিবর্তন করে।
git reset --hard
? এর জন্য দস্তাবেজগুলি "সূচি এবং কার্যনির্বাহী গাছ পুনরায় সেট করে। <কমিট <> যেহেতু কার্যকারী ট্রিতে ট্র্যাক করা ফাইলগুলিতে কোনও পরিবর্তন [যা এখন হেডের ডিফল্ট, যা এখন রয়েছে <sha1 rev>
] বাতিল করা হয়।" তবে এই মুহুর্তে আমরা ক্লোনিংয়ের পরে কোনও পরিবর্তন আনিনি, তবে উদ্দেশ্য কী? এটি কি বর্তমান শাখাটি কেটে যায় <sha1 rev>
?
টিএল; ডিআর - আপনি যে প্রতিশ্রুতিটি আপ করতে চান এবং তার মধ্যে আনা কমান্ডটিতে ট্যাগটি ব্যবহার করতে চান তার বিরুদ্ধে উত্স ভান্ডারে কেবল একটি ট্যাগ তৈরি করুন। আপনি পরে ক্লিন আপটি মূল রেপো থেকে ট্যাগটি মুছতে পারেন।
ঠিক আছে, এটি ২০১৪ এবং মনে হচ্ছে চার্লস বেইলির গৃহীত উত্তর ২০১০ সালের থেকে ভাল এবং সত্যই এখন পুরানো এবং অন্যান্য উত্তরগুলির বেশিরভাগ (সমস্ত?) ক্লোনিংয়ের সাথে জড়িত, যা অনেকে এড়াতে পারবেন বলে আশা করছেন।
নিম্নলিখিত সমাধানটি ওপি এবং আরও অনেকে যা খুঁজছেন তা অর্জন করে, যা ইতিহাস সহ কোনও সংগ্রহশালার অনুলিপি তৈরির উপায়, তবে কেবল একটি নির্দিষ্ট প্রতিশ্রুতি পর্যন্ত।
স্থানীয় রেপো (যেমন, অন্য ডিরেক্টরিতে একটি সংগ্রহস্থল) নির্দিষ্ট বিন্দু পর্যন্ত ক্লোন করতে আমি গিট সংস্করণ ২.১.২ সহ যে কমান্ডগুলি ব্যবহার করেছি তা এখানে:
# 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]
কমিট হ্যাশ দেখতে এই "45ef55ac20ce2389c9180658fdba35f4a663d204" এর মতো দেখাচ্ছে
উপরের উত্তরগুলির মধ্যে 2 টি ব্যবহার করে ( নির্দিষ্ট সংশোধন / চেঞ্জসেটের সাহায্যে গিট সংগ্রহস্থল কীভাবে ক্লোন করবেন? এবং কীভাবে সুনির্দিষ্ট সংশোধন / চেঞ্জসেটের সাহায্যে গিট সংগ্রহস্থলটি ক্লোন করতে পারবেন? ) আমাকে একটি সংশোধনবাদী উপস্থিত হতে সহায়তা করেছিল। আপনি যদি একটি বিন্দু পর্যন্ত ক্লোন করতে চান, তবে সেই পয়েন্টটি কেবল একটি 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 $ গিট আনতে স্থানীয়_কপি উত্স_পয়েন্ট দূরবর্তী: গণনা অবজেক্টস: 45493, সম্পন্ন। রিমোট: কম্প্রেসিং অবজেক্টস: 100% (15928/15928), সম্পন্ন। রিমোট: মোট 45493 (ডেল্টা 27508), পুনঃব্যবহৃত 45387 (বদ্বীপ 27463) প্রাপ্ত সামগ্রী: 100% (45493/45493), 53.64 মাইবি | 50.59 MiB / s, সম্পন্ন হয়েছে। ডেল্টাস সমাধান: 100% (27508/27508), সম্পন্ন। / Var / www / এইচটিএমএল / ইউআই থেকে * শাখার উত্স_পয়েন্ট -> FETCH_HEAD * [নতুন শাখা] উত্স_পয়েন্ট -> উত্স / উত্স_পয়েন্ট
এখন আমার ক্ষেত্রে, আমার তখন গিটল্যাবের উপরে ফিরে আসা দরকার ছিল, তাজা রেপো হিসাবে আমি করেছি
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>
আমি এই স্নিপেটটি কোনও সংশোধন ট্যাগ, শাখা বা হ্যাশ বন্ধ করতে জিএনইউ মেকের সাথে ব্যবহার করি
এটি গিট সংস্করণ 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
) কে প্রচলিত নাম "উত্স" এর পরিবর্তে কিছু ক্রিপ্টিক sha1 ক্রম বলা হবে। অন্য কথায়, <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