গিট: অন্য একটি শাখা থেকে ডিরেক্টরিতে সমস্ত ফাইল অনুলিপি করুন


188

অন্য শাখা থেকে কীভাবে আমি সমস্ত ফাইল একটি ডিরেক্টরিতে অনুলিপি করব? আমি সেই ডিরেক্টরিতে সমস্ত ফাইল তালিকা করে রাখতে পারি

git ls-tree master:dirname

তারপরে আমি সমস্ত ফাইল পৃথকভাবে অনুলিপি করতে পারি

git checkout master -- dirname/filename

তবে, ওয়াইল্ডকার্ড ব্যবহার করা এখনও পর্যন্ত মোট ব্যর্থ fail এটি কিছুই করে না:

git checkout master -- dirname/*.png

যদিও আমি অনুমান করি যে এটি করার জন্য আমি ব্যাশ স্ক্রিপ্টটি ব্যবহার করতে পারি, সেখানে একটি সহজ উপায় থাকতে হবে, তাই না?

উত্তর:


289

আপনি যেমন গাছের চারপাশে ফাইলগুলি সরানোর চেষ্টা করছেন না, আপনি কেবল ডিরেক্টরিটি চেকআউট করতে সক্ষম হবেন:

git checkout master -- dirname

2
আমি যদি অনুলিপি করা ফাইলগুলির জন্য প্রতিশ্রুতিবদ্ধ বার্তাগুলি ধরে রাখতে চাইতাম তবে কী হবে?
টোটেলগুলি

2
@ হোটেলগুলি, কঠোরভাবে বলতে গেলে ফাইলগুলির সাথে সম্পর্কিত কোনও প্রতিশ্রুতি বার্তা নেই; কমিট বার্তাটি কমিটমেন্ট অবজেক্টের সাথে যুক্ত। আপনি যা চান তা এইটাই অনুমান করছি: git checkout master -- dirname; git add dirname; git commit -c $COMMIT_SHA1 --reset-author;যেখানে $COMMIT_SHA1হতে পারে branch_aএবং সেই প্রতিশ্রুতিবদ্ধ বস্তুটি হতে পারে যার মধ্যে আপনার প্রতিশ্রুতিবদ্ধ বার্তা রয়েছে। আমি সাম্প্রতিক পরিবর্তনের সাথে প্রতিশ্রুতিবদ্ধভাবে প্রোগ্রামটি কীভাবে নির্ধারণ করব তা আমি জানি নাdirname
আলেকজান্ডার বার্ড

1
এটি একটি খুব অদ্ভুত পার্শ্ব প্রতিক্রিয়া আছে। এটি অনুলিপি dirnameকরে, তবে এটি শাখার যে কোনও ফাইলও অনুলিপি .gitignoreকরে master। কোন ধারণা কেন?
মিলিমেট্রিক

4
আরেকটি পার্শ্ব প্রতিক্রিয়া আমি মনে করি বর্তমান শাখার যদি আপনি যে শাখায় যাচাই করছেন (যে কোনও নির্দিষ্ট লক্ষ্য ফোল্ডারে) যাচাই করে যাচ্ছেন তাতে যদি অতিরিক্ত ফাইল না থাকে তবে এটি মূলত তাদের একত্রিত করবে - সম্ভবত এটি যদি পূর্বসূরি হয় তবে? আমি শর্তগুলি সম্পর্কে ঠিক নিশ্চিত নই তবে আপনি যদি শাখা A তে 20 ফাইল এবং শাখা বিতে 20 ফাইল এবং তার মধ্যে 10 টিরই একই ফাইলের নাম রয়েছে তবে আপনি 30 ফাইল দিয়ে শেষ করেন (অন্তত আমার ক্ষেত্রে যেখানে শাখা এ ব্রাঞ্চ বি এর পূর্বপুরুষ)
কোডারকে ৩০

@ হোটেলগুলি গিট কমান্ডটি পরীক্ষা করে দেখুন cherry-pick। এটি অন্যান্য শাখা থেকে করা কমিটগুলি প্রয়োগ করে তবে কেবল যে ফাইলগুলি আপনি চান প্রতিশ্রুতিতে পরিবর্তন হয়েছিল।
cs01

18

যদি পাথগুলিতে কোনও স্থান নেই এবং আপনি আগ্রহী হন, যেমন আমি যেমন ছিল কেবল নির্দিষ্ট এক্সটেনশনের ফাইলগুলিতে, আপনি ব্যবহার করতে পারেন

git checkout otherBranch -- $(git ls-tree --name-only -r otherBranch | egrep '*.java')

4
এটি অত্যন্ত দুঃখের বিষয় যে গিটটি সরাসরি এই ফাংশনটি সমর্থন করে না। ঠিক ওপিটির মতোই, আমি ভাবতাম এটি এমন কিছু হবেgit checkout master -- *.c
গ্রেগরি কুহান

1
এই উত্তরটি আমাকে উত্তর দিতে "আমাকে কীভাবে অন্য বর্তমান শাখা থেকে আমার বর্তমান কার্যকারী শাখায় প্রদত্ত প্যাটার্নের ফাইলগুলি চেকআউট করতে পারি?"
usr-local-ΕΨΗΕΛΩΝ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.