Як змінити підмодуль git, щоб вказати на підпапку?


101

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

Я хотів би змінити свій підмодуль, щоб вказати на цю папку. Коли я заглядаю в .gitmodules, я бачу

[submodule "backup/src/boto"]
    path = backup/src/boto
    url = https://github.com/boto/boto.git

Яку URL-адресу я повинен використовувати замість https://github.com/boto/boto.git ? Після зміни URL-адреси я повинен видалити папку boto локально та повторно тягнути?


3
Це не зовсім те, що ви хочете - не підмодуль - але ви можете подивитисяgit subtree
Cascabel

1
У підсумку я зробив весь підмодуль і сказав IntelliJ, що папка boto є `` вихідною папкою '', тому вона може знаходити в ній пакети.
ripper234

15
Я не можу повірити, що git не робить цього споконвічно ... поступається
rogerdpack

2
Знайдено аналогічне питання - stackoverflow.com/questions/1121227 / ...
sashoalm

Відповіді:


65

Я боюся, що URL-адреса для субмодулів завжди вказує лише на сховище - ви не можете вказати, що ви хочете лише підпапку сховища, так як git не підтримує "вузьких клонів" взагалі.

Якщо ви не можете жити з тим, щоб мати весь сховище як підмодуль, ви завжди можете створити нове сховище, яке клонується з boto, а потім налаштувати завдання cron для:

  1. git fetch що сховище в каталог
  2. Використовуйте git filter-branchдля оновлення гілки, де підкаталог знаходиться на найвищому рівні.
  3. Додайте цю гілку сховища як підмодуль. Однак, це все трохи нахабно, і моїм уподобанням було б просто жити, маючи все сховище як підмодуль.

24

Ви не можете клонувати лише частину сховища. Це тому, що git трактує сховище як цілий об'єкт: коли ви отримуєте його, ви отримуєте все це .

Отже, рішенням було б отримати підмодуль в іншому каталозі, а потім використати симпосилання для досягнення своєї мети.


У мене є посилання на вікнах ... також працює добре. (це через msys, що я на своїй машині, тому я можу використовувати ln -sяк у Linux)
kumarharsh

7
Vista та & постачайся з MKLink. Я цим користуюся. howtogeek.com/howto/windows-vista/…
Angel S. Moreno

1
Натомість ви можете використовувати жорсткі посилання
KindDragon,

15

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

Сподіваюся, це допомагає.


Що таке "зворотне злиття"? Можете запропонувати приклад?
Сукіма

злиття, яке йде "вище за течією" - від гілки вищого порядку до нижчого. Лінус ненавидить цих. Вони пов'язують історію з іншими галузями, які, можливо, вже були об'єднані.
Адам Дімітрук

Чи можете ви, будь ласка, додати якийсь приклад про "назад злиття" в цій ситуації?
Сяо

Зазвичай це відбувається, коли ви намагаєтесь тримати свою функціональну гілку актуальною, об'єднуючись у ті речі з гілки основної лінії, де кожен об'єднує свої останні зміни. Це погано, оскільки він пов’язує свою галузь з чужою роботою. Якщо продукту потрібна ваша філія, але не одна з інших, яка вже є в галузі інтеграції, це неможливо.
Адам Дімітрук

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