একাধিক গিট সংগ্রহস্থলের সংমিশ্রণ


207

ধরা যাক আমি একটি সেটআপ পেয়েছি যা দেখতে দেখতে কিছুটা ভালো লাগে

phd/code/
phd/figures/
phd/thesis/

Reasonsতিহাসিক কারণে, এই সমস্তগুলির নিজস্ব গিট সংগ্রহস্থল রয়েছে। তবে জিনিসগুলিকে কিছুটা সহজ করার জন্য আমি তাদের একত্রে একত্র করতে চাই। উদাহরণস্বরূপ, এখনই আমি দুটি সেট পরিবর্তন করতে পারি এবং এর মতো কিছু করতে হবে

cd phd/code
git commit 
cd ../figures
git commit

এটা (এখন) শুধু পারফর্ম করতে ভাল লাগবে

cd phd
git commit

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

cd phd
git init
git add [[everything that's already in my other repositories]]

তবে এটি ওয়ান-লাইনারের মতো বলে মনে হচ্ছে না। এর মধ্যে এমন কিছু আছে gitযা আমাকে সাহায্য করতে পারে?


এই দুর্দান্ত পদ্ধতির বিষয়টিও
জোহান সিজবার্গ

এছাড়াও বিবেচনা করুন: saintgimp.org/2013/01/22/…
পিটিএম

Join-git-repos.py স্ক্রিপ্ট মাস্টার শাখার সঙ্গে প্রতিটি আপনি পৃথক ভান্ডার আছে একটা চমৎকার পেশা আছে, আপনি একত্রিত করতে চান।
মার্ক

উত্তর:


149

আমি এখানে একটি সমাধান এখানে দিয়েছি :

  1. প্রথমে আপনার পিএইচডি ডিরেক্টরিটির একটি সম্পূর্ণ ব্যাকআপ করুন: আমি আপনার হারানো বছরের কঠোর পরিশ্রমের জন্য দায়ী হতে চাই না! ;-)

    $ cp -r phd phd-backup
    
  2. বিষয়বস্তুর সরান phd/codeকরতে phd/code/code, এবং ইতিহাস ঠিক যাতে এটি দেখে মনে হচ্ছে এটা সবসময় আছে হয়েছে (এই ব্যবহারসমূহ Git এর ফিল্টার-শাখা কমান্ড):

    $ cd phd/code
    $ git filter-branch --index-filter \
        'git ls-files -s | sed "s#\t#&code/#" |
         GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
         git update-index --index-info &&
         mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE' HEAD
    
  3. বিষয়বস্তুর জন্য একই phd/figuresএবং phd/thesis(ঠিক প্রতিস্থাপন codeসঙ্গে figuresএবং thesis)।

    এখন আপনার ডিরেক্টরি কাঠামোটি দেখতে এমন হওয়া উচিত:

    phd
      |_code
      |    |_.git
      |    |_code
      |         |_(your code...)
      |_figures
      |    |_.git
      |    |_figures
      |         |_(your figures...)
      |_thesis
           |_.git
           |_thesis
                |_(your thesis...)
    
  4. তারপরে রুট ডিরেক্টরিতে একটি গিট সংগ্রহস্থল তৈরি করুন, এটিতে সমস্ত কিছুই টানুন এবং পুরাতন সংগ্রহস্থলগুলি সরিয়ে ফেলুন:

    $ cd phd
    $ git init
    
    $ git pull code
    $ rm -rf code/code
    $ rm -rf code/.git
    
    $ git pull figures --allow-unrelated-histories
    $ rm -rf figures/figures
    $ rm -rf figures/.git
    
    $ git pull thesis --allow-unrelated-histories
    $ rm -rf thesis/thesis
    $ rm -rf thesis/.git
    

    অবশেষে, আপনি এখন যা চান তা থাকা উচিত:

    phd
      |_.git
      |_code
      |    |_(your code...)
      |_figures
      |    |_(your figures...)
      |_thesis
           |_(your thesis...)
    

এই পদ্ধতির একটি দুর্দান্ত দিক হ'ল এটি নন-সংস্করণযুক্ত ফাইল এবং ডিরেক্টরিগুলি রেখে দেবে ।

আশাকরি এটা সাহায্য করবে.


সতর্কতার মাত্র একটি শব্দ যদিও: যদি আপনার codeডিরেক্টরিতে ইতিমধ্যে একটি codeউপ-ডিরেক্টরি বা ফাইল থাকে তবে জিনিসগুলি খুব ভুল হতে পারে ( অবশ্যই figuresএবং thesisএর জন্যও একই )। যদি এটি হয় তবে এই পুরো পদ্ধতিটি অতিক্রম করার আগে কেবল সেই ডিরেক্টরি বা ফাইলটির নাম পরিবর্তন করুন:

$ cd phd/code
$ git mv code code-repository-migration
$ git commit -m "preparing the code directory for migration"

এবং প্রক্রিয়া শেষ হয়ে গেলে, এই চূড়ান্ত পদক্ষেপটি যুক্ত করুন:

$ cd phd
$ git mv code/code-repository-migration code/code
$ git commit -m "final step for code directory migration"

অবশ্যই, যদি codeউপ - ডিরেক্টরি বা ফাইলটি সংস্করণিত না হয় তবে কেবল তার mvপরিবর্তে ব্যবহার করুন এবং এসটি git mvসম্পর্কে ভুলে যান git commit


13
এই স্নিপেটের জন্য ধন্যবাদ - এটি আমার যা প্রয়োজন ঠিক তা করেছে (একবার আমি ম্যাক ওএস এক্স এর জন্য হিসাব করেছিলাম "" "t" প্রসেসিং করা হয়নি (এর পরিবর্তে আমাকে ^ ভি ^ আই ব্যবহার করতে হয়েছিল)।
ক্রেগ ট্রেডার

6
আমি প্রথমে এটি কাজ করতে পারি না এবং শেষ পর্যন্ত অন্য একটি পুরানো বার্তা বোর্ডে সমস্যার সমাধান খুঁজে পেলাম। শেষ লাইনে, আমাকে এই জাতীয় ফাইলের নামের চারপাশে উদ্ধৃতি দিতে হয়েছিল: mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEADএবং তারপরে এটি দুর্দান্ত কাজ করেছে!
জোরিন

3
মজাদার ফিল্টার-শাখা কমান্ডটি গিটের ফিল্টার-শাখার ম্যান পৃষ্ঠা থেকে। আপনার বলা উচিত যে: ক) এটি সঠিকভাবে দায়ী করা উচিত খ) আমি এই ধরনের একটি আদেশ কেবল চালাতে পারব না, এমনকি উচ্চ খ্যাতি সহ কেউ স্ট্যাকওভারফ্লোতে পোস্ট করেছে। এটি মানব পৃষ্ঠাগুলি থেকে জেনে আমি করব।
tymtam

5
সতর্ক থেকো! MacOS এক্স সেডের GNU এক্সটেনশন ব্যবহার করে না, সুতরাং এটি ক্রমটি জানেন না know t। ফলাফল একটি বিশৃঙ্খলা ইতিহাস! আমার সমাধানটি হ'ল কোনও স্ক্রিপ্ট ফাইলটিতে কোডটি একটি আসল <TAB> অক্ষর লিখুন paste টার্মিনাল থেকে, একটি ট্যাব প্রবেশ করা যাবে ctrl + v টিপুন এবং তারপরে <TAB> লিখে। আমি ক্রেগের সমাধানটি চেষ্টা করে
দেখিনি

4
আউট দেখুন (2)! আরও লক্ষ করুন যে কিছু ফাইল বা ডিরেক্টরিতে হাইফেন ('-') থাকলে সেড কমান্ড ব্যর্থ হবে। সেক্ষেত্রে আপনি এটিকে 's \ \ t ~ & কোড / ~' এর মতো কিছু দিয়ে বিকল্প করতে পারেন। এখানে, একই যুক্তি প্রয়োগ করে, নামগুলিতে '~' এর জন্য নজর
রাখুন

75

git-stitch-repogit-fast-export --all --date-orderকমান্ড-লাইনে প্রদত্ত গিট সংগ্রহস্থলগুলির আউটপুট প্রক্রিয়া করবে এবং এর জন্য উপযুক্ত একটি স্ট্রিম git-fast-importতৈরি করবে যা একটি নতুন প্রতিশ্রুতিযুক্ত গাছের সমস্ত কমিট সমন্বিত একটি নতুন সংগ্রহশালা তৈরি করবে যা সমস্ত উত্স সংগ্রহস্থলের ইতিহাসকে সম্মান করে।


33
আহ, এটি একটি তৃতীয় পক্ষের সরঞ্জাম,
গিটের

1
আসলে, এখন আপনি আমাকে বলুন :) ওহ ভাল, আমি মনে করি আমাকে একদিন সিপিএএন প্যাকেজ ইনস্টল করতে শিখতে হবে…
রবার্টসন

1
এই আদেশটি নির্দেশ করার জন্য ধন্যবাদ। এসভিএন থেকে গিটের কয়েকটি রেপো সরাতে সহায়তা করার জন্য এটি কেবল ব্যবহার করা হয়েছে।
স্বাক্ষর করুন

1
সতর্কতা কাজ করবে না যদি আপনার শাখা / মার্জ থাকে! থেকে Git-stich-রেপো । পৃষ্ঠা: "Git-stich-রেপো সংগ্রহস্থল একটি রৈখিক ইতিহাস (কোন মার্জ) সঙ্গে ঠিকভাবে কাজ .. সেলাই অ্যালগরিদম সংস্করণ 0.06 করা উচিত যোগ উন্নতি ভান্ডার থাকার সঙ্গে কাজ করার উপযুক্ত শাখা এবং মার্জ। "
ব্রায়ান পি

6
এটি একটি বাহ্যিক স্ক্রিপ্ট, উত্তরটি খুব সংক্ষিপ্ত এবং সত্যই সহায়ক নয়, এই স্ক্রিপ্টটিতে মার্জ কমিটগুলি নিয়ে সমস্যা রয়েছে, অনেকেই পার্ল বা সিপিএএন পরিচালনা করবেন না এবং উত্তরে এটি ভালভাবে ব্যাখ্যা করা হয়নি। তো ... -1, দুঃখিত
Haralan Dobrev

20

সম্ভবত, সহজভাবে (পূর্ববর্তী উত্তরের অনুরূপ, তবে সরল কমান্ড ব্যবহার করে) পৃথক প্রতিটি পুরাতন সংগ্রহস্থলকে একটি প্রতিশ্রুতিবদ্ধ করে যা কন্টেন্টটিকে উপযুক্ত নামযুক্ত সাবডিরের মধ্যে স্থানান্তরিত করে, যেমন:

$ cd phd/code
$ mkdir code
# This won't work literally, because * would also match the new code/ subdir, but you understand what I mean:
$ git mv * code/
$ git commit -m "preparing the code directory for migration"

এবং তারপরে স্মেথের মতো করে তিনটি পৃথক রেপিকে এক নতুন করে মার্জ করা:

$ cd ../..
$ mkdir phd.all
$ cd phd.all
$ git init
$ git pull ../phd/code
...

তারপরে আপনি আপনার ইতিহাস সংরক্ষণ করবেন তবে একক রেপো দিয়ে চালিয়ে যাবেন।


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

1
@ টাইমেক: তবে এটি এখনও সমস্যা ছাড়াই সেই পরিস্থিতিতে কাজ করবে। জিনিসটি যা ভাল লাগবে না তা হ'ল ইতিহাসের পাথগুলি "সঠিক" হবে না (নতুন পাথের সাথে সঙ্গতিপূর্ণ)।
ইম্জ - ইভান জাখারিয়াশেভ

19

আপনি সাবট্রি মার্জ কৌশলটি চেষ্টা করতে পারেন । এটা আপনাকে রেপো উ মধ্যে রেপো বি একত্রীকরণ দেব সুবিধা ধরে git-filter-branchএটা রেপো A -এর আপনার ইতিহাস পুনর্লিখন (SHA1 এ অঙ্কের ভঙ্গ) আপনি প্রয়োজন হয় না হয়।


লিঙ্কটি কাজ করে না এবং এটি ইতিহাস সংরক্ষণ করবে না, তাই না?
tymtam

3
@ টাইমেক (কর্নেল.অর্গের কিছু অংশ সুরক্ষা লঙ্ঘনের পরেও বন্ধ রয়েছে)। এটি আগত রেপো বি এর SHA1 এর ব্রেক করে তবে A অক্ষত থাকে।
লাইফ গ্রুইনওল্ড্ট


1
@ লিফগ্রুয়েনওল্ড ১ ম লিঙ্কটি এখন কাজ করছে। এবং আয়না লিঙ্কটি চলে গেছে, আপনার মনে হয় এটি সরিয়ে দেওয়া উচিত।
ভাদিম কোতোভ

9

গিট-ফিল্টার-শাখার সমাধানটি ভাল কাজ করে তবে মনে রাখবেন যে আপনার গিট রেপো যদি কোনও এসভিএন আমদানি থেকে আসে তবে এটি কোনও বার্তায় ব্যর্থ হতে পারে:

Rewrite 422a38a0e9d2c61098b98e6c56213ac83b7bacc2 (1/42)mv: cannot stat `/home/.../wikis/nodows/.git-rewrite/t/../index.new': No such file or directory

এই ক্ষেত্রে আপনাকে ফিল্টার-শাখা থেকে প্রাথমিক পুনর্বিবেচনা বাদ দিতে হবে - অর্থাত্ HEADশেষে প্রান্তটি পরিবর্তন করুন [SHA of 2nd revision]..HEAD- দেখুন:

http://www.git.code-experiments.com/blog/2010/03/merging-git-repositories.html


2
ধন্যবাদ! আমি মাথায় আঁচড় দিচ্ছি কেন এটি কাজ করছে না! রেপো সত্যই এসভিএন থেকে এসেছিল।
আর্থার মাল্টসন

1
আমি যখন এটি করি তখন একই ত্রুটি। আমার আশা আছে। এছাড়াও, লিঙ্কটি এখন ভেঙে গেছে।
রায়ান

আপনি "মাথা নিচু করে ..." বলতে কী বোঝাতে চেয়েছিলেন, আমার রেপো একটি এসভিএন আমদানি থেকে আসে এবং আমি ঠিক এই সমস্যার মুখোমুখি হয়েছি, অনেক সাহায্যের প্রশংসা করব!

5

@ মিনিক্যুয়ার্ক সলিউশন আমাকে অনেক সাহায্য করেছে, তবে দুর্ভাগ্যক্রমে এটি অ্যাকাউন্ট ট্যাগগুলিতে নেয় না যা উত্স সংগ্রহস্থলগুলিতে রয়েছে (কমপক্ষে আমার ক্ষেত্রে)। নীচে @ মিনিকিউয়ার্ক উত্তরে আমার উন্নতি দেওয়া আছে।

  1. প্রথমে ডিরেক্টরি তৈরি করুন যাতে সমন্বিত রেপো এবং মার্জড রেপো থাকবে, প্রতিটি মার্জডের জন্য ডিরেক্টরি তৈরি করুন।

    $ এমকেডির নতুন_এফডি
    $ এমকেডির নতুন_এফডি / কোড
    $ এমকেডির নতুন_এফডি / পরিসংখ্যান
    $ এমকেডির নতুন_এফডি / থিসিস

  2. প্রতিটি সংগ্রহস্থলের একটি টান করুন এবং সমস্ত ট্যাগ আনুন। (কেবলমাত্র codeউপ-ডিরেক্টরিতে নির্দেশাবলী উপস্থাপন করা হচ্ছে )

    $ সিডি নতুন_এফডি / কোড
    $ গিট
    থ্রি $ গিট টান ../../original_phd/code মাস্টার it
    গিট আনুন ../../original_phd/code রেফ / ট্যাগ / *: রেফ / ট্যাগ / *

  3. (এই MiniQuark উত্তরে বিন্দু 2 উন্নতি হয়) বিষয়বস্তুর সরান new_phd/codeকরতে new_phd/code/codeযোগ code_প্রতিটি সামনে prefeix ট্যাগ

    it গিট ফিল্টার-শাখা - ইনডেক্স-ফিল্টার 'গিট এলএস-ফাইল-এস | সেড "s- \ t \" * - & কোড / - "| GIT_INDEX_FILE = $ GIT_INDEX_FILE. নতুন গিট আপডেট-ইনডেক্স - ইনডেক্স-তথ্য && এমভি $ GIT_INDEX_FILE.new $ GIT_INDEX_FILE '- ট্যাগ-নাম-ফিল্টার' সেড" -। * - কোড _ এবং - "'হেড

  4. এটি করার পরে ফিল্টার-শাখা করার আগে দ্বিগুণ ট্যাগ থাকবে will পুরাতন ট্যাগগুলি রেপোতে থেকে যায় এবং code_উপসর্গ সহ নতুন ট্যাগ যুক্ত করা হয়।


    it গিট ট্যাগ mytag1
    কোড_mytag1

    পুরানো ট্যাগগুলি ম্যানুয়ালি সরান:

    s ls .git / refs / ট্যাগ / * | গ্রেপ-ভি "/ কোড_" | xargs আরএম

    অন্যান্য উপ-ডিরেক্টরিতে 2,3,4 পয়েন্ট পুনরাবৃত্তি করুন

  5. এখন আমাদের @ মনিকিওয়ার্ক আনসার পয়েন্ট 3 অনুসারে ডিরেক্টরিগুলির কাঠামো রয়েছে।

  6. MiniQuark আনসার এর পয়েন্ট 4 হিসাবে করুন, তবে একটি টান পরে এবং .gitdir অপসারণ করার আগে ট্যাগ আনুন :

    it গিট ফেচ ক্যাটালগ রেফ / ট্যাগ / *: রেফ / ট্যাগ / *

    চালিয়ে ..

এটি কেবল অন্য একটি সমাধান। আশা করি এটি কাউকে সাহায্য করবে, এটি আমাকে সহায়তা করেছে :)


5

অ্যারিস্টটল পাগল্টজিসের উত্তর থেকে গিট-সেলাই-রেপো কেবল সরল, রৈখিক ইতিহাস সহ সংগ্রহস্থলের জন্য কাজ করে।

MiniQuark এর উত্তর সমস্ত সংগ্রহস্থলের জন্য কাজ করে তবে এটি ট্যাগ এবং শাখা পরিচালনা করে না।

আমি একটি প্রোগ্রাম তৈরি করেছি যা MiniQuark বর্ণিতভাবে একইভাবে কাজ করে, তবে এটি একটি মার্জ কমিট (N পিতামাতার সাথে) ব্যবহার করে এবং এই সংযুক্তির প্রতিশ্রুতিগুলি নির্দেশ করার জন্য সমস্ত ট্যাগ এবং শাখা পুনরায় তৈরি করে।

দেখুন Git-একত্রীকরণ-Repos সংগ্রহস্থলের এটি কিভাবে ব্যবহার করতে উদাহরণের জন্য।


3

আমি একটি সরঞ্জাম তৈরি করেছি যা এই কাজটি করে। ব্যবহৃত পদ্ধতিটি একই রকম (অভ্যন্তরীণভাবে কিছু জিনিস যেমন - ফিল্টার-শাখা তৈরি করুন) তবে এটি আরও বন্ধুত্বপূর্ণ। জিপিএল ২.০

http://github.com/geppo12/GitCombineRepo


3

প্রকৃতপক্ষে, গিট-সেলাই-রেপো এখন শাখা এবং ট্যাগগুলিকে সমর্থন করে, টীকাগুলি ট্যাগ সহ (আমি দেখতে পেলাম যে একটি বাগ রয়েছে যা আমি রিপোর্ট করেছি এবং এটি স্থির হয়ে গেছে)। আমি যা দরকারী মনে করি তা ট্যাগ সহ। যেহেতু ট্যাগগুলি কমিটের সাথে সংযুক্ত থাকে, এবং এর কিছু সমাধান (যেমন এরিক লি'র পদ্ধতির) ট্যাগগুলি মোকাবেলায় ব্যর্থ হয়। আপনি একটি আমদানিকৃত ট্যাগ বন্ধ করে একটি শাখা তৈরি করার চেষ্টা করবেন এবং এটি কোনও গিট মার্জ / চালগুলি পূর্বাবস্থায় ফিরিয়ে আনবে এবং ট্যাগটি যে সংগ্রহস্থলের নিকটবর্তী ছিল তেমন একীভূত সংগ্রহস্থলের মতো আপনাকে ফিরে পাঠাবে। এছাড়াও, আপনি একাধিক সংগ্রহস্থলগুলিতে একই ট্যাগটি ব্যবহার করেন যা আপনি 'একীভূত / একীভূত' করেছেন issues উদাহরণস্বরূপ, আপনার যদি রেপোর একটি বিজ্ঞাপন বি থাকে, উভয়ই ট্যাগ থাকে rel_1.0। আপনি রেপো এ এবং রেপো বিকে রেপো এবিতে মার্জ করুন। যেহেতু rel_1.0 ট্যাগ দুটি ভিন্ন কমিটে রয়েছে (একটি এ এর ​​জন্য এবং একটি বি এর জন্য), এবিজে কোন ট্যাগটি দেখা যাবে? হয় আমদানি করা রেপো এ থেকে বা আমদানি করা রেপো বি থেকে ট্যাগ, তবে উভয়ই নয়।

গিট-সেলাই-রেপো rel_1.0-A এবং rel_1.0-B ট্যাগ তৈরি করে সেই সমস্যার সমাধান করতে সহায়তা করে। আপনি rel_1.0 ট্যাগ চেকআউট করতে পারবেন না এবং উভয়ই আশা করতে পারবেন, তবে কমপক্ষে আপনি উভয়ই দেখতে পাবেন এবং তাত্ত্বিকভাবে আপনি এগুলিকে একটি সাধারণ স্থানীয় শাখায় মার্জ করতে পারেন তারপরে সেই মার্জড শাখায় একটি rel_1.0 ট্যাগ তৈরি করতে পারেন (আপনাকে ঠিক ধরে নিচ্ছেন) মার্জ করুন এবং উত্স কোড পরিবর্তন করবেন না)। শাখাগুলির সাথে কাজ করা ভাল, কারণ আপনি প্রতিটি রেপো থেকে শাখার মতো স্থানীয় শাখায় মার্জ করতে পারেন। (দেব-ক এবং দেব-বি স্থানীয় দেব শাখায় একত্রীকরণ করা যায় যা পরে উত্সে ঠেলা যায়)।


2

আপনি যে ক্রমটি প্রস্তাব করেছেন তা

git init
git add *
git commit -a -m "import everything"

কাজ করবে, তবে আপনি নিজের প্রতিশ্রুতিবদ্ধ ইতিহাস হারাবেন।


ইতিহাস হারানো তেমন খারাপ নয়, তবে যেহেতু সংগ্রহশালাটি আমার নিজের কাজের জন্য (যেমন, এটি ব্যক্তিগত) সেখানে সেখানে প্রচুর স্টাফ রয়েছে যে আমি সংস্করণ চাই না বা এটি এখনও রূপান্তরিত হয়নি।
উইল রবার্টসন

1

একটি প্রধানপ্রজেক্টের মধ্যে একটি দ্বিতীয় প্রকল্পকে মার্জ করতে:

ক) দ্বিতীয় প্রকল্পে

git fast-export --all --date-order > /tmp/secondProjectExport

খ) মূল প্রকল্পে:

git checkout -b secondProject
git fast-import --force < /tmp/secondProjectExport

এই শাখায় আপনার করা এবং তাদের প্রতিশ্রুতিবদ্ধ হওয়া দরকার এমন সমস্ত ভারী রূপান্তর করুন।

গ) তারপরে মাস্টারের কাছে ফিরে যান এবং দুটি শাখার মধ্যে একটি ধ্রুপদী সংহত:

git checkout master
git merge secondProject

এটি উভয় গিট প্রকল্পের মূলের সমস্ত ফাইল এবং ফোল্ডারকে একটি প্রকল্পে একীভূত করবে। আমি সন্দেহ করি যে_আমিও_এই হোক
ক্লিন্টেম

0

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

https://github.com/Oakleon/git-join-repos


0

এই বাশ স্ক্রিপ্টটি সেড ট্যাব চরিত্রের সমস্যা (উদাহরণস্বরূপ MacOS এ) এবং নিখোঁজ ফাইলগুলির ইস্যুতে কাজ করে।

export SUBREPO="subrepo"; # <= your subrepository name here
export TABULATOR=`printf '\t'`;
FILTER='git ls-files -s | sed "s#${TABULATOR}#&${SUBREPO}/#" |
  GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
  git update-index --index-info &&
  if [ -f "$GIT_INDEX_FILE.new" ]; then mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE; else echo "git filter skipped missing file: $GIT_INXEX_FILE.new"; fi'

git filter-branch --index-filter "$FILTER" HEAD

এই তার সংমিশ্রণ miniquark , Marius-butuc এবং রায়ান 'এর পোস্ট নেই। তাদের চিয়ার্স!

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