Чи можете ви "проігнорувати" файл у Perforce?


101

Я іноді використовую функцію "Примирити роботу в автономному режимі ...", знайдену в P4V IDE Perforce, щоб синхронізувати будь-які файли, над якими я працював під час відключення від депо P4. Він запускає ще одне вікно, яке виконує "Різницю папки".

У мене є файли, які я ніколи не хочу перевіряти у контролі джерела (наприклад, такі, які знаходяться у папці бін, такі як DLL, вихідний код, що генерується кодом тощо). Чи є спосіб відфільтрувати ці файли / папки з "нових", які можуть бути додано. Вони, як правило, переповнюють список файлів, які мене насправді цікавлять. Чи P4 має еквівалент функції "ігнорувати файл" Subversion?


Чи можете ви надати приклад виходу CVS, щоб ми побачили, що ви маєте на увазі, і чому наведені відповіді не роблять те, що ви хочете?
Грег Вітфілд,

2
На форумі ідеї Perforce ви можете проголосувати за пропозицію щодо списку ігнорування в стилі Git p4ideax.com/ideas/15/ignore-support
полковник Паніка

Натисніть "Примірити роботу в режимі офлайн", зніміть прапорець "Локальні файли не в депо", натисніть "Примирити". Поки ви не додаєте файли, це, мабуть, найшвидший спосіб вирішення.
провулок

Відповіді:


59

З версії 2012.1 Perforce підтримує P4IGNOREзмінну середовища. Я оновив свою відповідь на це питання про ігнорування каталогів з поясненням того, як це працює. Тоді я помітив цю відповідь, яка зараз, мабуть, зайва.


Якщо припустити, що у вас є клієнт з назвою "КЛІЄНТ", каталог з назвою "foo" (розташований у корені проекту), і ви хочете ігнорувати всі .dll файли у цьому дереві каталогів, ви можете додати наступні рядки до подання робочої області для досягнення цього. це:

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

Перший рядок видаляє їх з каталогу "foo", а другий рядок видаляє їх з усіх підкаталогів. Тепер, коли ви 'Reconcile Offline Work ...', усі .dll файли будуть переміщені в папки "Виключені файли" в нижній частині дисплея. Вони будуть у вас поза дорогою, але все ж можете переглядати та маніпулювати ними, якщо вам справді потрібно.

Ви також можете зробити це іншим способом, що зменшить папку "Виключені файли" до однієї, але ви не зможете маніпулювати жодними файлами, які вона містить, оскільки шлях буде пошкоджений (але якщо ви просто хочете їх вийти вашого шляху, це не має значення).

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

30
Хоча це працює, це не дуже корисно, оскільки вам доведеться вводити ці рядки у кожну робочу область, яку ви коли-небудь створюєте.
dgrant

6
Примітка: це не працює для нормальної роботи в режимі офлайн з p4v. "Виключені файли", здається, знаходяться лише у "просунутому" вікні узгодження ...
Catskul

6
Фільтр виключення не працює всередині Reconcile Offline Workдіалогового вікна. Це спрацьовує, якщо ви відкриєте його всередині, Advanced Reconcile...але це марно, оскільки в 99,9% часу вам не потрібно або хочете скористатися розширеним діалоговим вікном.
sorin

12
@raven: 1) (Приклад :) Деякі проекти використовують bin / obj папки під кожним проектом, а не розміщують їх у центральному місці. (Узагальнений висновок :) Припущення Перфорса про те, що всі проміжні файли розміщуються у легко виключеному місці робочого простору, є надмірно обмежувальним дизайном для створення VCS. 2) Деякі проекти включають локальний кеш та / або інші генеровані користувачем файли в структурі каталогу (наприклад, кеш * .ncb IntelliSense кеш). Неможливість виключити їх як загальну політику сильно погіршує функції Reconcile Offline Work and Diff Folders.
Сем Харвелл

6
Ця конкретна проблема вбиває мене.
Warren P

47

Так, але.

Версія Perforce 2012.1 додала функцію, відому як p4ignore , натхненну Git. Однак розробники Perforce внесли зміни в поведінку без обґрунтування, що може зробити цю функцію набагато менш корисною.

Поки Git приймає правила з усіх .gitignoreфайлів, Perforce не знає, де шукати, поки ви не вкажете ім'я файлу в змінній середовищаP4IGNORE . Ця свобода - це прокляття. Ви не можете зламати два сховища, які використовують різні імена для своїх файлів ігнорування.

Також функція ігнорування Perforce не спрацьовує. Ви можете налаштувати його досить легко для себе, але інші не приносять користі, якщо вони чітко не підключаються. Співавтор, який не може випадково створити файли, які не бажають (наприклад, abin папку, створену скриптом збірки).

Функція ігнорування Git чудова тим, що вона працює в поле. Якщо .gitignoreфайли будуть додані до сховища ( всі це роблять ), вони опрацюють поле для всіх. Ніхто не випадково опублікує їх приватний ключ.

Документи Perforce дивно показують ".p4ignore" як приклад ігнорування правила, яке є зворотним! Якщо правила корисні, їх слід поділити як частину сховища.


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

Якщо ви знаєте когось із Perforce, будь ласка, надішліть їм цю пошту.


2
Дякуємо за роз’яснення Я спробував використовувати .p4ignore з P4VS, але моє рішення, яке повинно було бути проігноровано, не було проігноровано. Спочатку я подумав, що роблю щось не так. Тепер я знаю краще.
Майкл С.

1
@gentlesea, станом на Perforce 2013.1, функція ігнорування нарешті працює в графічному додатку.
Полковник Паніка

2
Обговорення "Зробити поле ігнорування виправити
полковник Паніка

1
Для змінних конфігурацій, які відрізняються залежно від того, яку робочу область ви використовуєте, спробуйте використовувати файли P4CONFIG. Тоді ви можете примусити ваш файл P4CONFIG вказати інше значення P4IGNORE під час переміщення з робочої області в робочу область.
Брайан Пендлтон

2
Perforce не знає, як створити належне програмне забезпечення, вони не отримують навіть основ. Ось чому кожен, хто застряг у силі, мріє про перехід на git.
Павло П

22

Це працює на Perforce 2013.1, новий механізм P4IGNORE був вперше доданий у випуску, 2012.1, описаний у блозі Perforce тут:

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

Як описано в даний час, ви встановлюєте змінну середовища "P4IGNORE" на ім'я файлу, який містить список файлів, які слід ігнорувати.

Тож ви можете перевірити це, щоб побачити, як вам це подобається.


1
Ви також можете включати імена каталогів, а не лише імена файлів.
ashes999

Як вже згадувалося раніше: на жаль, ВИ ХОТИ встановити P4IGNORE.
Технофіл

1
Я виправив посилання @DerMike - я думаю, Perforce змінив їхні URL-адреси блогу.
svec

7

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

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

Я пам’ятаю, що робив це раніше, але у мене немає необхідних дозволів, щоб перевірити це тут. Ознайомтеся з посібником із систематики Perforce та спробуйте його


3
На жаль, це спричиняє помилки при надсиланні, а не ігнорування перегляду узгодження. Таким чином, він може зберігати певні файли з сховища, але він не може допомогти вашим користувачам не бачити шум.
Warren P

6

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.


Так, це працює для мене, щоб поділитися налаштуваннями "ігнорувати" для команди (я використовую p4 2013.2). Зауважте, що він працює лише у депо зі включеними потоками. (Якщо ви можете розповсюдити змінну середовища P4IGNORE = .p4ignore у вашій команді, це, мабуть, найкраще рішення.)
yoyo

1
Зауважте, що поле Ігнорований для потоку може використовуватися для ігнорування певної папки, файлу чи розширення файлу, але підтримка підстановки обмежена, і немає можливості ігнорувати цілу папку, а потім "розблокувати" конкретні файли чи підпапки. (Станом на версію сервера p4 2013.2)
yoyo

3

Пропозиція Вілла використовувати .p4ignoreлише, здається, працює з плагіном WebSphere Studio (P4WSAD). Я просто спробував це на своєму локальному вікні Windows, і будь-які файли та каталоги, які я перерахував, не були проігноровані.

Пропозиція Рейвена про зміну вашої клієнтської специфікації є правильним способом у Perforce. Правильна організація вашого коду / даних / виконуваних файлів та створених вихідних файлів значно полегшить процес виключення перевірки файлів.

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


15
Я повністю не погоджуюся з усією заявою "Правильна організація вашого коду ...". Справа в тому, що після домовленостей Perforce про редагування робочої області потрібно кожен користувач вносити зміни. Тоді як справжній .p4ignore файл буде створений / керований лише один раз.
Майк

9
О, і не кажучи вже про те, що ви любите розгалужувати свій код? Удачі в обслуговуванні робочих просторів для кожної галузі. Це звучить як весело!
Майк

2

ІСТОРИЧНИЙ ВІДПОВІДЬ - більше не правильний. У той час, коли це було написано спочатку, це було правдою;

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

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

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

ОНОВЛЕННЯ: Дивіться прийняту відповідь на нові можливості P4IGNORE, додані в середині 2012 року.


1

Мені було найпростіше узгодити роботу в режимі офлайн, використовуючи такий сценарій 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 .


Це було сім років тому, я не здивований. Я здивований, що все ще використовується Perforce.
кевін клайн

... не за вибором: '(
DerMike

0

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

http://p4delta.sourceforge.net

На жаль, хоча це, здається, створює належний список файлів, я не можу змусити "p4delta --execute" працювати ("Не вдається змінити заморожений рядок"), і проект не оновлювався в рік. Можливо, інші матимуть більше удачі.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.