Підтримуйте git repo всередині іншого git repo


125

Ось що я хотів би:

REPO-A
  /.git
  /otherFiles
  /REPO-B
    /.git
    /moreFiles

Я хочу мати можливість перемістити весь вміст REPO-A до REMOTE-A і лише REPO-B до REMOTE-B.

Можливо?

Відповіді:


104

Здається, ви хочете використовувати підмодулі Git .

Git вирішує цю проблему за допомогою підмодулів. Підмодулі дозволяють зберігати сховище Git як підкаталог іншого сховища Git. Це дозволяє вам клонувати ще один сховище у вашому проекті та зберігати свої зобов’язання окремо.


19
Не зовсім так: це не підштовхне весь вміст repoA: лише плюс плюс посилання на Б. Але я не критикую вашу відповідь, я поспішав писати приблизно так само, коли перечитував питання ОП;)
VonC

1
Це в значній мірі випадки використання субмодулів. РЕПО-А та РЕПО-Б трактуються як власне репост, з власними зобов’язаннями, походженням, історією тощо.
Демієн Вілсон

2
тож якщо я читаю це право, чи можу я самостійно перевірити підмодуль-d repo повністю поза тим, в якому я його знаходжу? Як я міг би прийняти вже існуючий репо-репортаж і вказати його як підмодуль в іншому проекті?
JohnO

я не шукав точно такого ж рішення, як і ОП, і я вважаю, що в середньому це, мабуть, більше шуканий відповідь на подібний питання: "чи розміщення git REPO-B в git REPO-A вставляє посилання або повну копію git REPO-B? ".
jaya

64

Я завжди використовував посилання для підтримки двох окремих і чітких репостів.


8
наскільки здаються заплутаними підмодулі git та підгрупа git, це правильна відповідь.
Тревор Хікі

Це також дуже корисно для складання однієї програми з декількох віддалених сховищ
GeraldScott

22
Для підтримки двох окремих і чітких репостів, чи не було б добре тримати репо B в репо A і просто додати репо B в репо А .gitignore?
Fabien Snauwaert

1
Я думав зробити те, що пропонує Фабієн, чи є проблема з цим зробити?
theonlygusti

1
Я зберігаю окремі сховища git і копіюю зміни, внесені до REPO-B, у копії REPO-B (без .git), яка вкладена в REPO-A. Я роблю це з rsync. Я біжу rsync -avh --delete --exclude='.git' REPO-B/ REPO-A/REPO-B-copy/після того, як якісь зміни в REPO-B
Шай

29

Так, ви можете робити саме те, що вимагаєте, за допомогою ієрархії файлів, яку ви намалювали. Repo-B буде незалежним і не матиме знань про Repo-A. Repo-A буде відслідковувати всі зміни у власних файлах та файлах Repo-B.

Однак я б не рекомендував цього робити. Кожен раз, коли ви змінюєте файли та здійснюєте запис у Repo-B, вам доведеться здійснювати в Repo-A. Відгалуження в Repo-B зіпсується з Repo-A, а розгалуження в Repo-A буде непростим (проблеми з видаленням папок тощо). Підмодулі, безумовно, шлях.


53
Ви не можете просто додати REPO-B до /REPO-A/.gitignore?
mikkelbreum

2
@mikkelbreum У мене була точно така ж ідея. Наразі ми використовуємо субверсію для нашого основного проекту та використовуємо git repo в одній із підпапок. З SVN я просто додав папку з git repo до властивості svn: ignore, і я запитував себе, чи можу я зробити те ж саме з git.
2ndkauboy

3
Ну я не можу зрозуміти, чому додавати вкладений git repo до списку ігнорування батьківського репо не повинно. рідко можна зустріти запропоновані, і багато людей відштовхують від вкладених репост.
mikkelbreum

18
Я щойно реалізував цей точний сценарій. У мене в підпапці є кілька нестиснених CSS-файлів, які я не хочу пересуватись до віддаленого репо, тому це в моєму .gitignore. Але я хочу відстежувати зміни в цих файлах локально. Я встановив репо всередині папки з нестисненими файлами і додав усі файли до цього репо. Батьківське репо все ще ігнорується, але я можу відстежувати зміни всередині субрепортажу. Рекомендовано чи ні, це рішення є ключовим для певних ситуацій, як ця.
BrianVPS

1
Я розумію, що кожного разу, коли ви перемикаєте гілки в одному сховищі, інший побачить цілу купу змін, але чому "розгалуження в Repo-A стане непростим (проблеми з видаленням папок тощо)." Дякую!
user2688151,

2

Ви можете досягти того, що хочете (що REPO-A repo містить усі файли, включаючи файли в папці REPO-B, а не лише посилання), використовуючи "git-subrepo":

https://github.com/ingydotnet/git-subrepo

Він все ще працює, якщо для деяких ваших учасників не встановлена ​​команда subrepo; вони побачать повну структуру папок, але не зможуть вносити зміни до підрепортажів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.