ফাইলের ইতিহাস না ভাঙিয়ে দুটি গিট সংগ্রহস্থল মার্জ করুন


226

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

ভাণ্ডারগুলিকে একীভূত করার এবং স্বতন্ত্র ফাইলের ইতিহাস অক্ষত রেখে যাওয়ার কোনও উপায় আছে কি?


আমি গিট ব্যবহার করছি না, তবে মার্চুরিয়ালে আমি প্রথমে সংযুক্ত হওয়ার জন্য রেপোগুলির ফাইলের পাথগুলি ঠিক করার জন্য প্রথমে একটি রূপান্তর করব এবং তারপরে পরিবর্তনগুলি পেতে টার্গেটে একটি রেপোকে জোর-টান করব এবং তারপরে একটি করণীয় করব বিভিন্ন শাখা একীভূত। এটি পরীক্ষা করা হয়েছে এবং কাজ করে;) সম্ভবত এটি গিটের জন্যও সমাধান খুঁজে পেতে সহায়তা করে ... সাবট্রি-মার্জ পদ্ধতির তুলনায় আমার ধারণা রূপান্তর ধাপটি আলাদা যেখানে কেবল কোনও পথ ম্যাপিংয়ের পরিবর্তে ইতিহাস পুনরায় লেখা হয় (যদি আমি বুঝতে পারি) সঠিকভাবে)। এরপরে কোনও ফাইল পাথের কোনও বিশেষ পরিচালনা ছাড়াই একটি মসৃণ সংশ্লেষ নিশ্চিত করে।
Lucero

আমিও এই প্রশ্নের সহায়ক বলে চিহ্নিত করেছেন stackoverflow.com/questions/1683531/...
nacross

আমি একটি ফলো-আপ প্রশ্ন তৈরি করেছি। এটা আকর্ষণীয় হতে পারে: দুই Git ভান্ডারগুলিকে মার্জ এবং মাস্টার ইতিহাস রাখবেন: stackoverflow.com/questions/42161910/...
ডিমিট্রি Dewaele

স্বয়ংক্রিয় সমাধান আমার জন্য কাজ ছিল stackoverflow.com/a/30781527/239408
xverges

উত্তর:


269

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

দু'টি সংগ্রহস্থল একসাথে আটকানোর জন্য এখানে পাওয়ারশেল স্ক্রিপ্টের একটি উদাহরণ রয়েছে:

# Assume the current directory is where we want the new repository to be created
# Create the new repository
git init

# Before we do a merge, we have to have an initial commit, so we'll make a dummy commit
git commit --allow-empty -m "Initial dummy commit"

# Add a remote for and fetch the old repo
git remote add -f old_a <OldA repo URL>

# Merge the files from old_a/master into new/master
git merge old_a/master --allow-unrelated-histories

# Move the old_a repo files and folders into a subdirectory so they don't collide with the other repo coming later
mkdir old_a
dir -exclude old_a | %{git mv $_.Name old_a}

# Commit the move
git commit -m "Move old_a files into subdir"

# Do the same thing for old_b
git remote add -f old_b <OldB repo URL>
git merge old_b/master --allow-unrelated-histories
mkdir old_b
dir exclude old_a,old_b | %{git mv $_.Name old_b}
git commit -m "Move old_b files into subdir"

স্পষ্টতই আপনি পরিবর্তে ওল্ড_ বিটিকে পুরানো_এতে রূপান্তর করতে পারেন (যা নতুন সম্মিলিত রেপো হয়ে যায়) যদি আপনি এটি না করেন - স্ক্রিপ্টটি অনুসারে পরিবর্তন করুন।

আপনি যদি অগ্রগতি বৈশিষ্ট্যযুক্ত শাখাগুলিও আনতে চান তবে এটি ব্যবহার করুন:

# Bring over a feature branch from one of the old repos
git checkout -b feature-in-progress
git merge -s recursive -Xsubtree=old_a old_a/feature-in-progress

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

আমি এখানে আরও কিছুটা বিশদ ব্যাখ্যা লিখেছি ।


16
এই সমাধানটি ব্যবহার git mvকরে এত ভাল কাজ করে না। যখন আপনি পরে git logসরানো ফাইলগুলির একটিতে একটি ব্যবহার করেন আপনি কেবল চালনা থেকে প্রতিশ্রুতি পান। পূর্ববর্তী সমস্ত ইতিহাস হারিয়ে গেছে। এটি কারণ git mvসত্য git rm; git addকিন্তু এক পদক্ষেপে
mholm815

15
এটি গিটের অন্য কোনও চলন / নাম পরিবর্তনের অপারেশনের মতো: কমান্ড লাইন থেকে আপনি ইতিহাসের git log --followসমস্তটি পেয়ে যাবেন বা জিইউআইয়ের সমস্ত সরঞ্জাম স্বয়ংক্রিয়ভাবে আপনার জন্য এটি করতে পারে। একটি সাবট্রি মার্জ করে আপনি স্বতন্ত্র ফাইলগুলির জন্য ইতিহাস পেতে পারবেন না , যতদূর আমি জানি, তাই এই পদ্ধতিটি আরও ভাল।
এরিক লি

3
টুইট এটা কি প্রত্যাশিত? আমি কনফ্লিক্ট পেয়েছি (নতুন নাম / মুছুন)
জন

9
যখন আমি "dir -excule old_a |% {git mv $ _। নাম পুরানো_এ}" চেষ্টা করি, তখন আমি sh.exe পাই ": dir: কমান্ড পাওয়া যায় নি এবং sh.exe": গিট: আদেশ পাওয়া যায় নি। এই কাজগুলি ব্যবহার করে: ls -I old_a | xargs -I '{}' git mv '{}' old_a /
জর্জ

5
এটি 1(এক নম্বর ওজনের) lsএবং এর জন্য মূলধন 'চোখ' xargs। এই পরামর্শের জন্য আপনাকে ধন্যবাদ!
ডোমিনিক ভায়াল

149

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

  1. দূরবর্তী হিসাবে দ্বিতীয় রেপো যুক্ত করুন:

    cd firstgitrepo/
    git remote add secondrepo username@servername:andsoon
    
  2. সেকেন্ডারপোর সমস্ত কমিটগুলি আপনি ডাউনলোড করেছেন তা নিশ্চিত করুন:

    git fetch secondrepo
    
  3. দ্বিতীয় রেপুর শাখা থেকে একটি স্থানীয় শাখা তৈরি করুন:

    git branch branchfromsecondrepo secondrepo/master
    
  4. এর সমস্ত ফাইলকে একটি উপ-ডিরেক্টরিতে সরান:

    git checkout branchfromsecondrepo
    mkdir subdir/
    git ls-tree -z --name-only HEAD | xargs -0 -I {} git mv {} subdir/
    git commit -m "Moved files to subdir/"
    
  5. প্রথম শাখার মাস্টার শাখায় দ্বিতীয় শাখাটি মার্জ করুন:

    git checkout master
    git merge --allow-unrelated-histories branchfromsecondrepo
    

আপনার ভাণ্ডারগুলিতে একাধিক মূল কমিট থাকবে, তবে এতে কোনও সমস্যা হবে না।


1
পদক্ষেপ 2 আমার পক্ষে কাজ করে না: মারাত্মক: বৈধ অবজেক্টের নাম নয়: 'সেকেন্ডেরপো / মাস্টার'।
কিথ

@ কীথ: নিশ্চিত হয়ে নিন যে আপনি দ্বিতীয় রেপোকে "সেকেন্ডেরপো" নামে একটি রিমোট হিসাবে যুক্ত করেছেন, এবং সেই রেপোর একটি "মাস্টার" নামে একটি শাখা রয়েছে (আপনি কমান্ডের সাহায্যে রিমোট রেপোতে শাখা দেখতে পারেন git remote show secondrepo)
ফ্লেম

এটিকে নামিয়ে আনার জন্য আমাকে একটি আনতে হবে। 1 এবং 2 এর মধ্যে আমি গিট
সেকেন্ডেরপো এনেছি

@ মোম্যাঙ্কজ্যাক: গিট আনার পদক্ষেপ অন্তর্ভুক্ত করার জন্য আমি আমার উত্তর সম্পাদনা করেছি। ভবিষ্যতে উত্তরটি সম্পাদনা করতে নির্দ্বিধায়
ফ্লিম

4
@ মার্তিজন হিমেলস গিট এর পুরানো সংস্করণের জন্য, বাদ দিন --allow-unrelated-histories। এই উত্তর পোস্টের ইতিহাস দেখুন।
ফ্লিম

8

কয়েক বছর কেটে গেছে এবং ভাল-ভিত্তিক আপ-ভোটযুক্ত সমাধান রয়েছে তবে আমি আমার ভাগ করে নিতে চাই কারণ এটি কিছুটা আলাদা ছিল কারণ আমি পূর্ববর্তী সংগ্রহস্থলগুলি থেকে ইতিহাস মুছে না দিয়ে 2 টি রিমোট রেপোজিটরিগুলিকে নতুন একটিতে একীভূত করতে চেয়েছিলাম।

  1. গিথুবে একটি নতুন সংগ্রহশালা তৈরি করুন।

    এখানে চিত্র বর্ণনা লিখুন

  2. সদ্য নির্মিত রেপো ডাউনলোড করুন এবং পুরানো দূরবর্তী সংগ্রহস্থল যুক্ত করুন।

    git clone https://github.com/alexbr9007/Test.git
    cd Test
    git remote add OldRepo https://github.com/alexbr9007/Django-React.git
    git remote -v
    
  3. পুরানো রেপো থেকে সমস্ত ফাইল আনুন যাতে একটি নতুন শাখা তৈরি হয়।

    git fetch OldRepo
    git branch -a
    

    এখানে চিত্র বর্ণনা লিখুন

  4. মাস্টার শাখায়, পুরানো রেপোটি সদ্য নির্মিত একটির সাথে একত্রিত করতে মার্জ করুন।

    git merge remotes/OldRepo/master --allow-unrelated-histories
    

    এখানে চিত্র বর্ণনা লিখুন

  5. ওল্ডরোপো থেকে যুক্ত করা সমস্ত নতুন তৈরি সামগ্রী সংরক্ষণ করার জন্য একটি নতুন ফোল্ডার তৈরি করুন এবং এর ফাইলগুলি এই নতুন ফোল্ডারে স্থানান্তর করুন।

  6. শেষ অবধি, আপনি সম্মিলিত রেপোগুলি থেকে ফাইলগুলি আপলোড করতে পারেন এবং গিটহাব থেকে নিরাপদে ওল্ডের্পো মুছতে পারেন।

আশা করি দূরবর্তী সংগ্রহস্থলগুলি মার্জ করার সাথে এটি কারও পক্ষে কার্যকর হতে পারে।


1
এই একমাত্র সমাধান যা আমার পক্ষে গিট ইতিহাস সংরক্ষণের জন্য কাজ করেছিল। পুরানো রেপোর সাথে দূরবর্তী লিঙ্কটি সরাতে ভুলবেন না git remote rm OldRepo
হারুবিওরি

7

ব্যবহার করে দেখুন

git rebase --root --preserve-merges --onto

তাদের জীবনের প্রথম দিকে দুটি ইতিহাস লিঙ্ক করতে।

আপনার যদি ওভারল্যাপ করে এমন পাথ থাকে তবে সেগুলি ঠিক করুন

git filter-branch --index-filter

আপনি যখন লগ ব্যবহার করেন, তখন নিশ্চিত হন যে আপনি "আরও অনুলিপিগুলি আরও সন্ধান করুন"

git log -CC

এই পথে আপনি কোনও ফাইলের নড়াচড়া দেখতে পাবেন।


গিট ডকুমেন্টেশন রিবাইস না করার পরামর্শ দেয় ... git-scm.com/book/en/v2/Git-Branching- রিবেসিং
স্টিফেন টার্নার

7

আমি সমাধানটি @ ফ্লিম থেকে এটিকে এর git aliasমতো করে পরিণত করেছি (আমার সাথে যুক্ত করা হয়েছে ~/.gitconfig):

[alias]
 mergeRepo = "!mergeRepo() { \
  [ $# -ne 3 ] && echo \"Three parameters required, <remote URI> <new branch> <new dir>\" && exit 1; \
  git remote add newRepo $1; \
  git fetch newRepo; \
  git branch \"$2\" newRepo/master; \
  git checkout \"$2\"; \
  mkdir -vp \"${GIT_PREFIX}$3\"; \
  git ls-tree -z --name-only HEAD | xargs -0 -I {} git mv {} \"${GIT_PREFIX}$3\"/; \
  git commit -m \"Moved files to '${GIT_PREFIX}$3'\"; \
  git checkout master; git merge --allow-unrelated-histories --no-edit -s recursive -X no-renames \"$2\"; \
  git branch -D \"$2\"; git remote remove newRepo; \
}; \
mergeRepo"

12
শুধু কৌতূহলী: আপনি কি আসলেই এটির কোনও প্রয়োজনের জন্য যথেষ্ট প্রয়োজন?
পার্কার কোয়েটস

1
না আমি তবে এটি কখনই করতে পারি তা কখনই মনে করতে পারে না কারণ এটির একটি নাম আমার কাছে এটি মনে রাখার এক উপায়।
ফ্রেডরিক এরল্যান্ডসন

1
হ্যাঁ .. তবে কম্পিউটার পরিবর্তন করার চেষ্টা করুন এবং আপনার উপনামগুলি সরিয়ে দিতে ভুলে যাবেন;)
কোয়েটজলকোটল

1
এর মান কী $GIT_PREFIX?
neowulf33

github.com/git/git/blob/… 'GIT_PREFIX' মূল বর্তমান ডিরেক্টরি থেকে 'গিট রেভ-পার্স - শো-প্রেফিক্স' চালিয়ে প্রত্যাবর্তন হিসাবে সেট করা হয়েছে। লিঙ্কজিট দেখুন: গিট-রেভ-পার্স [1]।
ফ্রেডরিক এরল্যান্ডসন

3

এই ফাংশন রিমোট রেপো স্থানীয় রেপো দির মধ্যে ক্লোন করবে:

function git-add-repo
{
    repo="$1"
    dir="$(echo "$2" | sed 's/\/$//')"
    path="$(pwd)"

    tmp="$(mktemp -d)"
    remote="$(echo "$tmp" | sed 's/\///g'| sed 's/\./_/g')"

    git clone "$repo" "$tmp"
    cd "$tmp"

    git filter-branch --index-filter '
        git ls-files -s |
        sed "s,\t,&'"$dir"'/," |
        GIT_INDEX_FILE="$GIT_INDEX_FILE.new" git update-index --index-info &&
        mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"
    ' HEAD

    cd "$path"
    git remote add -f "$remote" "file://$tmp/.git"
    git pull "$remote/master"
    git merge --allow-unrelated-histories -m "Merge repo $repo into master" --edit "$remote/master"
    git remote remove "$remote"
    rm -rf "$tmp"
}

ব্যবহারবিধি:

cd current/package
git-add-repo https://github.com/example/example dir/to/save

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

লাভ!


আমি ব্যাশের পরিবর্তে zsh এবং গিটের v2.13.0 ব্যবহার করছি। আমি যা চেষ্টা করেছি তা বিবেচনা করার পরেও আমি git filter-branch --index-filterকাজ করতে সক্ষম হইনি । সাধারণত আমি একটি ত্রুটি বার্তা পাই যে নতুন সূচক ফাইলটি বিদ্যমান নেই doesn't এটি কি কোনও ঘন্টা বাজে?
প্যাট্রিক দাড়ি

@ পেট্রিকবার্ড আমি জেডএস জানি না, আপনি git-add-repo.shউপরের ফাংশন দিয়ে পৃথক ফাইল তৈরি করতে পারবেন, ফাইলটির শেষে এই লাইনটি রাখুন git-add-repo "$@"। এরপর আপনার কাছ থেকে zsh মত এটি ব্যবহার করতে পারেন cd current/git/packageএবংbash path/to/git-add-repo.sh https://github.com/example/example dir/to/save
আন্দ্রে Izman

সমস্যাটি এখানে আলোচনা করা হয়েছিল: stackoverflow.com/questions/7798142/… mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE" কখনও কখনও ব্যর্থ হয়, তাই আপনাকে একটি যুক্ত করতে হবে if test
প্যাট্রিক বিয়ার্ড

1
আমি এই পদ্ধতি ব্যবহার না! আমি স্ক্রিপ্টটি চেষ্টা করেছিলাম, নির্বাক এবং ভারব্যাটিম (আমি কেবল সেই অংশের জন্য নিজেকে দোষ দিতে পারি), এবং এটি আমার স্থানীয় গিট রেপোকে ক্লোবার করে দিয়েছে। ইতিহাসটি বেশিরভাগ ক্ষেত্রে সঠিক বলে মনে হয়েছিল, তবে গিথুবকে ফিরে গিট ঠেলে দেওয়ার ফলে ভয়ঙ্কর "আরপিসি ব্যর্থ হয়েছে; 55 টি এসএসএল-রাইট () এসআইএসসিএল ফিরে এসেছে, ত্রুটিযুক্ত = 32" ত্রুটি। আমি এটি মেরামত করার চেষ্টা করেছি, তবে এটি অপূরণীয়ভাবে ভেঙে গেছে। আমি একটি নতুন স্থানীয় রেপোতে জিনিসগুলি পুনর্গঠন করে শেষ করেছি।
মেসন 17

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

2

উভয় গিটারের ইতিহাস একত্রীকরণের মাধ্যমে একটি রেটকে অন্য রেপোতে এম্বেড করার পদক্ষেপগুলি অনুসরণ করুন।

  1. আপনি একত্রিত করতে চান উভয় রেপো ক্লোন করুন।

গিট ক্লোন git@github.com: ব্যবহারকারী / পিতা-মাতা-repo.git

গিট ক্লোন git@github.com: ব্যবহারকারী / শিশু- repo.git

  1. চাইল্ড রেপোতে যান

সিডি চাইল্ড-রেপো /

  1. নীচের কমান্ডটি চালান, পথের my/new/subdir(3 টি উপস্থিতি) ডিরেক্টরি কাঠামোর সাথে প্রতিস্থাপন করুন যেখানে আপনি শিশু রেপো রাখতে চান।

গিট ফিল্টার-শাখা - প্রি-খালি - ট্রি-ফিল্টার 'যদি [! -e আমার / নতুন / সাবডির]; তারপরে mkdir -p আমার / নতুন / subdir গিট ls- গাছ - নাম-কেবল $ GIT_COMMIT | xargs -I ফাইলগুলি এমভি ফাইলগুলি আমার / নতুন / সাবডির ফাই '

  1. প্যারেন্ট রেপোতে যান

সিডি ../pare-repo/

  1. শিশু রেপোতে পথ নির্দেশ করে, প্যারেন্ট রেপোতে একটি রিমোট যুক্ত করুন

গিট রিমোট অ্যাড চাইল্ড-রিমোট .. / শিশু-রিপো

  1. চাইল্ড রেপো আনুন

গিট আনতে চাইল্ড-রিমোট

  1. ইতিহাস একত্রিত করুন

গিট মার্জ - নিবন্ধ-সম্পর্কহীন-ইতিহাস শিশু-রিমোট / মাস্টার

যদি আপনি এখন পিতামাতুর রেপোতে গিট লগটি পরীক্ষা করেন তবে চাইল্ড রেপো একত্রিত করা উচিত। আপনি কমিট উত্স থেকে নির্দেশিত ট্যাগটিও দেখতে পারেন।

নীচের নিবন্ধটি আমাকে দুটি রেপিতে একটি রেপো এম্বেড করতে সহায়তা করেছে, উভয় গিটারের ইতিহাস একত্রিত করে একক গিট ইতিহাস রয়েছে।

http://ericlathrop.com/2014/01/combining-git-repositories/

আশাকরি এটা সাহায্য করবে. শুভ কোডিং!


পদক্ষেপ 3 আমার জন্য সিনট্যাক্স ত্রুটিতে ব্যর্থ হয়েছিল। আধা-কলোন অনুপস্থিত। স্থির করুনgit filter-branch --prune-empty --tree-filter ' if [ ! -e my/new/subdir ]; then mkdir -p my/new/subdir; git ls-tree --name-only $GIT_COMMIT | xargs -I files mv files my/new/subdir; fi'
ইউরি এল

1

আপনি সংগ্রহস্থলের একত্রীকরণ করতে চান বলুন aমধ্যে b(আমি অভিমানী করছি তারা একে অন্যকে পাশাপাশি অবস্থিত করছি):

cd b
git remote add a ../a
git fetch a
git merge --allow-unrelated-histories a/master
git remote remove a

আপনি যদি aএকটি উপ-ডিরেক্টরিতে রাখতে চান তবে উপরের কমান্ডগুলির আগে নিম্নলিখিতটি করুন:

cd a
git filter-repo --to-subdirectory-filter a
cd ..

এই জন্য প্রয়োজন git-filter-repoইনস্টল ( filter-branchহয় নিরুৎসাহিত )।

2 টি বড় সংগ্রহস্থল মার্জ করার উদাহরণ, সেগুলির একটিকে উপ-ডিরেক্টরিতে রেখে: https://gist.github.com/x-yuri/9890ab1079cf4357d6f269d073fd9731

এটি এখানে আরও

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