Можете ли вы" игнорировать " файл в силу необходимости?


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

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

10 96

10 ответов:

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


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

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

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

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

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

Да, Но.

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

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

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

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

забавно,волей-неволей документы показывает '.p4ignore ' в качестве примера игнорирует правило, которое является обратным! Если правила полезны, они должны совместно использоваться как часть репозитория.


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

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

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

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

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

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

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

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

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

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 бета.

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

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

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

исторический ответ - больше не правильный. В то время, когда это было написано первоначально, это было правдой;

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

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

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

UPDATE: см. принятый ответ для добавления новой возможности 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)'

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

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

http://p4delta.sourceforge.net

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

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