Perforce: запрет Perforce изменять формат текстового файла

Есть ли способ сказать Perforce оставить текстовые файлы в покое, не устанавливая тип файла как двоичный? Или, за исключением этого, есть ли способ указать клиенту Perforce сравнивать двоичные файлы? Двоичные обычно нежелательны, потому что я теряю способность различать.

Чтобы уточнить: если я редактирую и вношу изменения в файл *.txt в своем оконном клиенте, новые строки будут иметь CR + LF в соответствии с форматом DOS. Но если я синхронизирую P4 на клиенте Unix, у него будет только LF. Мне нужно, чтобы Perforce сохранял формат как есть, независимо от того, где находится клиент Perforce.

Тем не менее, у меня есть обходной путь: установить тип файла как двоичный; и/или создать ветку с текстовыми файлами, установленными как «текстовые», и периодически интегрировать обратно в основную ветку, где текстовые файлы устанавливаются как «двоичные». Но это слишком сложный обходной путь для того, что должно быть очень простой проблемой.

Наконец, у меня Perforce клиент Windows 2006.2.

Заранее спасибо.


person hythlodayr    schedule 28.01.2010    source источник
comment
Вот более важный вариант использования IMHO для того же вопроса: как сохранить build.sh и build.bat в одном каталоге, не нарушая ни того, ни другого? С сетевыми файловыми системами/виртуальными машинами/WSL их можно даже активно использовать одновременно. Системы контроля версий должны по умолчанию рассматривать пользовательский ввод как священный.   -  person MarcH    schedule 27.11.2018


Ответы (5)


Установите для всех спецификаций вашего клиента/рабочей области окончание строки «unix». Тогда никакое преобразование не произойдет, когда вы зарегистрируетесь в Windows.

См. http://answers.perforce.com/articles/KB_Article/CR-LF-Issues-and-Text-Line-endings/

person Douglas Leeder    schedule 29.01.2010
comment
В порядке. Это намного лучше. Хотя это и не идеально, это намного лучше, чем создавать отдельную ветку. Спасибо! - person hythlodayr; 01.02.2010
comment
Ссылка обновлена ​​на: answers.perforce.com /articles/KB_Article/ - person Lester Cheung; 01.05.2013
comment
Я попытался обобщить (запутанную) документацию, пожалуйста, помогите просмотреть: stackoverflow.com/questions/10721294/ - person MarcH; 27.11.2018
comment
Спасибо Спасибо спасибо! Примечание. После того, как я выбрал вариант окончания строки unix в параметрах Perforce, я сделал «Получить версию» и выбрал «Принудительно» для повторного получения файлов, и они по-прежнему были не такими, как я хотел. их. Тем не менее, я преобразовал их еще раз, чтобы все они имели правильные окончания строк, затем я отправил Perforce еще 1 раз, и теперь он, наконец, работает правильно. - person Loduwijk; 18.10.2019

Клиент Perforce может правильно обрабатывать окончание строки при синхронизации с разными платформами, если на вашем клиенте правильно установлена ​​опция LineEnd. Может у вас неправильно настроены? Откройте спецификации вашего клиента и установите параметр LineEnd в соответствии с вашими потребностями.

Ознакомьтесь с этой статьей базы знаний на их веб-сайт для получения дополнительной информации. Вот отрывок:

На стороне сервера Perforce обрабатывает все текстовые файлы, используя окончания строк LF в стиле Unix. Хотя Perforce хранит серверные архивные файлы на диске в собственном соглашении об окончании строки операционной системы (CR/LF в Windows, LF в Unix), все окончания строк нормализуются к окончаниям строк LF в стиле Unix для внутренних операций Perforce Server, таких как p4. sync, p4 submit и p4 diff.

На стороне клиентской рабочей области обработка окончаний строк в Perforce определяется глобальным параметром для каждой спецификации клиента. Когда вы синхронизируете текстовые файлы с рабочей областью клиента с помощью синхронизации p4 или отправляете их обратно на сервер Perforce Server с помощью отправки p4, их окончания строк преобразуются, как указано в разделе LineEnd спецификации клиента.

person raven    schedule 28.01.2010
comment
Я этого боялся, но спасибо за статью. Проще говоря, наши perforce-клиенты Unix (и файловый сервер) должны быть в состоянии хранить смесь текстовых файлов Windows и Unix. Еще хуже: у нас есть определенные текстовые файлы локализации (подобные файлам свойств Java), которые сервер Perforce искажает. Увы, единственное решение — установить двоичный код. - person hythlodayr; 29.01.2010
comment
@hythlodayr: У вас есть контракт на поддержку с Perforce? Если да, то можно было бы им позвонить. Возможно, они знают какие-то хитрости, которые помогут заставить его вести себя так, как вы хотите. - person raven; 29.01.2010
comment
Проблема в том, что это не работает, а Perforce отказывается признавать ошибку. Perforce по умолчанию повреждает все текстовые файлы, если вы когда-либо отправляете файл из * nix, который имеет окончание строки Windows, или наоборот. - person Richard1403832; 03.10.2017
comment
... все окончания строк нормализованы к LF в стиле Unix... сбивает с толку и противоречит этим двум другим утверждениям на той же странице: В клиентских рабочих пространствах UNIX и Mac OS X локальная настройка по умолчанию не приводит к преобразованию конца строки, и: сохранение текстового файла с окончанием строки CRLF в рабочей области unix, а затем его отправка приводит к тому, что файлы сохраняются в хранилище с дополнительными Символы CR в конце каждой строки.... - person MarcH; 27.11.2018

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

Все наши клиенты — ПК с Windows, но Cygwin включен в Perforce Depot. Cygwin является реализацией Unix для Windows и требует, чтобы текстовые файлы использовали LF для окончания строки.

Возможным решением для более старых версий Cygwin является монтирование корня с использованием параметра «текст», что означает, что файлы могут иметь окончания строки CR + LF. Однако при обновлении до Cygwin 1.7.9 это больше не работает, так как монтирование является временным, если только оно не записано в /etc/fstab. Мне не удалось сделать эту работу.

К счастью, гуру Perforce, сидящий рядом со мной, придумал решение, заключающееся в изменении типа файла на binary+D, который использует то же хранилище инкрементных исправлений RCS, что и текстовые файлы, но без автоматического преобразования конца строки.

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

person Dave Knight    schedule 10.08.2011

При добавлении текстовых файлов, которые вы хотите считать двоичными, в Perforce используйте команду p4 add с параметром -t, чтобы переопределить таблицу сопоставления типов. См. документацию здесь. Пример, приведенный там, p4 add -t binary file.pdf.

person Permaquid    schedule 08.02.2010

Дайте файлам другое расширение.

person Permaquid    schedule 28.01.2010
comment
Нет, так как это должны быть файлы производственного качества. Нужно иметь возможность беспрепятственно и без проблем синхронизировать и копировать в среду. В том же духе unix2dos тоже не вариант. - person hythlodayr; 28.01.2010