Я пытаюсь использовать состояние слияния git для поддерева, где подкаталог, в который я хочу слиться, вложен довольно глубоко - в настоящее время он имеет четыре уровня.
Я следовал указаниям здесь , чтобы добавить репозиторий модулей в качестве удаленного, запустив git read-tree, чтобы получить удаленный код в подкаталог в моем локальном репо и зафиксировать эти изменения.
Моя проблема возникает, когда я пытаюсь вытянуть и объединить изменения с пульта в главную ветвь моего основного проекта. Шаг 5 на странице выше предлагает git pull с переключателем поддерева -s. Это правильно работает для меня, когда мой подкаталог имеет глубину один, два или три уровня, но не четыре.
Вот результат слияния в подкаталог глубиной 2 уровня. Вы видите, что файл README на сайтах / всех / был обновлен правильно. В моем удаленном репо README находится в корне.
$ git pull -s subtree REMOTE_REPO master
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /path/to/my/REMOTE_REPO
* branch master -> FETCH_HEAD
Merge made by subtree.
sites/all/README | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
Здесь подкаталог имеет 3 уровня глубины: sites / all / modules /. Это тоже отлично работает, вытягивая изменения и обновляя файлы.
$ git pull -s subtree REMOTE_REPO master
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /path/to/my/REMOTE_REPO
* branch master -> FETCH_HEAD
Merge made by subtree.
sites/all/modules/README | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
Но теперь мой код находится в подкаталоге глубиной 4 уровня: sites / all / modules / my_module /. Git, похоже, извлекает изменения из REMOTE_REPO, но не обновляет файлы, а вместо этого говорит мне, что он уже обновлен.
$ git pull -s subtree REMOTE_REPO master
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /path/to/my/REMOTE_REPO
* branch master -> FETCH_HEAD
Already up-to-date!
Merge made by subtree.
И если я сразу же запустлю его, он не извлечет изменения и не обновит файлы.
$ git pull -s subtree REMOTE_REPO master
From /path/to/my/REMOTE_REPO
* branch master -> FETCH_HEAD
Already up-to-date.
Просмотр журнала git в этот момент покажет мне изменения из удаленного репо и слияния, но файлы в моей кассе не были обновлены.
Это ошибка, или я что-то не так делаю?
Обновление: Крис Джонсен предложил следующую опцию, которая выдает ошибку:
$ git pull -X subtree=sites/all/modules/my_module/ REMOTE_REPO master
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /Users/jeff/work/checkouts/compass_suite
* branch master -> FETCH_HEAD
fatal: entry not found in tree 173d4f16af4d2d61ae5c4b3446c392e8b49cc57d