নতুন প্রকল্পের জন্য একটি নতুন ফাঁকা শাখা তৈরি করা হচ্ছে


351

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

আমরা কীভাবে এটি করতে পারি?

আমি কিছু জিনিস চেষ্টা করেছিলাম, কিন্তু সেগুলি কার্যকর হয়নি।

$ mkdir proj_doc; cd proj_doc
$ git init
$ git add .
$ git commit -m 'first commit'
$ git br proj_doc
$ git co proj_doc
$ git br -d master
$ git push origin proj_doc

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


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

2
ঠিক আছে, আমরা এটি আগে করেছি, আইআইআরসি, এবং আমি এটি আবার করতে চাই, তাই আমি কৌতূহলী;)
ফাজিনিরোসো

3
"একটি নতুন প্রকল্পের জন্য" - @ হংক হিসাবে আমি এটি একটি নতুন ভাণ্ডারে রাখার পরামর্শ দেব। সেগুলি সংহত করার জন্য সেখান থেকে দুটি বিকল্প। এটি submoduleমূল প্রকল্পে একটি করুন , উদাহরণস্বরূপ docs/that অন্যান্য রেপোকে নির্দেশ করা। অথবা, আপনি যদি কোডটি পরে মার্জ করতে চান তবে এটিকে একটি রিমোট হিসাবে যুক্ত করুন।
জার্মটভিডিজক

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

উত্তর:


666

আপনি অনাথ হিসাবে একটি শাখা তৈরি করতে পারেন:

git checkout --orphan <branchname>

এটি কোনও পিতা-মাতার সাথে একটি নতুন শাখা তৈরি করবে। তারপরে, আপনি এর সাথে ওয়ার্কিং ডিরেক্টরিটি সাফ করতে পারেন:

git rm --cached -r .

এবং ডকুমেন্টেশন ফাইলগুলি যুক্ত করুন, তাদের প্রতিশ্রুতিবদ্ধ করুন এবং গিথুব পর্যন্ত তাদের ধাক্কা।

একটি টান বা আনতে সমস্ত দূরবর্তী শাখা সম্পর্কে স্থানীয় তথ্য সর্বদা আপডেট করা হবে। আপনি যদি কেবল একটি একক দূরবর্তী শাখার জন্য তথ্যটি টান / আনতে চান তবে আপনার এটি নির্দিষ্ট করতে হবে।


18
উত্তম উত্তর, তবে এটি বিরক্তিকর এক ধরণের যে নতুন শাখাটি সমস্ত ফাইল (পূর্ববর্তী শাখা থেকে) স্টেজ দিয়ে শুরু হয়েছিল।
ম্যাট ফেনউইক

12
ইস্যু করার সময় git checkout --orphan <branch>; আমি <ফ্রেঞ্চ> এর কোনও তালিকা দেখছি না git branch
সন্তোষ কুমার

51
git checkout --orphanকেউ পরে git reset --hardফাইলগুলি বামে মুছতে ব্যবহার করতে পারে ।
ইলিয়া কোজেভনিকিকভ

16
এর পরে আপনি কেন শাখাটি দেখতে পাচ্ছেন না git checkout --orphan <branch>কারণ এটির কোনও কমিট নেই। প্রথম কমিট পরে git branchনতুন শাখা প্রিন্ট।
Krøllebølle

13
গিট ক্লিন-এফডি আন-ল্যাক করা ফাইলগুলি সরিয়ে দেয়।
স্টেফগোসেলিন

71

সঠিক উত্তরটি এতিম শাখা তৈরি করা। আমি আমার ব্লগে এটি কীভাবে বিশদভাবে করব তা ব্যাখ্যা করি। (সংরক্ষণাগারযুক্ত লিঙ্ক)

...

শুরু করার আগে, জিআইটির সর্বশেষতম সংস্করণে আপগ্রেড করুন। আপনি সর্বশেষ সংস্করণটি চালাচ্ছেন তা নিশ্চিত করতে, চালান

which git

এটি যদি কোনও পুরাতন সংস্করণ ছড়িয়ে দেয় তবে আপনার সদ্য ইনস্টল হওয়া সংস্করণটি সহ ফোল্ডারটি দিয়ে আপনার PATH বাড়াতে হতে পারে।

ঠিক আছে, আমরা প্রস্তুত। আপনার গিট চেকআউটযুক্ত ফোল্ডারে সিডি করার পরে একটি অনাথ শাখা তৈরি করুন। এই উদাহরণস্বরূপ, আমি শাখার নাম দেব "আমারব্র্যাঞ্চ"।

git checkout --orphan mybranch

এতিম শাখার সবকিছু মুছুন

git rm -rf .

কিছু পরিবর্তন করুন

vi README.txt

পরিবর্তনগুলি যুক্ত করুন এবং প্রতিশ্রুতিবদ্ধ করুন

git add README.txt
git commit -m "Adding readme file"

এটাই. আপনি যদি চালান

git log

আপনি লক্ষ্য করবেন যে কমিটের ইতিহাস শুরু থেকে শুরু হবে। আপনার মাস্টার শাখায় ফিরে যেতে, কেবল চালান

git checkout master

আপনি চালিয়ে অনাথ শাখায় ফিরে আসতে পারেন

git checkout mybranch

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

3
দুর্ভাগ্যক্রমে লিঙ্কটি আর বৈধ নয়।
আলেক্সি

1
সংরক্ষণাগারগুলি একটি দুর্দান্ত জিনিস।
lucid_dreamer

3
কার্যকারী ডিরেক্টরিতে থাকা সমস্ত কিছু সরিয়ে ফেলা বিপজ্জনক, কারণ যে কোনও অ-তুচ্ছ প্রকল্পে আন-ট্র্যাক করা ফাইল থাকবে (কনফিগারেশন, পরিবেশ, ক্যাশে ইত্যাদি)।
স্লাভা ফমিন দ্বিতীয়

12

একটি খালি নতুন শাখা এটি তৈরি করুন:

true | git mktree | xargs git commit-tree | xargs git branch proj-doc

যদি আপনার প্রকল্প-ডক ফাইলগুলি ইতিমধ্যে একটি একক সাবডিরের অধীনে প্রতিশ্রুতিবদ্ধ থাকে তবে আপনি নতুন শাখাটি এভাবে তৈরি করতে পারেন:

git commit-tree thatcommit:path/to/dir | xargs git branch proj-doc

যা git branch --orphanআপনাকে অনেক কিছু করতে git rmএবং git mvকরায় ফেলে দেয় তার চেয়ে বেশি সুবিধাজনক হতে পারে ।

চেষ্টা

git branch --set-upstream proj-doc origin/proj-doc

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


1
এই উত্তরটি আকর্ষণীয় কারণ এটি আপনাকে সম্পূর্ণ খালি প্রথম প্রতিশ্রুতি দিয়ে অন্য একটি শাখা / রুট শুরু করার অনুমতি দেয়।
স্টাফেন গরিখন

খালি শাখা তৈরির অন্য git checkout --orphan new-branch; git reset --hard
উপায়টি

এর ব্যবহার কী xargs?
ফ্লাক্স

@ ফ্লাক্স এটি গাছের আইডিটিকে কমিট-ট্রি আর্গ হিসাবে ডুবিয়ে দেওয়ার আরও একটি উপায়।
jthill

আমি সত্যিই এই পদ্ধতির পছন্দ করি, কেননা এটি আপনার বর্তমান শাখাটি ছাড়াই একটি খালি নতুন শাখা তৈরি করতে দেয়, এবং এই সত্যটি একটি শুরুর পয়েন্ট হিসাবে একটি খালি প্রতিশ্রুতি রয়েছে।
ব্রাইস

8

যদি আপনার গিট সংস্করণে --orphan বিকল্প না থাকে তবে এই পদ্ধতিটি ব্যবহার করা উচিত:

git symbolic-ref HEAD refs/heads/<newbranch> 
rm .git/index 
git clean -fdx 

কিছু কাজ করার পরে:

git add -A
git commit -m <message>
git push origin <newbranch>

2
সাবধান থাকুন, git cleanআপনি মুছে ফেলতে চান না এমন ফাইলগুলি মুছতে পারেন! বিকল্পের git clean -ndxসাথে বাস্তবের জন্য চালানোর আগে এটি কোন ফাইলগুলি মুছে ফেলা হবে তা দেখতে প্রথমে চালান -f
লাসি

7

ধরা যাক আপনার masterফাইল / ডিরেক্টরি সহ একটি শাখা রয়েছে:

> git branch  
master
> ls -la # (files and dirs which you may keep in master)
.git
directory1
directory2
file_1
..
file_n

কীভাবে খালি শাখা তৈরি করবেন তা ধাপে ধাপে:

  1. git checkout —orphan new_branch_name
  2. নিম্নলিখিত কমান্ডটি কার্যকর করার আগে আপনি সঠিক ডিরেক্টরিতে রয়েছেন তা নিশ্চিত করুন:
    ls -la |awk '{print $9}' |grep -v git |xargs -I _ rm -rf ./_
  3. git rm -rf .
  4. touch new_file
  5. git add new_file
  6. git commit -m 'added first file in the new branch'
  7. git push origin new_branch_name

দ্বিতীয় ধাপে, আপনার নতুন শাখায় থাকা ফাইলগুলি এবং আপনি যে শাখায় রেখেছেন সেগুলি নিয়ে বিভ্রান্তি এড়াতে আমরা স্থানীয়ভাবে সমস্ত ফাইল সরিয়ে masterফেলি। তারপরে, আমরা all ধাপে এই সমস্ত ফাইলগুলি লিঙ্কমুক্ত করব Finally অবশেষে, পদক্ষেপ 4 এবং তার পরে আমাদের নতুন খালি শাখাটির সাথে কাজ করছে।

আপনার কাজ শেষ হয়ে গেলে আপনি সহজেই আপনার শাখাগুলির মধ্যে স্যুইচ করতে পারেন:

git checkout master 
git checkout new_branch

1

ভিত্তিতে হাইরি নমস এর উত্তর

আপনি অনাথ হিসাবে একটি শাখা তৈরি করতে পারেন:

git checkout --orphan <branchname>

এটি কোনও পিতা-মাতার সাথে একটি নতুন শাখা তৈরি করবে। তারপরে, আপনি এর সাথে ওয়ার্কিং ডিরেক্টরিটি সাফ করতে পারেন:

git rm --cached -r .

এবং তারপরে আপনি খালি কমিট দিয়ে শাখা করে ফেলুন এবং তারপরে ধাক্কা দিন

git commit -m <commit message> --allow-empty
git push origin <newbranch>

1

পরীক্ষা করে দেখুন এই ডকুমেন্টেশন , এটা সম্পর্কে স্পষ্ট হয়ে গেছে

--orphan <new_branch>
নামে <new_branch>শুরু করা একটি নতুন এতিম শাখা তৈরি করুন <start_point>এবং এটিতে স্যুইচ করুন। এই নতুন শাখায় করা প্রথম প্রতিশ্রুতির কোনও পিতা-মাতা থাকবে না এবং এটি অন্য ইতিহাস থেকে সম্পূর্ণ সংযোগ বিচ্ছিন্ন ও প্রতিশ্রুতিবদ্ধ নতুন ইতিহাসের মূল হবে।

সূচক এবং কার্যক্ষম গাছটি এমনভাবে সামঞ্জস্য করা হয়েছে যেন আপনি আগে গিট চেকআউট চালিয়েছেন। এটি আপনাকে একটি নতুন ইতিহাস শুরু করতে দেয় যা রুট কমিট করার জন্য সহজেই গিট কমিট -a চালিয়ে অনুরূপ পাথের একটি সেট রেকর্ড করে।


1
একটি সমাধানের একটি লিঙ্ক স্বাগত, তবে দয়া করে আপনার উত্তরটি কার্যকর না হওয়া নিশ্চিত করুন: লিঙ্কটির চারপাশে প্রসঙ্গটি যুক্ত করুন যাতে আপনার সহ ব্যবহারকারীদের কিছু ধারণা থাকতে পারে এটি কী এবং কেন এটি রয়েছে, তবে পৃষ্ঠার সর্বাধিক প্রাসঙ্গিক অংশটি উদ্ধৃত করুন ' লক্ষ্য পৃষ্ঠাটি অনুপলব্ধ ক্ষেত্রে লিঙ্কটি পুনরায় সংযুক্ত করুন। লিঙ্কের চেয়ে সামান্য বেশি উত্তরগুলি মুছতে পারে।
ইউনোছ

1

আমি এই সহায়তা পেয়েছি:

git checkout --orphan empty.branch.name
git rm --cached -r .
echo "init empty branch" > README.md
git add README.md
git commit -m "init empty branch"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.