подмодули git разрушают мой день - PullRequest
2 голосов
/ 05 июня 2011

В настоящее время я пытаюсь клонировать этот репозиторий git: https://github.com/twilio/OpenVBX в мое основное репо, как если бы это был каталог.Проблема заключается в том, что, когда я пытаюсь зафиксировать основной репозиторий с помощью git add., Ничего в sub dir (подмодуле) не фиксируется, и когда я пытаюсь сделать git add path / to / file, он дает мне фатальную ошибку:«Путь» находится в подмодуле.Похоже, git не отслеживает подкаталог и не замечает, что он и его файлы вообще существуют.

Я оглянулся и наткнулся на эту тему: Невозможно отследить файлы в подмодулях Git Однако исправление в нем, похоже, не работает со мной или моими ограниченными знаниями о git.У меня нет файла .gitmodules в моем основном файле, и каталог .git, который у меня есть, не имеет значения, насколько я могу судить.Могу ли я сделать так, чтобы это больше не было подмодулем?Могу ли я как-нибудь удалить его и прочитать без его git-магистрали?

Я сейчас более чем потерян, заранее спасибо за вашу помощь!

Ответы [ 3 ]

4 голосов
/ 05 июня 2011

Если вы хотите сохранить историю и возможность извлекать последующие изменения, вы можете использовать стратегию слияния git поддерева :

git remote add -f OpenVBX git://github.com/twilio/OpenVBX.git
git merge -s ours --no-commit OpenVBX/master
git read-tree --prefix=OpenVBX/ -u OpenVBX/master
git commit -m "Merge OpenVBX in subdirectory"

А когда вы хотите вытащить OpenVBX:

git pull -s subtree OpenVBX master
2 голосов
/ 05 июня 2011

Насколько я понимаю, я думаю, что ваша проблема в том, что вы неправильно сработали подмодули. Здесь есть два сценария:

1) Вы хотите использовать репозиторий OpenVBX в качестве модуля в своем репо, но у вас нет намерения изменять код в самом репозитории OpenVBX, то есть вы будете использовать библиотеку «как есть» без изменения Это. В этом случае все, что вам нужно сделать, это:

git submodule add git://github.com/twilio/OpenVBX.git plugins/OpenVBX

где plugins / OpenVBX - это путь, куда вы хотите добавить его в свой собственный репозиторий. Например, я выполнил эти шаги на моей установке, и вот как это выглядит:

<pre> ~/Personal$ mkdir test ~/Personal$ cd test/ ~/Personal/test$ echo "Test repo for playing around with submodules" > README ~/Personal/test$ mkdir plugins ~/Personal/test$ echo "I'll keep my plugins here" > plugins/README ~/Personal/test$ git init Initialized empty Git repository in /home/vedang/Personal/test/.git/ ~/Personal/test$ git add . ~/Personal/test$ git commit -m "Initial commit" [master (root-commit) 4539047] Initial commit 2 files changed, 2 insertions(+), 0 deletions(-) create mode 100644 README create mode 100644 plugins/README ~/Personal/test$ git submodule add git://github.com/twilio/OpenVBX.git plugins/OpenVBX Initialized empty Git repository in /home/vedang/Personal/test/plugins/OpenVBX/.git/ remote: Counting objects: 2055, done. remote: Compressing objects: 100% (1315/1315), done. remote: Total 2055 (delta 1132), reused 1430 (delta 695) Receiving objects: 100% (2055/2055), 4.96 MiB | 25 KiB/s, done. Resolving deltas: 100% (1132/1132), done. ~/Personal/test$ git add .gitmodules ~/Personal/test$ git add plugins/OpenVBX ~/Personal/test$ git commit -m "Added openvbx as a submodule" [master 5318022] Added openvbx as a submodule 2 files changed, 4 insertions(+), 0 deletions(-) create mode 100644 .gitmodules create mode 160000 plugins/OpenVBX ~/Personal/test$ git log -p commit 5318022936429a34cabddfeedc3574f7744127c3 Author: Vedang Manerikar Date: Sun Jun 5 16:04:11 2011 +0530</p> <pre><code>Added openvbx as a submodule

diff --git a / .gitmodules b / .gitmodules новый режим файла 100644 индекс 0000000..bbde679 --- / dev / null +++ b / .gitmodules @@ -0,0 +1,3 @@ + [подмодуль "plugins / OpenVBX"] + путь = плагины / OpenVBX + url = git: //github.com/twilio/OpenVBX.git diff --git a / плагины / OpenVBX b / плагины / OpenVBX новый файловый режим 160000 индекс 0000000..ade10d8 --- / dev / null +++ b / плагины / OpenVBX @@ -0,0 +1 @@ + Подпроект коммит ade10d86fd9556e840f337c255037c163facd2a3

Как видите, для git подмодуль - это просто идентификатор фиксации, указывающий на некоторый SHA в каком-либо другом репозитории. Он не заботится о структуре вашего каталога подмодулей.

2) Если вы также хотите изменить код в подмодуле, единственным существенным отличием является то, что у вас должны быть права на запись в репозиторий, который вы добавляете в качестве подмодуля. На github это так же просто, как разветвление родительского репозитория и использование вашего разветвленного репо в качестве подмодуля. В этом случае и git будет рассматривать ваш подмодуль как просто SHA в основном репозитории. Однако, если вы сделаете состояние git внутри каталога подмодуля (в нашем случае plugins / OpenVBX), вы сможете зафиксировать свои изменения и отправить их в хранилище подмодулей.

Использование субмодулей имеет некоторые преимущества по сравнению с простым копированием исходного кода в ваш репозиторий. Основным преимуществом является то, что вы можете быть в курсе оригинальной библиотеки и получать выгоду от дополнительного кода и исправлений ошибок. Я рекомендую вам попробовать использовать подмодули еще раз, прежде чем отказаться от них.

2 голосов
/ 05 июня 2011

Если вы хотите клонировать OpenVBX в свой репозиторий и не заботитесь о его предыдущей истории, сделайте следующее:

rm -rf OpenVBX
git clone https://github.com/twilio/OpenVBX.git
rm -rf OpenVBX/.git
git add OpenVBX
git commit -m "Import OpenVBX version x.y"

Ключевым моментом является rm -rf OpenVBX/.git, который удаляет информацию о хранилище .git из OpenVBX. В остальном он добавляет и фиксирует файлы как обычно.

...