Показать зависимость внешнего кода в Git подмодулем - PullRequest
4 голосов
/ 18 июля 2009

Решенная проблема: для отображения зависимости внешнего кода подмодулями: Благодаря VonC !

Текущая проблема: иметь подмодуль без дублированного содержимого в двух папках

Временное решение текущей проблемы: для изменения имени папки на bin-github, поскольку имя папки в качестве подмодуля - bin. Это означает, что мне нужно дублировать содержимое в моем доме.

Моя домашняя папка зависит от ~ / bin. У меня есть файлы, расположенные в HOME в хранилище Masi , а в ~ / bin в хранилище bin в Github. Моя соответствующая структура папок дома:

~
|-- [drwxr-xr-x] bin
    | -- fileA
    ` -- folderA
    ...

Я хотел бы знать, как показать make ~ / bin подмодуль Git в Masi .

Как сделать ~ / bin подмодулем моего Git в ~ /?


# 3 Ответ на комментарий VonC:

Мои .gitmodules

[submodule "bin"]   
         path = bin
         url = git://github.com/masi/bin.git

Я чувствую, что мне больше не нужно добавлять подмодуль снова, поскольку он есть в моих .gitmodules.

Я бегу

Sam master $ git submodule update
Sam master $ git submodule foreach git pull
Sam master $ ls bin 

# 2 Ответ на ответ VonC:

Я изменил свои .gitmodules на следующие, чтобы у меня не было его дубликата в моем доме.

[submodule "bin"]
    path = bin
    url = git://github.com/masi/bin.git

Кажется, что это другая ситуация, так как я не могу вытащить папку подмодуля-бина так же, как указано выше.

Теперь я получаю следующее в недавно клонированном git-repo

Sam master $ git submodule git init
error: pathspec 'git' did not match any file(s) known to git.
error: pathspec 'init' did not match any file(s) known to git.
Did you forget to 'git add'?                          # I am not sure what this means
Sam master $ git submodule foreach git pull
Sam master $ git submodule update

У меня есть внешний репозиторий в моих .gitmodules. Почему он просит меня git add?


Ответ на ответ VonC:

Я бегу

git submodule add git://github.com/masi/bin.git bin-github-copy

, поскольку я не могу добавить новое хранилище с тем же именем, что и у моей существующей папки bin.

Мои .gitmodules -

[submodule "bin-github-copy"]
    path = bin-github-copy
    url = git://github.com/masi/bin.git

Я бегу

git clone git://github.com/masi/Sam.git

Я получаю директорию emty bin.

Как я могу получить содержимое bin?

1 Ответ

4 голосов
/ 18 июля 2009

Во-первых, не забывайте, что с помощью Git вы не можете «добавить» каталог, только содержимое хотя бы одного файла в этом каталоге.

Тогда у вас есть два варианта:

  • субмодулей , чтобы Masi ссылался на конкретный коммит ваших [ файлов в каталоге ] bin, хранящемся на GitHub (или на последний коммит ветки, сохраненный на GitHub)

  • объединение поддеревьев , чтобы смешать два репозитория и упростить отслеживание изменений в файлах внутри bin непосредственно из репозитория Masi. Это может быть проще в вашем сценарии.

См. этот ответ , чтобы узнать больше об этих 2 стратегиях.


На пути к подмодулям объявление подмодуля - это только половина работы. Вы все еще должны инициализировать свой субмодуль в первый раз с помощью

git submodule git init

Вам нужно вытащить свои подмодули :

git submodule foreach git pull

и затем обновите свой подмодуль

git submodule update

См. Также этот практический пример с подмодулями Git , часть I и подмодулями Git, часть II .

Файл .gitmodules хранит только пути, но версия фиксации сохраняется вместе с основным проектом.
Я создал проект на GitHub , чтобы продемонстрировать, что происходит. В частности, посмотрите this commit , который добавляет субмодуль, чтобы увидеть, что происходит:

+Subproject commit 60be4b09f51d2560802ebd744893bb6f737ef57c
...