গিট ক্লোন: শুধু ফাইল, দয়া করে?


141

আমি একটি জিআইটি রেপো ক্লোন করতে চাই এবং একটি .gitডিরেক্টরি শেষ করতে চাই না । অন্য কথায় আমি কেবল ফাইলগুলি চাই। এই কাজ করতে একটি উপায় আছে কি?

git clone --no-checkoutআমি যা চাই তার ঠিক বিপরীত কাজ করেছে (আমাকে কেবল .gitডিরেক্টরিটি দিয়েছে)।

আমি কি করতে এমন একটি জন্য চেষ্টা করছি দূরবর্তী অর্থ এই হল রেপো, না একটি স্থানীয় এক, সদৃশ নয় "এর " (মত "SVN রপ্তানি") Git রপ্তানি কিভাবে একটি করতে " " (যদিও সমাধান হচ্ছে শেষ হতে পারে একই)।



@ গ্রেগ হিউগিল আমি একটি প্রত্যন্ত রেপো থেকে এটি করার চেষ্টা করছি। যদিও এটি এই প্রশ্নটিকে অনন্য করে তোলে কিনা তা নিশ্চিত নয়।
ড্যান রোজনস্টার্ক 18

1
যদিও একটি নতুন প্রশ্ন হল, কিন্তু আমি মনে করি এই চেক আউট মূল্য হল: stackoverflow.com/questions/11497457/...
eonil

1
আমার আপডেটের উত্তরটি দেখুন : git archiveএখন (Q4 2017) আরও সুনির্দিষ্ট এবং খালি ফোল্ডারগুলি অন্তর্ভুক্ত করবে না।
ভোনসি

1
আপনি স্বাগত জানাই। স্পষ্টতই, আপনার মন্তব্যটি পতাকাঙ্কিত এবং সরানো হয়েছে ... chat.stackoverflow.com/transcript/134259?m=39402889#39402889
ভোনসি

উত্তর:


75

গিট কমান্ড যা আপনি যা খুঁজছেন তার থেকে নিকটতম হবে git archiveগিট ব্যবহার করে এমন প্রকল্পের ব্যাক আপ নেওয়া
দেখুন : এতে সমস্ত ফাইল একটি সংরক্ষণাগারে অন্তর্ভুক্ত থাকবে (আপনি স্ক্রিপ্টটি ব্যবহার করছেন যদি সাবমডিউল সহ )git-archive-all

তারপরে আপনি সেই ফাইল সংরক্ষণ করতে পারবেন না কেবল কোনও ফাইলই আপনাকে ফিরিয়ে দিয়ে সেই সংরক্ষণাগারটি যে কোনও জায়গায় ব্যবহার করতে পারেন .git

git archive --remote=<repository URL> | tar -t

আপনার যদি প্রথম স্তর থেকে ফোল্ডার এবং ফাইলের প্রয়োজন হয়:

git archive --remote=<repository URL> | tar -t --exclude="*/*"

দূরবর্তী রেপোতে কেবলমাত্র প্রথম-স্তরের ফোল্ডারগুলি তালিকা করতে:

git archive --remote=<repository URL> | tar -t --exclude="*/*" | grep "/"

দ্রষ্টব্য: এটি গিটহাবের পক্ষে কাজ করে না (সমর্থিত নয়)

সুতরাং আপনার ক্লোন করতে হবে (ক্লোন ধাপটি দ্রুত করার জন্য অগভীর) এবং তারপরে স্থানীয়ভাবে সংরক্ষণাগারভুক্ত করুন :

git clone --depth=1 git@github.com:xxx/yyy.git
cd yyy
git archive --format=tar aTag -o aTag.tar

অন্য বিকল্পটি অগভীর ক্লোন করা (নীচে উল্লিখিত হিসাবে) করা, তবে .git ফোল্ডারটি অন্য কোথাও সন্ধান করা হবে।

git --git-dir=/path/to/another/folder.git clone --depth=1 /url/to/repo

রেপো ফোল্ডারে কেবল ফাইলটি অন্তর্ভুক্ত থাকবে .git

দ্রষ্টব্য: কমান্ডেরgit --git-dir একটি বিকল্প , না ।gitgit clone


গিট 2.14.X / 2.15 (Q4 2017) এর সাথে আপডেট করুন: এটি খালি ফোল্ডারগুলি এড়াতে নিশ্চিত করবে ।

" git archive", বিশেষত যখন প্যাথস্পেকের সাথে ব্যবহৃত হয়, খালি এটির আউটপুটে ডিরেক্টরি সঞ্চিত করে, যদিও গিট নিজে কখনও তা করেন না।
এটি স্থির করা হয়েছে।

দেখুন কমিট 4318094 দ্বারা (12 সেপ্টেম্বর 2017) রেনে Scharfe ( ``)
প্রস্তাবিত: জেফ কিং ( peff)
(দ্বারা একীভূত junio সি Hamano - gitster- মধ্যে কমিট 62b1cb7 , 25 সেপ্টেম্বর 2017)

archive: সংরক্ষণাগারীতে খালি ডিরেক্টরি যুক্ত করবেন না

যদিও গিটটি খালি ডিরেক্টরিগুলি ট্র্যাক করে না, git archiveকিছু সংরক্ষণাগারগুলিতে রাখার দ্বারা ট্রিক করা যায়।
যদিও এটি অবজেক্ট ডাটাবেস দ্বারা সমর্থিত, এটি সূচকে প্রতিনিধিত্ব করতে পারে না এবং এভাবে বন্যের মধ্যে এটি হওয়ার সম্ভাবনা কম।

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


4
এটি আমার পক্ষে কাজ করেছে। আমি আরও একটি জিনিস যোগ করতে হবে। আপনি যদি .git ফোল্ডারটি মোটেও চিন্তা করেন না, তবে আমি এই আদেশটি ব্যবহার করব:git --git-dir=/dev/null clone --depth=1 /url/to/repo
হিউম্যানস্কি

এটি .git ফোল্ডারটি সরিয়ে দেয় না
ওরফেভ

@ ভনসি আমি চেষ্টা করেছি: গিট --git-dir = / dev / নাল ক্লোন - ডিপথ = 1 / ইউআরএল / থেকে / রেপো
ওরফেভ

1
দৌড় git archive --remote=https://github.com/pornel/dssim.git @ | tar -tআমি পেয়েছি tar: This does not look like a tar archive। এটি কি গিটহাবের সাথে কাজ করে না? এছাড়াও, @মানে কি?
আন্দ্রে ওয়ার্ল্যাং

2
@ আন্দ্রে ওয়ার্ল্যাং years বছর পরে ... আমি এর থেকে খুব বেশি নিশ্চিত নই @: আমি এটি সরিয়ে দিয়েছি। এছাড়াও গিটহাব কোনও রিমোট সমর্থন করে না git archive: বিকল্প প্রস্তাব দেওয়ার জন্য আমি উত্তরটি সম্পাদনা করেছি।
ভোনসি


42

আপনি কেবলমাত্র কয়েকটি শেষ সংশোধনী পেতে অগভীর ক্লোন তৈরি করতে পারেন:

 git clone --depth 1 git://url

তারপরে হয় কেবল .git ডিরেক্টরি মুছুন বা git archiveআপনার গাছ রফতানি করতে ব্যবহার করুন ।


ক্লোনটি পুনরাবৃত্তি করে আপডেট করার সময়ে কীভাবে এই ত্রুটিটি রোধ করতে হবে: "মারাত্মক: গন্তব্য পথ 'এক্সওয়াইজেড' ইতিমধ্যে বিদ্যমান এবং এটি কোনও খালি ডিরেক্টরি নয়" "
সোহেল সি

1
@ সোহেলসি: হয় কোনও নতুন জায়গায় ক্লোন করুন বা পুরাতন ডিরেক্টরিটি সরিয়ে দিন। আপনি যদি নিজের স্থানীয় অনুলিপি আপডেট করতে চান তবে আপনি কেবল নতুন সংশোধনী আনতে আরও ভাল।
নিটল

3

কোনও ক্লোন কেন সম্পাদন করবেন না এবং তারপরে .gitডিরেক্টরিটি মুছবেন যাতে আপনার খালি কাজের কপি থাকে?

সম্পাদনা: বা আসলে কেন ক্লোন ব্যবহার করবেন? আপনি যখন গিট রেপো চান তা কিন্তু .gitডিরেক্টরি ছাড়াই বললে এটি কিছুটা বিভ্রান্তিকর । যদি আপনি বোঝাতে চান যে আপনি কেবল গাছের কিছু রাজ্যের একটি অনুলিপি চান তবে কেন cp -Rগিট ক্লোনটির পরিবর্তে শেলটি না করে তারপরে মুছুন .git


তার জন্য ধন্যবাদ. ফাইলগুলি একটি গিট রেপোতে রয়েছে। আমি আশা করছিলাম যে জিআইটি রেপো না হয়ে ম্যাক ব্যবহারকারীদের এক লাইনে রেপির অনুলিপিটি পেতে নির্দেশ দিতে সক্ষম হবেন।
ড্যান রোজনস্টার্ক

লোকেরা রেপো ব্যবহার না করতে পারলে তারা সরাসরি কোড পাবে না (যেমন গিট সংগ্রহস্থল নেই)।
বিকল্প

@ অ্যামস একটি টারবল প্রকাশ করছে যাতে লোকেরা নিয়মিত সর্বশেষতম কোডটি ধরে না ফেলে?
বিকল্প

1
@ ম্যাথেপিক: এবং একটি টারবাল প্রকাশের জন্য আপনার সংগ্রহস্থল থেকে একটি পরিষ্কার পরিশ্রমী অনুলিপি বের করার একটি উপায় প্রয়োজন - এটিই হ'ল প্রশ্ন যা উত্থাপিত হয়েছিল।
অ্যান্ড্রু

1
নীচের উত্তরটি পড়া এবং তারপরে কিছুটা গুগল করা অন্য প্রশ্নটির দিকে নিয়ে যায়: স্ট্যাকওভারফ্লো / প্রশ্ন / ১1০60০৮/২ আপনি যদি গিট সংরক্ষণাগার - রেমোটের ব্যবহারটি একবার দেখে নিই তবে এটি ঠিক কী করে আপনি (এবং মূল পোস্টার) ) কি খোঁজচ্ছেন. সম্পাদনা করুন: যা জনের নীচে উত্তর দিয়েছিল।
অ্যান্ড্রু

2

মনে হচ্ছে আপনি কেবল উত্স কোডের একটি অনুলিপি চান। যদি তা হয় তবে কেন কেবল ডিরেক্টরিটি অনুলিপি করবেন এবং অনুলিপি থেকে .git ডিরেক্টরিটি বাদ দিন?


5
এটিই আমি জিজ্ঞাসা করছি: গিট দিয়ে কীভাবে এটি করা যায় ... আমি ইতিমধ্যে বলতে পারি যে আমি যে উত্তরগুলি পাচ্ছি তা থেকে এটি করার কোনও অন্তর্নিহিত উপায় নেই। যাই হোক ধন্যবাদ!
ড্যান রোজনস্টার্ক

2

গিট চেকআউট -ফ

কার্যকারী গাছ থেকে রেপোকে বিভক্ত করে এটি করার আরও একটি উপায় রয়েছে।

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

আমরা দু'টি ফোল্ডার তৈরি করব, একটি কার্যক্ষম ফাইলের জন্য গিটের জন্য:

mkdir workingfiles
mkdir barerepo.git

একটি খালি গিট রেপো আরম্ভ করুন:

cd barerepo.git
git --bare init 

তারপরে একটি পোস্ট-রিসিভ হুক তৈরি করুন:

touch hooks/post-receive
chmod ug+x hooks/post-receive

আপনার প্রিয় সম্পাদকটিতে পোস্ট-প্রাপ্তি সম্পাদনা করুন:

GIT_WORK_TREE=/path/to/workingfiles git checkout -f
# optional stuff:
cd down/to/some/directory
[do some stuff]

এটি একটি রিমোট হিসাবে যুক্ত করুন:

git remote add myserver ssh://user@host:/path/to/barerepo.git

এখন যতবার আপনি এই খালি রেপোতে চাপ দিন এটি কার্যকারী গাছটিকে চেকআউট করবে /workingfiles/। তবে /workingfiles/নিজেই সংস্করণ নিয়ন্ত্রণে নেই; চলমান git status/workingfiles/ত্রুটি দেব fatal: Not a git repository (or any parent up to mount point /data)। এটি কেবল সরল ফাইল।

অন্যান্য সলিউশনগুলির বিপরীতে rm -r .gitকমান্ডের প্রয়োজন হয় না, তাই যদি /workingfiles/অন্য কিছু গিট রেপো হয় তবে আপনাকে অন্যান্য রেপোর গিট ফাইলগুলি অপসারণের জন্য ব্যবহৃত কমান্ডটি সম্পর্কে চিন্তা করতে হবে না।


1
একমত। খালি রেপোতে পোস্ট-রিসিভ হুক এখানে সম্ভব। +1
ভোনসি

আপনি কেবল ফাইলগুলি পাওয়ার চেষ্টা করলে অনেক কাজ
রেইনব

আপনি যদি নিয়মিতভাবে কেবল ফাইলগুলি চান তবে এটি খুব বেশি কাজ নয়।
স্ল্যাম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.