Вопрос

Иногда я использую функцию «Согласовать работу в автономном режиме...», имеющуюся в IDE Perforce P4V, для синхронизации любых файлов, над которыми я работал, будучи отключенным от хранилища P4.Он запускает другое окно, которое выполняет «Folder Diff».

У меня есть файлы, которые я никогда не хочу возвращать в систему управления версиями (например, те, которые находятся в папке bin, такие как DLL, выходные данные, сгенерированные кодом и т. д.). Есть ли способ отфильтровать эти файлы/папки, чтобы они не отображались как «новые», которые могут быть добавлен.Они имеют тенденцию загромождать список файлов, которые меня действительно интересуют.Есть ли в P4 эквивалент функции «игнорировать файл» Subversion?

Это было полезно?

Решение

Начиная с версии 2012.1, Perforce поддерживает P4IGNORE переменная среды.Я обновил свой ответ на этот вопрос об игнорировании каталогов с объяснением того, как это работает.Затем я заметил этот ответ, который, я думаю, теперь излишен.


Предполагая, что у вас есть клиент с именем «КЛИЕНТ», каталог с именем «foo» (расположенный в корне вашего проекта), и вы хотите игнорировать все файлы .dll в этом дереве каталогов, вы можете добавить следующие строки в представление рабочей области, чтобы выполнить этот:

-//depot/foo/*.dll //CLIENT/foo/*.dll
-//depot/foo/.../*.dll //CLIENT/foo/.../*.dll

Первая строка удаляет их из каталога «foo», а вторая строка удаляет их из всех подкаталогов.Теперь, когда вы «Согласуете автономную работу...», все файлы .dll будут перемещены в папки «Исключенные файлы» в нижней части экрана различий между папками.Они будут у вас на пути, но вы все равно сможете просматривать их и манипулировать ими, если вам действительно нужно.

Вы также можете сделать это другим способом, который уменьшит вашу папку «Исключенные файлы» до одной, но вы не сможете манипулировать ни одним из содержащихся в ней файлов, поскольку путь будет поврежден (но если вы просто хотите их удалить по-вашему, это не имеет значения).

-//depot/foo.../*.dll //CLIENT/foo.../*.dll

Другие советы

Да, но.

В Perforce версии 2012.1 добавлена ​​функция, известная как p4игнорировать, вдохновленный Git.Однако разработчики Perforce безосновательно внесли изменения в поведение, что сделало эту функцию намного менее полезной.

В то время как Git принимает правила от всех .gitignore файлы, Perforce не знает, где искать, пока вы не укажете имя файла в переменной среды P4IGNORE.Эта свобода является проклятием.Вы не можете взломать два репозитория, которые используют разные имена для игнорируемых файлов.

Кроме того, функция игнорирования Perforce не работает штатно.Вы можете легко настроить его для себя, но другие не получат от этого никакой пользы, если они явно не согласятся.Участник, который этого не сделал, может случайно передать нежелательные файлы (например.а bin папка, созданная сценарием сборки).

Функция игнорирования в Git великолепна, потому что она работает штатно.Если .gitignore файлы добавляются в репозиторий (все делают это), коробочку отработают для всех.Никто случайно не опубликует свой закрытый ключ.

Забавно, Документация Perforce показывает «.p4ignore» в качестве примера правила игнорирования, которое работает наоборот!Если правила полезны, их следует опубликовать как часть репозитория.


Perforce все еще может добиться успеха в этой функции.Выберите соглашение для имен файлов, скажем p4ignore.txt, поэтому эта функция работает штатно.Отбросьте P4IGNORE переменную среды, это контрпродуктивно.Отредактируйте документацию, чтобы побудить разработчиков поделиться полезными правилами.Разрешить пользователям записывать личные правила в файл в своей домашней папке. как это делает Git.

Если вы знаете кого-нибудь из Perforce, отправьте ему это сообщение по электронной почте.

Это работает начиная с Perforce 2013.1, новый механизм P4IGNORE был впервые добавлен в выпуске 2012.1, описанный в блоге Perforce здесь:

https://www.perforce.com/blog/new-20121-p4ignore

Как описано в настоящее время, вы устанавливаете переменную среды «P4IGNORE» для имени файла, который содержит список файлов, которые следует игнорировать.

Так что вы можете проверить это, чтобы увидеть, как вам это нравится.

Если вам нужно решение, которое будет применяться ко всем рабочим пространствам без необходимости копирования, вы (или ваш системный администратор) можете отказаться от отправки этих типов файлов, используя строки, подобные приведенным ниже, в таблице защиты p4:

write user * * -//.../*.suo
write user * * -//.../*.obj
write user * * -//.../*.ccscc

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

Начиная с версии 2011.1, Perforce Streams значительно упрощает игнорирование файлов.Согласно документация, вы можете игнорировать определенные расширения или определенные пути в вашем каталоге.

От p4 help stream

Ignored: Optional; a list of file or directory names to be ignored in
                 client views. For example:

                     /tmp      # ignores files named 'tmp'
                     /tmp/...  # ignores dirs named 'tmp'
                     .tmp      # ignores file names ending in '.tmp'

                 Lines in the Ignored field may appear in any order.  Ignored
                 names are inherited by child stream client views.

По сути, это делает то, что указано в ответе @raven, но с потоками это делается проще, поскольку оно автоматически распространяется на каждое рабочее пространство, использующее этот поток.Это также относится к любым потокам, наследующим от потока, в котором вы указываете типы игнорирования.

Вы можете редактировать поток через p4 stream //stream_depot/stream_name или щелкните поток правой кнопкой мыши в представлении потока p4v.

И, как отметил @svec, скоро появится возможность указывать игнорируемые файлы для каждой рабочей области, и фактически она находится в стадии разработки. P4 2012.1 бета.

Предложение Уилла использовать .p4ignore Кажется, работает только с плагином WebSphere Studio (P4WSAD).Я только что попробовал это на своем локальном компьютере с Windows, и все файлы и каталоги, которые я перечислил, были нет игнорируется.

Предложение Raven об изменении спецификации вашего клиента — правильный путь в Perforce.Правильная организация вашего кода/данных/исполняемых файлов и сгенерированных выходных файлов значительно упростит процесс исключения файлов из проверки.

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

ИСТОРИЧЕСКИЙ ОТВЕТ - уже не верен.В то время, когда это было написано, это было правдой;

Вы не можете записать и зарегистрировать файл, который сервер будет использовать для игнорирования правил;общий шаблон файла glob или регулярного выражения игнорируется принудительно.

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

Короче говоря, я считаю Perforce очень слабым в этой области.Хотя я ценю, что те, кто использует плагин Eclipse, могут использовать .p4ignore, и я думаю, что это здорово, ведь те из нас, кто этого не делает, остаются в неведении.

ОБНОВЛЯТЬ:См. принятый ответ о новой возможности P4IGNORE, добавленной в середине 2012 года.

Я обнаружил, что проще всего согласовывать работу в автономном режиме с помощью сценария BASH, подобного этому:

#!/bin/bash
# reconcile P4 offline work, assuming P4CLIENT is set
if [ -z "$P4CLIENT" ] ; then echo "P4CLIENT is not set"; exit 1; fi
unset PWD # confuses P4 on Windows/CYGWIN

# delete filew that are no longer present
p4 diff -sd ... | p4 -x - delete

# checkout files that have been changed.  
# I don't run this step.  Instead I just checkout everything, 
# then revert unchanged files before committing.
p4 diff -se ... | pr -x - edit

# Add new files, ignoring subversion info, EMACS backups, log files
# Filter output to see only added files and real errors
find . -type f \
 | grep -v -E '(\.svn)|(/build.*/)|(/\.settings)|~|#|(\.log)' \
 | p4 -x - add \
 | grep -v -E '(currently opened for add)|(existing file)|(already opened for edit)'

Я адаптировал это из эта статья базы знаний Perforce.

Я также ищу решение, подобное .p4ignore (а не привязанное к конкретной IDE).На данный момент самое близкое, что я нашел, — это p4delta.Похоже, он сделает именно то, о чем просил оригинальный постер, хотя и через еще один уровень косвенности.

http://p4delta.sourceforge.net

К сожалению, хотя это, кажется, создает правильный список файлов, я не могу заставить работать «p4delta --execute» («Невозможно изменить замороженную строку»), и проект не обновлялся в течение года.Возможно, другим повезет больше.

Если вы используете плагин Eclipse Perforce, то документация плагина перечисляет несколько способов игнорировать файлы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top