আমি কীভাবে খালি খালি ডিরেক্টরিতে ক্লোন করব?


572

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

আমি ডিরেক্টরী বি কে ডিরেক্টরি A তে ক্লোন করতে চাই তবে ডিরেক্টরিটি ফাঁকা না থাকায় গিট-ক্লোন আমাকে অনুমতি দেয় না।

আমি আশা করছিলাম এটি কেবল .git ক্লোন হয়ে যাবে এবং যেহেতু সমস্ত ফাইল মিলছে আমি সেখান থেকে যেতে পারি?

আমি একটি খালি ডিরেক্টরিতে ক্লোন করতে পারছি না কারণ আমার কাছে ডিরেক্টরি A তে ফাইল রয়েছে যা বি বি ডিরেক্টরিতে নেই এবং আমি সেগুলি রাখতে চাই।

.Git অনুলিপি করা কোনও বিকল্প নয় কারণ আমি ধাক্কা দিয়ে / টানতে চাই এবং আমি সেগুলি ম্যানুয়ালি সেট আপ করতে চাই না।

এই কাজ করতে কোন উপায় আছে কি?

আপডেট: আমি মনে করি এটি কাজ করে, কেউ কি কোনও সমস্যা দেখতে পাবে? ->

cd a
git clone --no-hardlinks --no-checkout ../b a.tmp 
mv a.tmp/.git .
rm -rf a.tmp
git unstage # apparently git thinks all the files are deleted if you don't do this

5
সম্ভবত আপনি গ্রহণযোগ্য উত্তর পরিবর্তন করতে পারেন?
বাসটিয়ান কোয়েস্ট

উত্তর:


724

এটি আমার পক্ষে কাজ করেছে:

git init
git remote add origin PATH/TO/REPO
git fetch
git reset origin/master  # Required when the versioned files existed in path before "git init" of this repo.
git checkout -t origin/master

দ্রষ্টব্য: -t আপনার জন্য প্রবাহিত শাখা সেট করবে, যদি এটি আপনি চান যা হয় এবং এটি সাধারণত হয়।


70
আগত ফাইলগুলি ইতিমধ্যে উপস্থিত থাকলে (মূল প্রশ্নটি বর্ণিত হিসাবে) এটি খালি খালি ডিরেক্টরিতে কাজ করে না। তবে আপনি যদি git reset origin/masterপরে থাকেন তবে git fetchএটি কাজ করবে (স্থানীয় পরিবর্তনগুলিও সংরক্ষণ করে)।
অ্যারেক্সিয়া

8
মারাত্মক: একই সাথে পাথগুলি আপডেট করতে পারে না এবং শাখায় 'মাস্টার' এ যেতে পারে।
আর্নল্ড রোয়া

7
এই উত্তরটি আমার পক্ষে কাজ করে না। যখন আমি git checkout ...গিট অভিযোগ করি যে আমার সমস্ত ফাইল ওভাররাইট হয়ে যাবে এবং আমার প্রথমে সেগুলি সরিয়ে নেওয়া উচিত। আমি যখন `গিট রিসেট উত্স / মাস্টার / do করি তখন চেকআউট কমান্ড অভিযোগ করে যে মাস্টার নামের একটি শাখা ইতিমধ্যে বিদ্যমান।
সাস্কিয়া

4
git checkout masterআমার জন্য যথেষ্ট চূড়ান্ত পদক্ষেপ ছিল।
yoyo

16
সমস্ত ধাপ পুরোপুরি কাজ কিন্তু শেষ কেউ আমায় করেছেন: fatal: A branch named 'master' already exists। আমি মনে করি আমার আসলে এটির দরকার হয়নি।
শাদি

164

নিম্নলিখিত শেল কমান্ডগুলির existing-dirমধ্যে একটি ডিরেক্টরি রয়েছে যা repo-to-cloneগিট সংগ্রহস্থলের ট্র্যাক করা ফাইলগুলির সাথে মেলে contents

# Clone just the repository's .git folder (excluding files as they are already in
# `existing-dir`) into an empty temporary directory
git clone --no-checkout repo-to-clone existing-dir/existing-dir.tmp # might want --no-hardlinks for cloning local repo

# Move the .git folder to the directory with the files.
# This makes `existing-dir` a git repo.
mv existing-dir/existing-dir.tmp/.git existing-dir/

# Delete the temporary directory
rmdir existing-dir/existing-dir.tmp
cd existing-dir

# git thinks all files are deleted, this reverts the state of the repo to HEAD.
# WARNING: any local changes to the files will be lost.
git reset --hard HEAD

5
আমার করা দরকার ছিল git reset --hard HEADবা এটি "মোছা" ফাইলগুলিকে ছাড়বে না।
দিমিতর

18
git reset HEADআমার জন্য ভাল কাজ করে। git reset --hard HEADআপনার ফাইলগুলিতে যে কোনও পরিবর্তন নষ্ট করে, তাই যদি সেগুলি সংগ্রহস্থলের ফাইলগুলির মতো না হয় তবে আপনার এটি করা উচিত নয়।
টিজিআর

1
git reset HEADআমার জন্য কোনও প্রভাব ফেলবে বলে মনে হয় না। git reset --hard HEADনা - তবে ফাইলগুলিতে আপনি যে কোনও পরিবর্তন করেছেন তা হারাবে। এর চেয়ে ভাল সমাধান কি আছে?
জ্যাকব ডরম্যান

1
@ কেসির উত্তর - গিট থ্রি / রিমোট অ্যাড / ফেচ / চেকআউট - পরিষ্কার এবং সহজ এবং কোনও অস্থায়ী ফোল্ডার প্রয়োজন হয় না।
yoyo

1
@ কেসির উত্তর আমার পক্ষে কার্যকর হয়নি যখন ফোল্ডারে আগে থেকেই ফাইল ছিল যা থাকা দরকার ছিল যা গিট রেপোতে ছিল না। এটি ইনস্টল স্ক্রিপ্টগুলি চালানোর পরে কনফিগার আপডেট করার জন্য দরকারী যেখানে ফাইল এবং ডিরেক্টরি তৈরি করা হয় তবে আপনাকে ইনস্টল করা আইটেমগুলির উপরে ফাইল আপডেট করতে / যুক্ত করতে হবে।
সোলস্টন

104

আমার পক্ষে যে উত্তরগুলি কার্যকর হয়েছিল তার একটিতে সামান্য পরিবর্তন:

git init
git remote add origin PATH/TO/REPO
git pull origin master

সরাসরি মাস্টার শাখায় কাজ শুরু করার জন্য।


1
গিটিগনোর
রায় ফস

1
@ সেমিগ্রিন্টির উত্তরটির বিপরীতে এটিই আমার পক্ষে প্রকৃতপক্ষে কাজ করেছিল।
অবশ্যই

4
এটি গিট-ক্লোনটির সমপরিমাণ নয় - যা অনুপস্থিত তা হ'ল মাস্টার ব্রাঞ্চের জন্য প্রবাহিত তথ্য। এটি যোগ করে স্থির করা যায় git branch --set-upstream-to=origin/master master
স্ল্যাভেন রেজিক

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

28

সতর্কতা - এটি সম্ভাব্য ফাইলগুলি ওভাররাইট করতে পারে।

git init     
git remote add origin PATH/TO/REPO     
git fetch     
git checkout -t origin/master -f

@ Cmcginty এর উত্তর থেকে পরিবর্তিত - -ফ ছাড়া এটি আমার পক্ষে কাজ করে না


অবশ্যই এর পরে আপনার সমস্ত ফাইল চেকআউট করা দরকার git checkout .?
ক্রিস স্ট্রিজাইস্কি

25

আমার যখন একই সমস্যাটি ঘটেছিল তখন আমি যা করছিলাম তা এখানেই রয়েছে (কমপক্ষে আমি মনে করি এটি একই সমস্যা)। আমি এ ডিরেক্টরিতে গিয়ে দৌড়ে গেলামgit init

যেহেতু আমি চাইনি যে ডিরেক্টরি A তে ফাইলগুলি গিটের পরে চলুক তাই আমি .gitignore সম্পাদনা করে এটিতে বিদ্যমান ফাইলগুলি যুক্ত করেছিলাম। এর পরে আমি git remote add origin '<url>' && git pull origin masterএট ভোলা চালিয়ে গেলাম, বি কে একটি হিক্কি ছাড়াই "ক্লোনড" করা হয়েছে।


2
আগত ফাইলগুলি ইতিমধ্যে উপস্থিত থাকলে (মূল প্রশ্নটি বর্ণিত হিসাবে) এই কৌশলটি একটি খালি নয় এমন ডিরেক্টরিতে কাজ করে না।
অ্যারেক্সিয়া

11

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

cd existing-dir
git clone --bare repo-to-clone .git
git config --unset core.bare
git remote rm origin
git remote add origin repo-to-clone
git reset

ও ভয়েল!


10

আর একটি সহজ রেসিপি আমার পক্ষে ভাল কাজ করছে বলে মনে হচ্ছে:

git clone --bare $URL .git
git config core.bare false

বিদ্যমান ফাইলগুলির সাথে ডিরেক্টরিতে অনুসন্ধানের জন্য আমার প্রধান ব্যবহারের ক্ষেত্রে হ'ল গিট সহ আমার ইউনিক্স ডটফিলগুলি নিয়ন্ত্রণ করা। একটি নতুন অ্যাকাউন্টে, হোম ডিরেক্টরিতে ইতিমধ্যে এতে কিছু ফাইল থাকবে, সম্ভবত আমিও গিট থেকে পেতে চাইলে।


1
বেয়ার রিপোজিটরিগুলি কিছুটা আলাদাভাবে সেটআপ হয় এবং এটি কাজ করার সময় আমি এটির সুপারিশ করব না। :)
থারস্মমনার

1
আপনি আরো নির্দিষ্ট হতে পারে? পার্থক্য কি?
কেন উইলিয়ামস

1
মাত্র দুটি পার্থক্য: 1.) .git/configফাইলটি রেপোগুলি খালি রাখার ইঙ্গিত দেয়। ২) সাধারণত সংরক্ষিত ফাইলগুলি .git.git
মূলটিতে

4
সেই ঠিক যে পরিবর্তন করতে ক্লোনিং হয় .gitএবং সেটিং core.bareথেকে false, যত্ন নিতে হবে তাই আমি এখনও এই পদ্ধতি সম্পর্কে ভাল বোধ।
কেন উইলিয়ামস

10

এটি আমার পক্ষে কাজ করেছে:

cd existing_folder
git init
git remote add origin path_to_your_repo.git
git add .
git commit
git push -u origin master

6

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

সমস্যাটি হ'ল অ্যাকাউন্টটিতে ইতিমধ্যে ওয়েব সার্ভার ফাইল রয়েছে:

.bash_history
.bash_logout
.bash_profile
.bashrc
.contactemail
.cpanel/
...

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

আমি কি করেছিলাম:

আমি আমার ওয়েব ফোল্ডারে (বিদ্যমান_ফোল্ডার) গিয়েছিলাম:

cd /home/existing_folder

এবং তারপর:

git init
git remote add origin PATH/TO/REPO
git pull origin master
git status

এটি প্রদর্শিত হয়েছিল (প্রত্যাশারূপে) স্টেজেড না হওয়া অনেকগুলি ফাইলের একটি তালিকা - যা আমার সিপানেল ওয়েব অ্যাকাউন্ট থেকে প্রাথমিকভাবে বিদ্যমান ছিল।

তারপরে, এই নিবন্ধটির জন্য ধন্যবাদ , আমি কেবলমাত্র এই ফাইলগুলির তালিকা যুক্ত করেছি:

**.git/info/exclude**

এই ফাইলটি প্রায় ফাইলের মতোই .gitignoreআপনাকে মঞ্চস্থ হওয়া থেকে ফাইল উপেক্ষা করতে দেয়। এর পরে আমার .git / ডিরেক্টরিতে প্রতিশ্রুতিবদ্ধ হওয়ার কিছুই ছিল না - এটি একটি ব্যক্তিগত মত কাজ করে.gitignore এমন কোনও ব্যক্তির অন্য কেউ দেখতে পায় না।

এখন git statusরিটার্ন পরীক্ষা করা হচ্ছে :

On branch master
nothing to commit, working tree clean

এখন আমি কেবল আমার গিট সংগ্রহস্থল থেকে টেনে এই ওয়েব সার্ভারে পরিবর্তনগুলি স্থাপন করতে পারি। আশা করি এটি কিছু ওয়েব বিকাশকারীকে সহজেই একটি মঞ্চ সার্ভার তৈরি করতে সহায়তা করে।



4

হতে পারে আমি আপনার প্রশ্নটি ভুল বুঝেছি, তবে আপনি যদি এ থেকে গিট রেপো বিতে ফাইলগুলি অনুলিপি / সরানো এবং গিট অ্যাড সহ প্রয়োজনীয়গুলি যুক্ত করেন তবে এটি সহজ হবে না would ?

আপডেট: গিট ডক থেকে:

বিদ্যমান ডিরেক্টরিতে ক্লোনিং কেবলমাত্র ডিরেক্টরি খালি থাকলেই অনুমোদিত।

উত্স: http://git-scm.com/docs/git-clone


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

সত্যি বলতে, আমি এমন অবস্থায় বিকাশের দিকটি দেখতে পাচ্ছি না। আপনি শাখা এবং মার্জ অপারেশন ব্যবহার করতে পারবেন না? বা বাহ্যিক নির্ভরতা সহ উপ-সংগ্রহস্থলগুলি রাখা? আপনি কেন একটি একক "গিট চেকআউট" এর উপর নির্ভর করতে চান?
রবার্তো আলাই

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

3
এর জন্য প্রচুর বৈধ মামলা রয়েছে - আমার প্রকল্পের উত্স সেটআপ হওয়ার আগে আমার কাছে একটি জটিল ফোল্ডার ট্রি রয়েছে এবং এটি ফোল্ডার ট্রিটিতে লাইসেন্সকৃত কাজ রয়েছে যা উদাহরণস্বরূপ গিটহাবে সংরক্ষণ করা যায় না।
BrainSlugs83

3

আমি অনুরূপ কিছু সন্ধান করছিলাম এবং আমি এখানে যা এলাম:

আমার পরিস্থিতি এমন একটি যেখানে আমার একটি সক্রিয় ওয়েব ট্রি রয়েছে এবং আমি বর্তমান ওয়েব ট্রিটিতে কোনও ফাইল না সরিয়ে এর জন্য একটি রিমোট রিপোজিটরি তৈরি করার চেষ্টা করছিলাম। আমি যা করেছি তা এখানে:

  1. ওয়েব ট্রি এ গিয়ে রান করুন git init
  2. সংগ্রহস্থলের উদ্দেশ্যে স্থিতিতে যান এবং চালান: git clone --bare /path/to/web/repo
  3. আমার রিমোট রেপোতে কনফিগার ফাইলটি সম্পাদনা করুন এবং [remote "origin"]বিভাগটি সরান ।
  4. [remote "origin"]ওয়েব ট্রিতে .git / কনফিগারেশনে একটি বিভাগ যুক্ত করুন নতুন দূরবর্তী রেপোকে নির্দেশ করে।

আমি এই রেসিপিটি অনেক পছন্দ করি।
dland

git clone --bareএখানে অতিরিক্ত এবং আঁকাবাঁকা হয়। শুধু git remote add origin <URL>প্রথম জায়গায় কেন নয় ?
অ্যারেক্সিয়া

3

এটি আমার পক্ষে কাজ - তবে আপনার স্থানীয় ফাইলগুলিতে দূরবর্তী সংগ্রহস্থলগুলি একত্রীকরণ করা উচিত:

git init
git remote add origin url-to-git
git branch --set-upstream-to=origin/master master
git fetch
git status

1

আমি ডেলের উত্তর পছন্দ করেছি এবং আমি যুক্তও করেছি

git clone --depth 2 --no-checkout repo-to-clone existing-dir/existing-dir.tmp
git branch dev_new214
git checkout dev_new214
git add .
git commit
git checkout dev
git merge dev_new214

অগভীর গভীরতা অতিরিক্ত অতিরিক্ত দেব কমিটিকে এড়িয়ে চলে। নতুন শাখাটি আমাদের একটি ভাল ভিজ্যুয়াল ইতিহাস দিয়েছে যে এই সার্ভারটি থেকে কিছু নতুন কোড রয়েছে যা এতে স্থাপন করা হয়েছিল That এটি আমার মতে সঠিক ব্যবহার শাখা। যারা এখানে পোস্ট করেছেন তাদের দুর্দান্ত অন্তর্দৃষ্টি থেকে আমার ধন্যবাদ।


0

সি / কোডে ক্লোন করার চেষ্টা করার সময় আমি একই সমস্যা পেয়েছি

তবে এই ফোল্ডারে একটি সম্পূর্ণ গুচ্ছ প্রকল্প রয়েছে।

আমি সি / কোড / নিউপ্রজেক্টে একটি নতুন ফোল্ডার তৈরি করেছি এবং এই ফোল্ডারে আমার ক্লোনটি ম্যাপ করেছি।

ডেস্কটপের জন্য গিটটি তখন আমার ব্যবহারকারীকে জিজ্ঞাসা করে এবং তারপরে জরিমানা করে।

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