Можете ли вы "игнорировать" каталог в P4V?

Мы используем Visual Studio, которая генерирует множество каталогов bin и obj. Когда я использую функцию 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? Если да, то как? Что я делаю неправильно?

Ответ 1

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

Начиная с 2012 года, переменная среды P4IGNORE может быть установлена ​​для обозначения файла, который будет использоваться для исключения файлов из Perforce. Как Perforce Server (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 для получения дополнительной информации.

Ответ 2

Начиная с версии 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 года, вы все равно можете сделать это в своей спецификации клиента. Синтаксис правил исключения очень немного. Что вы хотите, так это:

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

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

Ответ 3

Существует способ сделать это прямо в Perforce:

  • Меню подключения
  • Изменить текущую рабочую область...

Перемещение по дереву проекта. Щелкните правой кнопкой мыши файл или папку. Выберите включить или исключить файл, папку, все дерево.

Ответ 4

Это отлично работает для меня:

//depot/... //my_workspace_name/...
-//depot/.../.git/... //my_workspace_name/.../.git/...
-//depot/.../xcuserdata/... //my_workspace_name/.../xcuserdata/...
-//depot/.../xcschemes/... //my_workspace_name/.../xcschemes/...
-//depot/.../xcdebugger/... //my_workspace_name/.../xcdebugger/...

Ответ 5

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

p4 revert//Клиент/Foo/.../*. пользователь

p4 revert//Клиент/Foo/.../bin/...

p4 revert//Клиент/Foo/.../obj/...

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

Ответ 6

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