2010-11-19 2 views
4

Через поиск Я нашел, как Mercurial игнорирует определенные каталоги (и файлы/каталоги, которые они содержат) , которые находятся в корне каталога хранилища, но я не могу работать как продлить это до каталогов, которые находятся на нескольких уровнях в.Если Mercurial игнорирует все, кроме определенных подкаталогов

В этом случае, я хотел бы только управление версиями следующих каталогов:

app/design/frontend/rc 
skin/frontend/rc 

В результате, мой файл .hgignore выглядит следующим образом.

syntax=regexp 
^(?!(app(/|$))|(skin(/|$))) 
^app/code 
^app/design/adminhtml 
^app/design/frontend/base 
^app/design/frontend/default 
^app/design/install 
^app/etc 
^app/locale 
^app/Mage.php 
^app/.htaccess 
^skin/adminhtml 
^skin/frontend/base 
^skin/frontend/default 
^skin/install 

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

+0

Nail имеет правильный ответ. Не мучайтесь с отрицательными утверждениями в синтаксисе regex, просто игнорируйте «. *», А затем вручную «hg add» файлы, которые вы хотите отслеживать. Добавить переопределяет '.hgignore', поэтому, как только вы их добавляете, вы как будто создали непрочитанное исключение в regexp. –

+0

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

+0

, обновляя мой ответ, я заметил опечатку в вашем .hgignore. Это должен быть синтаксис: regexp', а не 'синтаксис = regexp'. –

ответ

3

Вручную добавьте каталоги, которые вы хотите разместить в репозитории, а затем проигнорируйте все остальное.

hg init 
hg add app/design/frontend/rc 
hg add skin/frontend/rc 

Затем в .hgignore:

syntax: glob 

** 
+0

Спасибо за ответ. Насколько я понимаю, это означало бы, что я должен вручную добавлять эти каталоги/файлы каждый раз, когда добавлялись новые файлы, поэтому я все еще надеюсь, что смогу получить отрицательное утверждение. –

+0

@ Давид Оливер, он не означает добавить их в файл игнорирования, он означает добавить их в репо в фиксации. Mercurial автоматически не запускает отслеживание каждого файла в каталоге. Он знает, что он там, но не знает, что с ним делать. – msarchet

+1

@msarchet: Спасибо, но я это понимаю. Я пытаюсь избегать явно указывать Mercurial для добавления новых файлов в директории, которые я хочу контролировать версиями. –

Смежные вопросы