উত্তর:
অনুযায়ী কি একটি "Git রপ্তানি" (মত "SVN রপ্তানি")?
আপনি এটির git checkout-indexজন্য ব্যবহার করতে পারেন , এটি নিম্ন স্তরের কমান্ড, যদি আপনি সবকিছু রফতানি করতে চান তবে আপনি ব্যবহার করতে পারেন -a,
git checkout-index -a -f --prefix=/destination/path/
ম্যান পেজগুলি উদ্ধৃত করতে:
চূড়ান্ত "/" [প্রিফিক্সে] গুরুত্বপূর্ণ। রফতানির নামটি আক্ষরিকভাবে নির্দিষ্ট স্ট্রিংয়ের সাথে উপসর্গযুক্ত।
আপনি যদি একটি নির্দিষ্ট ডিরেক্টরি রফতানি করতে চান তবে কিছু কৌশল জড়িত রয়েছে। কমান্ডটি কেবল ফাইল নেয়, ডিরেক্টরি নয়। ডিরেক্টরিতে এটি প্রয়োগ করতে, 'ফাইন্ড' কমান্ডটি ব্যবহার করুন এবং গিটে আউটপুটটি পাইপ করুন।
find dirname -print0 | git checkout-index --prefix=/path-to/dest/ -f -z --stdin
ম্যান পৃষ্ঠাগুলি থেকে:
স্বজ্ঞাততা এখানে লক্ষ্য নয়। পুনরাবৃত্তিযোগ্যতা।
GIT_WORK_TREE=../path/to/place git checkout
git worktree(নীচে দেখুন) ইমো হ'ল আজকের প্রচলিত উত্তর এবং এটি এখানে যুক্ত হতে পারে।
আরেকটি সমাধান যা কিছুটা পরিষ্কার - কেবল একটি ভিন্ন কাজের গাছ নির্দিষ্ট করুন।
আপনার হেড থেকে (সূচী নয়) নির্দিষ্ট আউট ডিরেক্টরিতে সমস্ত কিছু পরীক্ষা করে দেখার জন্য:
git --work-tree=/path/to/outputdir checkout HEAD -- .
আপনার হেড থেকে একটি নির্দিষ্ট ডিরেক্টরিতে একটি উপ-ডিরেক্টরি বা ফাইল চেকআউট করতে:
git --work-tree=/path/to/outputdir checkout HEAD -- subdirname
--work-tree=/home/thomasg/okcopyহবে --work-tree=~/okcopy( অর্থাত্ সম্ভবত একই গিট গাছের ভিতরে বসে কোনও আপেক্ষিক পথ ব্যবহার করা খুব কার্যকর কাজ করে তবে এইভাবে পাগলামি এবং git statusরেলিহিয়ানের আউটপুট রয়েছে)
git statusএরপরে প্রচুর মোডগুলি দেখায় (সম্ভবতঃ সূচকটি এখন অন্য ডিরেক্টরিতে মেলে না তবে সাধারণ কাজের গাছের সাথে)। git resetএটি একটি ভাল অবস্থায় ফিরে পেয়েছে।
git statusপরিমাণে অনেকগুলি মোড দেখা যায়, এবং git resetকোনও সহায়তা করে না। আমাকে git checkout -f HEADআমার রেপোর অবস্থা পুনরুদ্ধার করতে হয়েছিল।
fatal: This operation must be run in a work tree
git resetমূল কার্যকারী গাছটিকে তৃপ্তিতে ফিরিয়ে আনার জন্য পর্যাপ্ত পরিমাণ রয়েছে । নিরাপদে কোনো SHA1 এ, শাখা, অথবা ট্যাগে সংগ্রহস্থলের সাব রপ্তানি করতে থাকলে প্রধান কাজ গাছ পরিবর্তন দেখতে চার্লস বেইলির কুখ্যাত git archiveসমাধান । একইভাবে, একই সাথে একাধিক শাখাকে নিরাপদে চেকআউট করতে, নতুন git worktree addসাবকম্যান্ডটি আপনার বন্ধু।
একটি একক ফাইলের জন্য:
git show HEAD:abspath/to/file > file.copy
SHA1 IDযে এটি সহজেই পাওয়া যায় gitk। যদি কেবলমাত্র সেই ফাইলটি একটি অস্থায়ী স্থানে (যেমন showgit show 82e54378856215ef96c5db1ff1160a741b5dcd70:MyProj/proguard/mapping.txt > myproj_mapping.txt
উপরের সমাধানগুলি আমার পক্ষে কার্যকর হয়নি কারণ আমার গাছের একটি নির্দিষ্ট ট্যাগযুক্ত সংস্করণ পরীক্ষা করা দরকার। এভাবেই কীভাবে cvs exportব্যবহার করা উচিত। git checkout-indexএটি ট্যাগ যুক্তি গ্রহণ করে না, কারণ এটি সূচী থেকে ফাইলগুলি পরীক্ষা করে। git checkout <tag>কাজের গাছ নির্বিশেষে সূচি পরিবর্তন করবে, সুতরাং আমার মূল গাছটি পুনরায় সেট করতে হবে। আমার জন্য যে সমাধানটি কাজ করেছিল তা হ'ল সংগ্রহস্থলটিকে ক্লোন করা। ভাগ করা ক্লোনটি বেশ দ্রুত এবং অতিরিক্ত অতিরিক্ত জায়গা নেয় না। .gitইচ্ছা হলে ডিরেক্টরির সরানো হতে পারে।
git clone --shared --no-checkout <repository> <destination>
cd <destination>
git checkout <tag>
rm -rf .git
গিগের নতুন সংস্করণগুলিতে git clone --branch <tag>নির্দিষ্ট ট্যাগটি স্বয়ংক্রিয়ভাবে চেক আউট করতে সহায়তা করা উচিত :
git clone --shared --branch <tag> <repository> <destination>
rm -rf <destination>/.git
git --work-tree=/path/to/outputdir checkout <tag> -- .তোমার জন্য কাজ করিনি?
আপনি যদি নিজের বৈশিষ্ট্যের অধীনে কাজ করছেন এবং মাস্টারে ফিরে চেকআউট করতে না চান, আপনি চালাতে পারেন:
cd ./myrepo
git worktree add ../myrepo_master master
git worktree remove ../myrepo_master
এটি শাখা কমিটি ../myrepo_masterসহ ডিরেক্টরি তৈরি করবে master, যেখানে আপনি কাজ চালিয়ে যেতে পারেন
git --work-tree=/path/to/outputdir checkout HEAD -- .এটি সূচকে কিছু করতে অস্বীকার করে, কেবল নির্বাচিত শাখাকে নির্দিষ্ট স্থানে অনুলিপি করে (একটি .git ফাইল যুক্ত করে)।
myrepo_masterডিরেক্টরিটি সরান
git worktree remove ../myrepo_master
অ্যাড্রিয়ানের জবাব "মারাত্মক: এই ক্রিয়াকলাপটি অবশ্যই একটি কাজের গাছে চালানো উচিত।" নিম্নলিখিতটি আমাদের জন্য কাজ করেছে।
git worktree add <new-dir> --no-checkout --detach
cd <new-dir>
git checkout <some-ref> -- <existing-dir>
মন্তব্য:
--no-checkout নতুন ওয়ার্ক্ট্রি তে কোনও কিছুই চেকআউট করবেন না।--detach নতুন ওয়ার্ক্রিটের জন্য একটি নতুন শাখা তৈরি করবেন না।<some-ref>যে কোনও রেফের সাথে কাজ করে, উদাহরণস্বরূপ, এটি সাথে কাজ করে HEAD~1।git worktree prune।ছাড়াও @ hasen এর উত্তর । চেকআউটে ফাইলগুলি তালিকাবদ্ধ করতে , আপনি পছন্দ মতো git ls-filesপরিবর্তে ব্যবহার করতে চাইতে পারেন find:
git ls-files -z *.txt | git checkout-index --prefix=/path-to/dest/ -f -z --stdin
-z! আপনি যে স্ক্রিপ্টটি সরবরাহ করেছেন তা বেশ ভাল
আমি এটি অর্জন করতে একটি গিট ওরফে সংজ্ঞা দিয়েছি (আমি এই প্রশ্নটি পাওয়ার আগে))
এটি একটি ছোট বাশ ফাংশন যা বর্তমান পথটি সংরক্ষণ করে, গিট রেপোতে স্যুইচ করে, একটি চেকআউট করে এবং যেখানে শুরু হয়েছিল সেখানে ফিরে আসে।
গিট চেকটো বিকাশ করুন my / আমার_প্রজেক্ট_গিট
এই উদাহরণস্বরূপ "~ / আমার_প্রজেক্ট_জিট" ডিরেক্টরিতে বিকাশকারী শাখাটি চেকআউট করবে।
এটি অভ্যন্তরের উপ নাম কোড ~/.gitconfig:
[alias]
checkTo = "!f(){ [ -z \"$1\" ] && echo \"Need to specify branch.\" && \
exit 1; [ -z \"$2\" ] && echo \"Need to specify target\
dir\" && exit 2; cDir=\"$(pwd)\"; cd \"$2\"; \
git checkout \"$1\"; cd \"$cDir\"; };f"
অস্থায়ী ডিরেক্টরিতে একটি শাখা পরীক্ষা করার জন্য আমি এই উপনামটি ব্যবহার করছি:
[alias]
cot = "!TEMP=$(mktemp -d); f() { git worktree prune && git worktree add $TEMP $1 && zsh -c \"cd $TEMP; zsh\";}; f" # checkout branch in temporary directory
ব্যবহার:
git cot mybranch
তারপরে আপনাকে অস্থায়ী ডিরেক্টরিতে একটি নতুন শেল ফেলে দেওয়া হবে যেখানে আপনি শাখায় কাজ করতে পারবেন। এমনকি আপনি এই ডিরেক্টরিতে গিট কমান্ড ব্যবহার করতে পারেন।
আপনার কাজ শেষ হয়ে গেলে ডিরেক্টরিটি মুছুন এবং চালান:
git worktree prune
এটি নতুন ওয়ার্কট্রি যুক্ত করার আগে, উলেফে স্বয়ংক্রিয়ভাবে সম্পন্ন হবে।