Можете ли вы "игнорировать" файл в Perforce?

Я иногда использую функцию "Reconcile Offline Work...", найденную в Perforce P4V IDE, для синхронизации любых файлов, над которыми я работал, в то время как отключен от депо P4. Он запускает другое окно, которое выполняет "Folder Diff".

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

Ответ 1

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


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

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

Первая строка удаляет их из каталога "foo", а вторая строка удаляет их из всех подкаталогов. Теперь, когда вы "Reconcile Offline Work...", все DLL файлы будут перемещены в папки "Исключенные файлы" в нижней части экрана diff. Они будут в вашем распоряжении, но могут по-прежнему просматривать и манипулировать ими, если вам действительно нужно.

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

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

Ответ 2

Да, но.

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

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

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

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

Как ни странно, Perforce docs показывает ".p4ignore" как пример игнорирующего правила, которое находится в обратном направлении! Если правила полезны, они должны быть разделены как часть репозитория.


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

Если вы знакомы с Perforce, напишите им это сообщение.

Ответ 3

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

http://www.perforce.com/blog/120130/new-20121-p4ignore

Как описано в этом документе, вы устанавливаете переменную среды "P4IGNORE" в имя файла, которая содержит список игнорируемых файлов.

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

Ответ 4

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

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

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

Ответ 5

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

От 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 beta.

Ответ 6

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

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

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

Ответ 7

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

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

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

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

UPDATE: см. принятый ответ для новых возможностей P4IGNORE, добавленных в середине 2012 года.

Ответ 8

Мне было проще смириться с автономной работой, используя BASH script, как этот:

#!/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.

Ответ 9

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

http://p4delta.sourceforge.net

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

Ответ 10

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