Ответ 1
Собственно, git log --follow
должен работать с слиянием поддерева, но он известен как хакерский в течение длительного времени [1-3].
Можно придерживаться слияния и отдыха поддерева, чтобы стратегия была действительной для отслеживания нескольких историй и терпеливо дождалась неизбежного события, которое git log --follow
улучшится. Это действительно может быть жизнеспособным решением, так как в настоящее время git log --follow
может увидеть некоторую историю в очень полезных случаях. Предположим, вы перенесли файл с реплики toplevel на суб-репо, после чего он может отслеживать полный ход. Если вы хотите отслеживать историю, специфичную для субрепо, вам действительно нужно иметь отдельную копию или проверить ветвь субрепо.
Альтернативы и обходные пути
Вы можете получить журналы для файлов, подобных этому [1]:
git log -- '*filename' # from the toplevel
Здесь просматривается каждое сообщение, касающееся файла, имя которого
заканчивается на filename
. Он не будет следовать фактическим переименованиям и может показывать false
если у вас несколько файлов с одинаковым базовым именем [1].
Вы также можете объединять репозитории с помощью разных стратегий. В [4] показан способ сделать это, что очень близко к тому, что у вас есть с регулярным слиянием поддеревьев, но с прослеживаемыми историями. В принципе, вы:
- добавлять, извлекать и объединять каждый субрепозитор в репозиторий toplevel в виде обычного удаленного, без git поддерева или readtree. Сначала это будет интерпретировать ваш корневой каталог, как если бы он был им, поэтому это должно быть сделано в начале жизненного цикла проекта.
-
git mv
файлы субрепо для отдельных папок
Тогда:
- восходящие изменения могут быть выбраны и объединены нормально, но с флагом
-Xsubtree
на git слияние. - другие случаи должны быть похожими. Я тестировал нажатие вверх по течению, и оно работает, см. Комментарий в [4].
Ссылки
[1] Из списка рассылки git http://git.661346.n2.nabble.com/Bug-Files-are-losing-history-after-subtree-merge-td7597197.html
[2] Из списка рассылки git http://git.661346.n2.nabble.com/gsoc-Better-git-log-follow-support-td6188083.html#a6188352
[3] git log --follow
был в Google Summer of Code
https://git.wiki.kernel.org/index.php/SoC2011Ideas#Better_git_log_--follow_support