Как поделиться папкой .git между несколькими проектами? - PullRequest
0 голосов
/ 16 ноября 2011

Я хочу работать с Git-репозиториями или суб-репозиториями , как в расширении Mercurial Share .

Итак, вот что у меня есть:

mkdir orig
cd orig
echo "osthuaosteh" > abc
git init --shared
git add abc
git commit -m 'init'
cd ..
mkdir another

Как можноЯ инициализирую репозиторий в another, чтобы он разделял репозиторий с orig?

Мне это нужно для большой библиотеки, которую я хочу включить в качестве под-репозитория.Репо весит сотни мегабайт, поэтому я хочу повторно использовать некоторые папки.

Обновление: я хочу иметь возможность иметь разные ревизии в разных рабочих папках.

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

Я хотел бы спросить вас: действительно ли вам нужен общий доступ к репозиторию?

Как и Mercurial, git создает жесткие ссылки между репозиториями при локальном клонировании, что приводит к небольшому дополнительному потреблению дискового пространства.,Например:

git clone http://example.org/repo repo
git clone repo repo-copy1
git clone repo repo-copy2

Большинство файлов в репозиториях repo-copy1 и repo-copy2 будут жестко связаны с repo и не будут занимать дополнительное дисковое пространство.Только файлы в рабочей копии являются фактическими копиями.

Вы можете подтвердить это поведение следующим образом:

$ df -l
Filesystem    512-blocks      Used Available Capacity  Mounted on
/dev/disk0s2   976101344 217966872 757622472    23%    /
$ git clone --no-checkout repo repo-copy
Cloning into repo-copy...
done.
$ du -cs repo-copy/.git
63528   .
63528   total
$ df -l
Filesystem    512-blocks      Used Available Capacity  Mounted on
/dev/disk0s2   976101344 217967536 757621808    23%    /

Как вы можете видеть, после клонирования репозитория из 65880 блоков (из 512 байт)каждый), количество блоков в файловой системе уменьшилось только на 664 блока.

Если вы клонируете (под) репозиторий с удаленного сервера, вам, возможно, придется вручную создавать жесткие ссылки на другие локальные клоны;для Mercurial вы бы использовали расширение relink для этого;эквивалент git также, кажется, называется, что .

1 голос
/ 16 ноября 2011

С подмодулями git, которые будут (и с вашим примером) в пути another:

git init # (to make another a git-repo)
git submodule add ../orig orig # to make orig a submodule of another
git commit # to commit the addition of the submodule

.Вы пробовали git submodule --help?

...