গিট দিয়ে নির্দিষ্ট ডিরেক্টরি কীভাবে টানবেন


193

গিট সহ আমার একটি প্রকল্প রয়েছে এবং আমি কেবল একটি নির্দিষ্ট ডিরেক্টরি ক্লোন করতে বা টানতে চাই যেমন মাইপ্রজেক্ট / জাভাস্ক্রিপ্ট যেমন সাবভার্সন করে।
কিছু পরিবর্তন করুন, প্রতিশ্রুতিবদ্ধ এবং আবার পিছনে ধাক্কা।
এটা সম্ভব?


3
বিক্ষিপ্ত চেকআউট আপনার আগ্রহের হতে পারে (যদিও আপনি এখনও সবকিছু আনতে প্রয়োজন): দেখুন stackoverflow.com/questions/2416815/...
VonC

উত্তর:


205
  1. আপনার রেপো কপির শীর্ষে সিডি করুন
  2. git fetch
  3. git checkout HEAD path/to/your/dir/or/file

    • ডিরেক্টরিতে " path/..." ইন (3) যেখানে আপনার " .../file" রপোরো মূলের নীচে ডিরেক্টরিতে শুরু হয়

    • লক্ষ্য করুন যে "হেড" এর পরিবর্তে একটি নির্দিষ্ট কমিটের হ্যাশ কোড ব্যবহার করা যেতে পারে এবং তারপরে আপনি সেই প্রতিশ্রুতি সম্পর্কিত নির্দিষ্ট সংশোধন (ফাইল) বা সংশোধন (দির) পাবেন।


1
ঠিক বুঝতে পেরেছি আমি প্রশ্নটি ভুল বুঝেছি। আমার জবাব পরিবর্তে কীভাবে একটি একক ফাইল চেকআউট করবেন তা সম্বোধন করে, যা পরে সংশোধন ও প্রতিশ্রুতিবদ্ধ হতে পারে।
ভেরোগিশন

আপনি প্রশ্নের শিরোনাম সম্বোধন করেছেন, যা যথেষ্ট ভাল। এটি কেবল আমাকে বাঁচিয়েছে, যতদূর আমি উদ্বিগ্ন, এটি সঠিক উত্তর - বিশেষত যেহেতু এই ইস্যুটির জন্য গুগলে এটি শীর্ষে ছিল।
মর্গন

21
এটি এখনও পুরো রেপো পায় যদিও। আকারের 2 জিবি প্রকল্পের জন্য, এটি বেশি সময় সাশ্রয় করে না ..
পিথিকোস

5
যারা এই মন্তব্যগুলি পড়েন এবং জানেন না যে এটি কীভাবে প্রশ্নের উত্তর দেয় না, এই সমাধানটি যা আপনাকে কেবলমাত্র সেই একটি ফোল্ডারের একটি অনুলিপি দেয়, তবে এটি একটি কার্যকরী অনুলিপি নয়, যার অর্থ আপনি পরিবর্তন করতে পারবেন না এবং পুনরায় পরিবর্তন করতে পারবেন না -commit। সুতরাং @ মরগন যেমন বলেছিলেন, এটি প্রশ্নের শিরোনাম সম্বোধন করে (আপনি কেবল একটি দির টানতে পারেন), তবে প্রশ্নের মূলটির উত্তর দেয় না ("কিছু পরিবর্তন করুন, প্রতিশ্রুতি দিন এবং আবার পিছনে ঠেলাবেন")।
এমএসবি

@ স্ট্যানহোলডনাক এর --প্রয়োজন নেই। এটি বিটকে তারপরে পাথ হিসাবে ব্যাখ্যা করার জন্য বাধ্য করে। সুতরাং, হ্যাঁ, আপনি যে ফাইলটি --helpচেকআউট করতে চান সেই ফাইলটি যদি এই হাইফেনগুলির সাথে উপসর্গ করা প্রয়োজন হয়:git checkout HEAD -- --help
টিম ভিসি

105

একটি খালি ডিরেক্টরিতে:

git init
git remote add [REMOTE_NAME] [GIT_URL]
git fetch REMOTE_NAME
git checkout REMOTE_NAME/BRANCH -- path/to/directory

এটি কাজ করে যদি আপনি কেবল স্থানীয় ফাইল প্রতিস্থাপন করতে কোনও ফাইলের দূরবর্তী সংস্করণ ব্যবহার করতে চান, আমার মনে হয়
জন

এই ফোল্ডারটিও টানুন, কীভাবে ফোল্ডারটি ডনলোড করবেন না, তবে কেবল ফোল্ডারের ভিতরেই জিনিসগুলি?
আল কাসিহ

কমান্ডের কোনও প্রয়োজন fetchবা checkoutকমান্ড নেই, remote addপুরো মাস্টার শাখাটি পেতে আমরা কেবল কমান্ডের পরে পুল অনুরোধ করতে পারি।
ইকরা।

2
যেমন পিথকোস গ্রহণযোগ্য উত্তরে উল্লেখ করেছেন, এই উত্তরটি আপনার স্থানীয় মেশিনে পুরো দূরবর্তী সংগ্রহটি ডাউনলোড করবে। শিংগার উত্তর সর্বাধিক স্পষ্ট - কোনও রেপোর কোনও অংশ দূর থেকে টানানোর কোনও উপায় নেই। যাইহোক, যারা পুরো আনার ব্যান্ডউইদথকে আপত্তি করে না এবং স্থানীয় ক্যাশে অংশের একটি কার্যকরী অনুলিপি তৈরি করতে আগ্রহী তাদের পক্ষে গ্রহণযোগ্য উত্তর আপনাকে কীভাবে তা দেখায়। তবে আমি কেবল এটি পরিষ্কার করতে চাই যে রেপোর পুরো ইতিহাসটি (সংকীর্ণ বিন্যাসে) আপনার মেশিনে ডাউনলোড করতে হবে।
গ্যাবে হালমার

39

অনেক উত্তর খোঁজার পরেও, খুঁজে না পাওয়া, হাল ছেড়ে দেওয়া, আবার চেষ্টা করার পরে অবশেষে আমি এর অন্য একটি থ্রেডে এর সমাধান পেয়েছি:

একটি ফোল্ডার ছাড়া সমস্ত কীভাবে গিট-টান করতে হবে

কী আছে তা অনুলিপি করতে:

git init
git remote add -f origin <url>
git config core.sparsecheckout true
echo <dir1>/ >> .git/info/sparse-checkout
echo <dir2>/ >> .git/info/sparse-checkout
echo <dir3>/ >> .git/info/sparse-checkout
git pull origin master

ওপি যা চায় তা করতে (কেবল একটি দিরের উপর কাজ করুন), .git/info/sparse-checkoutউপরের পদক্ষেপগুলি করার সময় কেবল সেই একটি দিরের সাথে যুক্ত করুন ।

@Cforbish কে অনেক ধন্যবাদ!


2
আমি এটি এখানে বেশিরভাগ পোস্ট করছি কারণ যখনই আমি গুগল করার চেষ্টা করি যে এটি কীভাবে করা যায়, এটি শীর্ষ ফলাফল এবং সেই থ্রেডটি প্রদর্শিত হওয়ার কাছাকাছিও নয়। :( আমি খারাপ কপি-পেস্টিং অনুভব করছি তবে আমি এটি এত ভাল অনুশীলন গণনা করছি?
এমএসবি

1
এটিই একমাত্র পরিষ্কার সমাধান। উপরের উত্তর চেষ্টা করে দেখুন। অন্যান্য উত্তরগুলির সাথে আমি আমার শাখাটি পরীক্ষা করে দেখার পরে, আমি টানতে পারলাম না, এবং বেশ কয়েকটি নতুন ফাইল ছিল যাতে প্রতিশ্রুতিবদ্ধ হওয়া দরকার। এই সমাধানের সাথে সবকিছু ঠিক দেখাচ্ছে। তবে দ্রষ্টব্য: যে শাখাটি যাচাই করা হয়েছিল তা নির্বিশেষে গিটটি ভাববে যে আপনি আছেন master। কেবলমাত্র আপনি git branch --set-upstream-to=origin/<branch>সঠিকভাবে
টানতে যাচ্ছেন

12

এটা সম্ভব না. আপনার সমস্ত সংগ্রহস্থল বা কিছুই টানতে হবে।


1
যদিও আপনাকে সবকিছু আনতে হবে, তবুও কোনও বিচ্ছিন্ন চেকআউট কার্যকারী গাছের প্রতি টান কি এই ক্ষেত্রে আগ্রহী হবে? দেখুন stackoverflow.com/questions/2416815/...
VonC

10
শুধু এটি যুক্ত করার জন্য, আপনি কেবল ডিরেক্টরিটি টানতে না পারার কারণ হ'ল গিট ডাটা সিমেটিক ট্র্যাকিং ব্যবহার করে, শব্দার্থ ট্র্যাকিং ফাইল করে না, সুতরাং আপনি উত্সকে কিছু না বলেই বিন্যাসের মধ্যে ফাইল (এবং অন্যান্য ডেটা) ফাইলের মধ্যে এবং বাইরে সরিয়ে নিতে পারেন source ট্র্যাকিং সিস্টেম (যতক্ষণ না আপনি অবশ্যই আপডেট করেন)) এর কারণে, কোডটি ডিরেক্টরিগুলিও নির্বিঘ্নে প্রবেশ করতে এবং বাইরে চলে যেতে পারে, সুতরাং কেবল একটি ডিরেক্টরিকে দখল করা ততটা অর্থবোধ করে না। আশাকরি এটা সাহায্য করবে.
সর্বশক্তিমান

12
@ ওমনিপোটেন্ট এন্টিটি দুঃখিত তবে আইএমএইচও এটির কোনও অর্থ নেই। বাস্তবায়ন ব্যবহার সীমাবদ্ধ করা উচিত নয়। গিট কী ডিরেক্টরিগুলি (কমপক্ষে স্থানীয় ওয়ার্কিং কপি তৈরি করার সময়) জানে তাই এটি সার্ভারে কিছু অনুরূপ ক্রিয়াকলাপ সম্পাদন করতে পারে না এবং কেবল প্রাসঙ্গিক আউটপুট প্রেরণ করতে পারে না no মঞ্জুর, এটি বর্তমানে কার্যকর করা হয়নি তবে এটি কোনও বৈশিষ্ট্যের অভাবের কারণে, কোনও মৌলিক অসম্ভবতা নয়। ব্যক্তিগতভাবে আমি মনে করি এটি একটি অত্যন্ত গুরুত্বপূর্ণ বৈশিষ্ট্য তবে ওহে, এটি সম্ভব কারণ যখন আমি সম্ভব তখন গিট এড়িয়ে চলি।
বেসিক

10

সম্ভবত এই আদেশটি সহায়ক হতে পারে:

git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit  path/to/your/dir/or/file > files.tar

"এট ভয়েলি"


2
সংরক্ষণাগার উদ্দেশ্যে এই ফাইলের একটি নির্দিষ্ট ডিরেক্টরি ডাউনলোড করে, এটি আপনি সংশোধন করতে এবং পিছনে ঠেলে দিতে পারেন এমন একটি অনুলিপি টানবে না।
leetNightshade

খুব ঠান্ডা. সম্ভবত ওপিটির সমাধান হিসাবে গ্রহণযোগ্য নয় তবে এটি আসলে কী আমি পরে যেহেতু আমি শুধু একটি বড় রেপো আমি স্পষ্টভাবে আনতে চাই না একটি বড় ফোল্ডারের বিষয়বস্তু অনুসন্ধান করতে হবে, এবং আমি পরিবর্তন প্রয়োজন হবে না ছিল / ধাক্কা।
অলিভার

7

আপনি যদি কোনও ডিরেক্টরিতে প্রবেশ না করেই সর্বশেষ পরিবর্তনগুলি পেতে চান তবে আপনি এটি করতে পারেন:

$ git -C <Path to directory> pull

4

git clone --filter গিট 2.19 থেকে

এই বিকল্পটি প্রকৃতপক্ষে সার্ভার থেকে অপ্রয়োজনীয় অবজেক্টগুলি আনতে চলে যাবে।

আমি বর্তমান সমর্থন স্থিতি বিশদটি বিশদে একটি উত্তর লিখেছি: আমি কীভাবে কেবল গিট সংগ্রহস্থলের একটি উপ-ডিরেক্টরিকে ক্লোন করব?

এটি খুব সম্ভবত যে git cloneঅঞ্চলে যা কিছু বাস্তবায়িত হবে তারও git pullএনালগ থাকবে।


1

এই কাজগুলি চেষ্টা করে পরীক্ষিত!

mkdir <directory name> ;  //Same directory name as the one you want to pull
cd <directory name>;
git remote add origin <GIT_URL>;
git checkout -b '<branch name>';
git config core.sparsecheckout true;
echo <directory name>/ >> .git/info/sparse-checkout;
git pull origin <pull branch name>

আশা করি এটি সহায়ক ছিল!


0

কখনও কখনও, আপনি কেবল বিচ্ছিন্নতার মধ্য দিয়ে যাওয়ার দৃ going়বিধি ছাড়াই ফাইলগুলির পূর্ববর্তী অনুলিপিগুলি একবার দেখতে চান।

এই জাতীয় ক্ষেত্রে, কোনও সংগ্রহস্থলটির ক্লোন তৈরি করা এবং আপনার আগ্রহী যে নির্দিষ্ট প্রতিশ্রুতিটি পরীক্ষা করতে চান এবং যে ক্লোন করা সংগ্রহস্থলের সাব-ডিরেক্টরিতে একবার দেখে তা পরীক্ষা করা ঠিক তত সহজ। সমস্ত কিছু স্থানীয় হওয়ার কারণে আপনি যখন কাজটি শেষ করেন আপনি কেবল এই ক্লোনটি মুছতে পারেন।


-1

তাত্ত্বিক ফাইলের পাথ এবং আমার মতো উদাহরণগুলির সাথে লড়াইয়ের জন্য, এখানে একটি বাস্তব বিশ্বের উদাহরণ: মাইক্রোসফ্ট গিট হাবের উপর তাদের ডক্স এবং উদাহরণ সরবরাহ করে, দুর্ভাগ্যক্রমে তারা এই সমস্ত সংগ্রহস্থলগুলিতে বিশাল আকারের বিষয়ের জন্য তাদের উদাহরণ ফাইলগুলি সংগ্রহ করে:

https://github.com/microsoftarchive/msdn-code-gallery-community-s-z

আমি কেবল মাইক্রোসফ্ট ডায়নামিক্স জেএস ফাইলগুলিতে আগ্রহী ছিলাম

msdn-code-gallery-community-s-z/Sdk.Soap.js/

সুতরাং আমি নিম্নলিখিতটি করেছিলাম

একটা তৈরি কর

msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout

ডিস্কে আমার সংগ্রহস্থল ফোল্ডারে ফাইল দিন

git sparse-checkout init

সেই ডিরেক্টরিতে উইন্ডোতে সেন্টিমিডি ব্যবহার করে

ফাইলের বিষয়বস্তু

msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout

হয়

Sdk.Soap.js/*

অবশেষে একটি

git pull origin master
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.