Можно ли “проигнорировать” каталог в P4V?

Мы используем Visual Studio, которая генерирует много из bin и obj каталоги. Когда я использую функцию "Reconcile Offline Work" P4V, они появляются в "Локальных файлах не в базовом" списке.

Я хотел бы исключить их. Я нашел этот вопрос, но это говорит о файлах, и когда я пробую то, что он предлагает (добавление следующего к моему представлению рабочей области), он не работает:

//depot/Foo/... //Client/Foo/...
-//depot/Foo/.../*.user //Client/Foo/.../*.user
-//depot/Foo/.../bin/... //Client/Foo/.../bin/...
-//depot/Foo/.../obj/... //Client/Foo/.../obj/...

Это, на самом деле кажется, не работает на файлы, также: foo.csproj.user файлы все еще отображены в списке.

Я могу исключить каталоги из P4V? Если так, как? Что я делаю неправильно?

49
задан Community 23 May 2017 в 02:10
поделиться

4 ответа

Обновленный ответ: В прошлом это было несколько затруднительно, поскольку не было встроенного способа исключить каталог из команды Perforce. С 2012 года это изменилось. Вы можете взглянуть на хорошую статью по этой проблеме в Perforce.

Начиная с версии 2012.1, переменная окружения P4IGNORE может быть установлена для обозначения файла, который будет использоваться для исключения файлов из Perforce. И сервер Perforce (p4d), и клиент (p4, P4V) должны быть версии 2012.1 или выше. P4IGNORE предназначен для игнорирования файлов при добавлении новых файлов в хранилище и согласовании рабочих пространств. Как и аналогичные функции в других системах контроля версий, P4IGNORE нельзя использовать для игнорирования файлов, уже находящихся под контролем хранилища.

P4Eclipse управляет .p4ignore файлами на своих собственных условиях. (см. руководство по этому вопросу здесь)

Использование клиентских представлений для исключения файлов и каталогов:

Традиционным методом исключения файлов и каталогов в Perforce является использование исключающих клиентских отображений. Полную документацию см. в справочнике команд для Views. Пример представления:

Представление:

//depot/... //test_ws/depot/...
-//depot/dir/etc/... //test_ws/depot/dir/etc/...

Это представление предотвратит добавление файлов в каталог dir/etc в хранилище. Если вы пытаетесь исключить каталог из запросов только для чтения, используйте клиентский или относительный синтаксис.

$ p4 files //depot/dir/etc/...
//depot/dir/etc/foo#1 - add change 1186 (text)
//depot/dir/etc/bar#1 - add change 1186 (text) 


$ p4 files //test_ws/dir/etc/...
//test_ws/test_ignore/ignoredir/... - file(s) not in client view. 

$ cd dir/etc
$ p4 files ...
... - file(s) not in client view.

В качестве альтернативы вы можете использовать команды командной оболочки для фильтрации вывода по своему усмотрению.

p4 files //depot/dir/... |
    awk -F# '{print $1}' |
    grep -v "//depot/dir/etc/" |
    p4 -x - fstat

которая запускает p4 fstat для всех файлов под "//depot/dir/", за исключением файлов под "//depot/dir/etc/". Это исключение каталога достигается путем перечисления всех файлов, а затем с помощью grep удаляются те файлы, которые находятся в исключаемом каталоге. Косая черта в "//depot/dir/etc/" необходима для предотвращения совпадения каталогов под "//depot/dir/", начинающихся с "etc" (например, "//depot/dir/etc2009").

Примечание:

Команда awk предполагает, что нет имен файлов, содержащих символ "#". Команда grep также может считывать свои шаблоны из файла, что полезно, если вам нужно исключить несколько каталогов. Мы используем флаги '-x -' с командой p4, чтобы использовать входные данные в качестве аргументов соответствующей команды; более подробную информацию см. в разделе Глобальные параметры командной строки Perforce.

7
ответ дан 7 November 2019 в 11:43
поделиться

Начиная с версии 2012.1, Perforce поддерживает переменную окружения P4IGNORE. Она позволяет указать файлы и каталоги, которые следует игнорировать при использовании команд поиска или добавления новых файлов (p4 add, p4 status и p4 reconcile).

Чтобы использовать файл игнорирования, создайте файл в корне вашего рабочего пространства и дайте ему какое-нибудь значимое имя. Кажется, что это что-то вроде .ignore или .p4ignore, но подойдет любое (я использовал p4ignore.txt, чтобы можно было редактировать его простым двойным щелчком). Затем заполните его своими правилами игнорирования. Следующее правило будет игнорировать нежелательный мусор, создаваемый Visual Studio:

# directories
bin
obj

# files
*.suo
*.user

После создания этого файла установите переменную окружения P4IGNORE, чтобы она указывала на него. В командной строке введите примерно следующее:

p4 set P4IGNORE=C:\somepath\p4ignore.txt

Обязательно используйте абсолютный путь! В документации Perforce это не указано, и моя первая попытка не сработала (во всяком случае, на Windows), потому что я не указал абсолютный путь.

После этого любая попытка добавить файлы или каталоги, которые находятся в списке игнорирования, будет отклонена, и вы увидите предупреждение, подобное этому (которое они дают вам возможность подавить):

P4V 'ignored' files message


Если вы используете версию сервера Perforce до 2012.1, вы все равно можете сделать это в спецификации клиента. Просто синтаксис ваших правил исключения немного не тот. Вам нужно следующее:

-//depot/Foo.../*.user //Client/Foo.../*.user
-//depot/Foo...bin/... //Client/Foo...bin/...
-//depot/Foo...obj/... //Client/Foo...obj/...

Обратите внимание на пропущенные косые черты после "Foo" и перед "bin" и "obj".

73
ответ дан 7 November 2019 в 11:43
поделиться

Я бы продолжил согласование автономной работы и делал все, кроме отправки. Перед отправкой сделайте следующее:

p4 revert //Client/Foo/.../*.user

p4 revert // Client / Foo /.../ bin / ...

p4 revert // Client / Foo /.../ obj / ...

Это не автоматизировано, но это лучшее, что я могу придумать на данный момент.

-1
ответ дан 7 November 2019 в 11:43
поделиться

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

1
ответ дан 7 November 2019 в 11:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: