Предотвратить отправку каталога в mercurial

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

-/a     
-/b

Я хочу отправить свою первоначальную фиксацию в удаленный репозиторий на Bitbucket. Однако я хочу игнорировать каталог b, чтобы его не нажимали. я добавил

syntax:
glob b/**

в мой файл .hgignore. Каталог b все равно будет перемещен.

Как я могу предотвратить это?


person kayfun    schedule 29.03.2012    source источник


Ответы (2)


в .hgignore добавить:

^b/.*

или b/*, если вы используете низший синтаксис glob (регулярное выражение дает вам гораздо больше контроля).

Синтаксис определяется в первой строке, а все правила определяются в следующих отдельных строках.

если вы хотите подстановку, первая строка будет syntax: glob, а если регулярное выражение, первая строка будет syntax: regexp (подразумевается по умолчанию). См. документацию.

Обратите внимание, что mercurial на самом деле не выталкивает пустые каталоги, поэтому единственный способ проверить это, если у вас есть файл в b/

person Preet Kukreti    schedule 29.03.2012
comment
hgignore не только предотвращает отслеживание файлов, но и предотвращает их отправку. Это правильно? - person kayfun; 29.03.2012
comment
@kayfun .hgignore действует как фильтр для отклонения неотслеживаемых файлов (например, при выполнении простого hg add без аргументов). Если у вас уже есть файлы в b/, которые отслеживаются, то они не будут автоматически отключаться от этих файлов. Проверьте (через hg st --all), есть ли уже отслеживаемые файлы в /b, и удалите их вручную (через hg forget), если они есть; они могли быть уже отслежены до того, как вы создали hgignore. - person Preet Kukreti; 29.03.2012

Это невозможно сделать в Mercurial: вы не можете отправить только начальную версию файла, а затем игнорировать более поздние модификации. Вы также не можете отправить часть набора изменений — вы либо отправите весь набор изменений, либо нет. Таким образом, Mercurial гарантирует, что у вас есть непротиворечивый снимок вашего проекта во всех клонах.

Прит прав, когда пишет, что файл .hgignore является фильтром для неотслеживаемых файлов. Файл .hgignore используется для фильтрации вывода таких команд, как hg status, и для фильтрации файлов, добавленных запуском hg add без дополнительных аргументов.

person Martin Geisler    schedule 29.03.2012
comment
Спасибо за ответ. Я просто хочу быть уверен, что понимаю тебя. Каталог b, о котором идет речь в моем вопросе, на самом деле является очень большой библиотекой Zend, поэтому я не хочу, чтобы ее нажимали. Итак, что я должен был сделать изначально, так это создать свой репозиторий, создать файл .hgignore, игнорируя каталог библиотеки zend, добавить файлы в репозиторий, а затем зафиксировать. Таким образом, каталог zend не будет проталкиваться, поскольку он никогда не добавлялся для отслеживания с помощью mercurial. Это правильно? - person kayfun; 29.03.2012
comment
@kayfun: Это правильно — не отслеживайте вещи, которые вы не хотите продвигать. - person Martin Geisler; 29.03.2012
comment
Хорошо, я только что забыл о добавленных файлах, которые я не хочу отслеживать или нажимать. Я уже внес изменения в рабочую копию, что означает, что набор изменений уже существует, я просто выполнил операцию «забыть», которая будет добавлена ​​в набор изменений. Моя первая фиксация была помечена как «Начальная фиксация». Если я фиксирую текущий набор изменений и помечаю его как «изменения», и я решу нажать на пустой удаленный репозиторий, я предполагаю, что «Начальная фиксация» будет нажата 1-й, которая будет включать Zend каталог, «изменения» будут отправлены дальше, в результате чего удаленный репозиторий также забудет каталог zend. Это правильно? - person kayfun; 29.03.2012
comment
@kayfun: удаленный репозиторий удалит каталог Zend при обновлении, и после этого вам придется заново создавать файл. (Выполнение hg forget аналогично hg remove, за исключением того, что файлы остаются в вашей рабочей копии. Остальной мир воспринимает эту операцию как hg remove.) - person Martin Geisler; 29.03.2012
comment
@kayfun, если «Первоначальная фиксация» была зафиксирована в каталоге Zend, она будет отправлена, если вы загрузите в удаленный репозиторий. Это часть истории. Если вы не отправили ничего в удаленный репозиторий, вы можете удалить папку .hg (историю) и воссоздать 'Initial Commit' с надлежащим игнорированием Zend. - person Mark Tolonen; 31.03.2012