Можно ли проверить подкаталоги репозитория в Git?
Представьте, что я устанавливаю новую установку WordPress. Я создам две новые директории для моего плагина и настройки темы:
wordpress/wp-content/plugins/myplugins/
wordpress/wp-content/themes/mytheme/
Я хочу поддерживать эти каталоги через Git. В Subversion я достиг бы этого, имея trunk/myplugins/
и trunk/mytheme/
каталоги, и проверяя подкаталоги. Есть ли у Git способ выполнить ту же задачу, используя один репозиторий?
Я мог просто пропустить лодку по какой-то парадигме Git, как давний пользователь SVN с небольшим воздействием Git.
Редактировать: несколько ветвей, хранящих различное содержимое, является интересным способом справиться с этим.
git
sparse-checkout
Анника Бэкстрем
источник
источник
Ответы:
Редкие проверки в настоящее время в Git 1.7 .
Также смотрите вопрос « Можно ли сделать редкую проверку без предварительной проверки всего хранилища? ».
Обратите внимание, что для редких проверок по-прежнему требуется загрузить весь репозиторий, даже если некоторые файлы, загружаемые Git, не окажутся в вашем рабочем дереве.
источник
git clone
простая команда ?? Ну, я, используя этот ответ , работает!/foo/bar/foobar
, возможно ли увидеть его только как/foobar
в моем локальном хранилище?Нет реального способа сделать это в git. И если вы не будете вносить изменения, которые влияют на оба дерева одновременно, как на единую рабочую единицу, нет веской причины использовать один репозиторий для обоих. Я думал, что пропущу эту функцию Subversion, но обнаружил, что создание репозиториев требует очень мало административных умственных затрат (просто из-за того, что репозитории хранятся прямо рядом с их рабочей копией, вместо того, чтобы требовать от меня явного выбора какого-либо места вне рабочая копия), к которой я привык просто делать множество небольших одноцелевых репозиториев.
Однако, если вы настаиваете (или действительно нуждаетесь в этом), вы можете создать git-репозиторий с директориями just
mytheme
и,myplugins
и ссылками на них из установки WordPress.MDCore написал:
Обратите внимание, что это не имеет значения для git, если вы решите поместить оба каталога в один репозиторий, потому что git полностью устраняет концепцию монотонно увеличивающегося номера ревизии любой формы.
Единственный критерий того, что нужно собрать в один репозиторий в git - это то, является ли он единым целым, т.е. в вашем случае, есть ли изменения, когда нет смысла смотреть на изменения в каждом каталоге изолированно. Если у вас есть изменения, в которых вам нужно отредактировать файлы в обоих каталогах одновременно, и правки принадлежат друг другу, это должен быть один репозиторий. Если нет, то не обманывайте их вместе.
Git действительно хочет, чтобы вы использовали отдельные репозитории для отдельных сущностей.
Подмодули не учитывают желание хранить оба каталога в одном репозитории, потому что они фактически навязывают наличие отдельного репозитория для каждого каталога, которые затем объединяются в другом репозитории с использованием подмодулей. Хуже того, поскольку каталоги внутри установки WordPress не являются прямыми подкаталогами одного и того же каталога и также являются частью иерархии со многими другими файлами, использование репозиториев для каждого каталога в качестве подмодулей в объединенном репозитории не принесет никакой пользы, потому что унифицированный репозиторий хранилище не будет отражать какой-либо вариант использования / необходимость.
источник
git clone
простая последовательность команд ?? Ну, я, используя этот ответ , работает!Одна вещь, которая мне не нравится в редких извлечениях, это то, что если вы хотите извлекать подкаталог с несколькими каталогами, ваша структура каталогов должна содержать все ведущие к нему каталоги.
Чтобы обойти эту проблему, нужно клонировать репо в месте, не являющемся моим рабочим пространством, а затем создать символическую ссылку в моем каталоге рабочего пространства на подкаталог в репозитории. Git работает очень хорошо, потому что такие вещи, как git status, будут отображать файлы изменений относительно вашего текущего рабочего каталога.
источник
На самом деле, «узкие», «частичные» или «редкие» извлечения находятся в настоящее время в тяжелой разработке для Git. Обратите внимание, у вас все еще будет полный репозиторий
.git
. Итак, две другие записи являются текущими для текущего состояния Git, но похоже , что в конечном итоге мы сможем делать редкие проверки. Проверьте списки рассылки, если вы заинтересованы в более подробной информации - они быстро меняются.источник
git clone --filter
из Git 2.19Эта опция фактически пропускает выборку ненужных объектов с сервера:
Сервер должен быть настроен с:
Начиная с версии v2.19.0 сервер не поддерживается, но его уже можно локально протестировать.
file://$(path)
Требуется преодолетьgit clone
протокол shenanigans: Как мелко клонировать локальный репозиторий git с относительным путем?Помните, что это
--depth 1
уже подразумевает--single-branch
, см. Также: Как мне клонировать одну ветку в Git?TODO:
--filter=blob:none
пропускает все BLOB-объекты, но по-прежнему выбирает все объекты дерева. Но в обычном репо это должно быть крошечным по сравнению с самими файлами, так что это уже достаточно хорошо. На вопрос: https://www.spinics.net/lists/git/msg342006.html Разработчики ответили--filter=tree:0
находится в разработке.Формат
--filter
задокументирован наman git-rev-list
.Для поддержки этой функции было сделано расширение для протокола Git remote.
Документы по дереву Git:
Проверьте это
GitHub upstream .
Выход в Git v2.19:
Выводы: все капли снаружи
d1/
отсутствуют.Обратите внимание, что
root/root
иmybranch/mybranch
также отсутствуют, но--depth 1
скрывает это из списка отсутствующих файлов. Если удалить--depth 1
, то они отобразятся в списке отсутствующих файлов.источник
Как указывает ваше редактирование, вы можете использовать две отдельные ветви для хранения двух отдельных каталогов. Это удерживает их обоих в одном репозитории, но вы по-прежнему не можете иметь коммиты, охватывающие оба дерева каталогов. Если у вас есть изменение в одном, которое требует изменения в другом, вам придется сделать это как две отдельные фиксации, и вы открываете возможность того, что пара проверок двух каталогов может быть не синхронизирована.
Если вы хотите рассматривать пару каталогов как один блок, вы можете использовать «wordpress / wp-content» в качестве корня вашего репозитория и использовать файл .gitignore на верхнем уровне, чтобы игнорировать все, кроме двух подкаталогов, представляющих интерес. Это, наверное, самое разумное решение на данный момент.
Редкие проверки, как утверждается, идут уже два года, но в репозитории git для разработки все еще нет ни признаков, ни каких-либо признаков того, что необходимые изменения когда-либо появятся там. Я бы на них не рассчитывал.
источник
Вы не можете извлечь один каталог из репозитория, потому что весь репозиторий обрабатывается единственной папкой .git в корне проекта вместо множества каталогов .svn в Subversion.
Проблема с работой над плагинами в одном репозитории заключается в том, что при фиксации, например, mytheme, будет увеличиваться номер редакции для myplugin. , поэтому даже в subversion лучше использовать отдельные репозитории.
Парадигма subversion для подпроектов - это svn: externals, что несколько переводит на подмодули в git (но не совсем, если вы уже использовали svn: externals.)
источник
Здесь есть вдохновение. Просто используйте
shell regex
илиgit regex
.Используйте кавычки, чтобы избежать интерпретации регулярных выражений оболочки и передать подстановочные знаки в git.
Первый не рекурсивный, только файлы в 1 глубину
subdir
. Но второй рекурсивен.Что касается вашей ситуации, следующего может быть достаточно.
Просто взломайте строки как требуется.
источник
Вы можете отменить незафиксированные изменения только для определенного файла или каталога:
источник