Я експериментував з використанням git subtree і зіткнувся з наступною ситуацією.
Я використовував піддерево git, щоб додати зовнішній проект до мого репо, я навмисно зберігав всю історію для висхідного проекту, оскільки я хочу мати можливість посилатися на історію проекту, а також пізніше внести свій внесок у проект вище.
Як виявилося, інший учасник проекту вгору за течією випадково засунув великий файл у головну гілку. Щоб виправити це, проект вище за течією переписав історію і силою натиснув на головного. Створюючи своє "монорепо", я включив цю команду, і я також хотів би її зняти.
Як я можу оновити своє сховище, щоб відобразити нову історію піддірева?
Моєю першою спробою було використовувати фільтр-гілку, щоб повністю видалити піддірець і всю історію.
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch upstream-project-dir' --prune-empty HEAD
Після того, як стару версію піддерева було видалено, я можу повторно додати підкресливе дерево, використовуючи новий головний майстер висхідного потоку. Однак це не спрацювало, оскільки чомусь історія фіксування все ще відображається у виведенні журналу git.
Оновлення
Я написав кроки для створення мінімально відтворюваного прикладу.
Спочатку створіть порожнє git repo.
git init test-monorepo cd ./test-monorepo
Створіть початковий комікс.
echo hello world > README git add README git commit -m 'initial commit'
Тепер додайте піддерево для зовнішнього проекту.
git remote add thirdparty git@github.com:teivah/algodeck.git git fetch thirdparty git subtree add --prefix algodeck thirdparty master
Зробіть кілька зобов’язань на монорепо
echo dont panic >> algodeck/README.md git commit -a -m 'test commit'
Тепер спробуйте використати фільтр-гіт git для видалення піддіаграму.
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch algodeck' --prune-empty HEAD
Вивчіть вихід журналу git, я очікую побачити лише моє початкове введення.
git log
git gc --prune=now
видаляв би лише документи, які не відображаються в git log
?
git log
, ніяких аргументів, і я все ще бачу старі коміти.