2008-09-10 3 views
96

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

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

+0

Не могли бы вы привести пример вывода CVS, чтобы мы могли видеть, что вы имеете в виду, и почему ответы не делают то, что вы хотите? – 2008-09-19 06:35:58

+1

На форуме идей Perforce вы можете проголосовать за предложение по спискам игнорирования Git-стиля http://p4ideax.com/ideas/15/ignore-support – 2012-09-13 18:39:25

+0

Хит «Reconcile Offline Work», отменить «Локальные файлы не в депо», нажмите «Reconcile». Пока вы не добавляете файлы, это, вероятно, самый быстрый обходной путь. – lane 2015-07-09 07:05:44

ответ

58

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


Предполагая, что вы клиент с именем «КЛИЕНТ», каталог с именем «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 
+30

Хотя это работает, это не очень полезно, так как вам придется помещать эти строки в каждую рабочую область, которую вы когда-либо создавали. – dgrant 2009-11-03 18:37:48

+6

Примечание: это не работает для обычной работы с автономным отключением от p4v. «Исключенные файлы» отображаются только в «расширенном» окне согласования ... – Catskul 2010-01-06 23:04:32

+6

Фильтр исключений не работает внутри диалогового окна «Reconcile Offline Work». Он работает, если вы открываете его внутри «Advanced Reconcile ...», но это бесполезно, потому что в 99,9% случаев, когда вам не нужно или вы хотите использовать расширенный диалог. – sorin 2010-08-11 13:31:27

3

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

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

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

-1

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

7

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

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

Я помню, как это делалось раньше, но у меня нет необходимых прав для проверки этого здесь. Выезд Perforce's Sysadmin guide и ознакомьтесь с.

2

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

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

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

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

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

0

Я нашел, что проще всего совместить автономную работу с помощью 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)' 

Я приспособил это от this Perforce Knowledge Base article.

0

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

http://p4delta.sourceforge.net

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

21

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

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

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

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

6

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

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

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

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

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

43

Да, но.

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

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

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

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

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


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

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

Смежные вопросы