Можете ли вы «игнорировать» файл в Perforce? - PullRequest
98 голосов
/ 11 сентября 2008

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

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

Ответы [ 10 ]

58 голосов
/ 11 сентября 2008

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


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

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

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

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

-//depot/foo.../*.dll //CLIENT/foo.../*.dll
45 голосов
/ 29 октября 2012

Да, но.

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

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

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

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

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


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

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

22 голосов
/ 15 февраля 2012

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

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

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

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

7 голосов
/ 11 июня 2010

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

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

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

6 голосов
/ 02 марта 2012

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.

3 голосов
/ 11 сентября 2008

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

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

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

2 голосов
/ 07 октября 2010

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

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

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

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

ОБНОВЛЕНИЕ: см. Принятый ответ для новой возможности P4IGNORE, добавленной в середине 2012 года.

1 голос
/ 11 февраля 2011

Мне показалось, что проще всего согласовать работу в автономном режиме с помощью 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 .

0 голосов
/ 26 июля 2011

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

http://p4delta.sourceforge.net

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

0 голосов
/ 25 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...