Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.53.0 → 2.54.0 no changes
-
2.52.0
2025-11-17
- 2.50.1 → 2.51.2 no changes
-
2.50.0
2025-06-16
- 2.37.1 → 2.49.1 no changes
-
2.37.0
2022-06-27
- 2.35.1 → 2.36.6 no changes
-
2.35.0
2022-01-24
- 2.32.1 → 2.34.8 no changes
-
2.32.0
2021-06-06
- 2.30.2 → 2.31.8 no changes
-
2.30.1
2021-02-08
-
2.30.0
2020-12-27
- 2.27.1 → 2.29.3 no changes
-
2.27.0
2020-06-01
- 2.21.1 → 2.26.3 no changes
-
2.21.0
2019-02-24
- 2.20.1 → 2.20.5 no changes
-
2.20.0
2018-12-09
- 2.19.1 → 2.19.6 no changes
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 no changes
-
2.18.0
2018-06-21
- 2.17.0 → 2.17.6 no changes
-
2.16.6
2019-12-06
- 2.13.7 → 2.15.4 no changes
-
2.12.5
2017-09-22
- 2.10.5 → 2.11.4 no changes
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
-
2.7.6
2017-07-30
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
- 2.1.4 → 2.3.10 no changes
-
2.0.5
2014-12-17
СИНОПСИС
git p4 clone [<sync-options>] [<clone-options>] <p4-depot-path>… git p4 sync [<sync-options>] [<p4-depot-path>…] git p4 rebase git p4 submit [<submit-options>] [<master-branch-name>]
ОПИС
Ця команда надає спосіб взаємодії з репозиторіями p4 за допомогою Git.
Створіть новий Git-репозиторій з наявного p4-репозиторію за допомогою git p4 clone, надавши йому один або декілька шляхів p4 depot. Включіть нові коміти зі змін p4 за допомогою git p4 sync. Команда sync також використовується для включення нових гілок з інших шляхів p4 depot. Надішліть зміни Git назад до p4 за допомогою git p4 submit. Команда git p4 rebase виконує синхронізацію та перебазує поточну гілку на оновлену віддалену гілку p4.
ПРИКЛАДИ
-
Клонування репозиторію:
$ git p4 clone //depot/path/project
-
Виконайте певну роботу у щойно створеному репозиторії Git:
$ cd project $ vi foo.h $ git commit -a -m "edited foo.h"
-
Оновіть репозиторій Git останніми змінами з p4, перебазувавши свою роботу зверху:
$ git p4 rebase
-
Надішліть ваші коміти назад до p4:
$ git p4 submit
КОМАНДИ
Clone
Зазвичай, git p4 clone використовується для створення нової теки Git з наявного репозиторію p4:
$ git p4 clone //depot/path/project
Це:
-
Створює порожній репозиторій Git у теці з назвою project.
-
Імпортує повний вміст головної ревізії з заданого шляху депо p4 в один коміт у гілці Git refs/remotes/p4/master.
-
Створює локальну гілку «master» з цього віддаленого екземпляра та перевіряє її.
Щоб відтворити всю історію p4 у Git, використовуйте модифікатор @all у шляху depot:
$ git p4 clone //depot/path/project@all
Sync
Оскільки розробка в репозиторії p4 продовжується, ці зміни можна буде включити до репозиторію Git за допомогою:
$ git p4 sync
Ця команда знаходить нові зміни в p4 та імпортує їх як коміти Git.
Репозиторії P4 також можна додати до наявного репозиторію Git за допомогою git p4 sync:
$ mkdir repo-git $ cd repo-git $ git init $ git p4 sync //path/in/your/perforce/depot
Це імпортує вказаний depot до refs/remotes/p4/master у наявному репозиторії Git. Опцію --branch можна використовувати для визначення іншої гілки, яка буде використовуватися для вмісту p4.
Якщо репозиторій Git містить гілки refs/remotes/origin/p4, під час виконання команди git p4 sync вони будуть завантажені та перевірені в першу чергу. Оскільки імпорт безпосередньо з p4 відбувається значно повільніше, ніж отримання змін із віддаленого репозиторію Git, це може бути корисно в середовищі, де працюють кілька розробників.
Якщо є кілька гілок, виконання команди git p4 sync автоматично використовуватиме алгоритм «ВИЯВЛЕННЯ ГІЛОК», щоб спробувати розділити нові зміни в правильній гілці. Це можна перевизначити за допомогою опції --branch, щоб вказати лише одну гілку для оновлення.
Rebase
Поширена схема роботи полягає в отриманні останніх змін з депо p4 та обʼєднанні їх з локальними незафіксованими змінами. Часто репозиторій p4 є кінцевим місцем зберігання всього коду, тому робочий процес перебазування має сенс. Ця команда виконує git p4 sync, а потім git rebase, щоб перемістити локальні коміти поверх оновлених змін p4.
$ git p4 rebase
Submit
Надсилання змін з репозиторію Git назад до репозиторію p4 вимагає окремого робочого простору клієнта p4. Його слід вказати за допомогою змінної середовища P4CLIENT або змінної конфігурації Git git-p4.client. Клієнт p4 має існувати, але кореневу теку клієнта буде створено та заповнено, якщо її ще не існує.
Щоб надіслати всі зміни, які знаходяться в поточній гілці Git, але не в гілці p4/master, використовуйте:
$ git p4 submit
Щоб вказати гілку, відмінну від поточної, використовуйте:
$ git p4 submit topicbranch
Щоб вказати один коміт або діапазон комітів, використовуйте:
$ git p4 submit --commit <sha1> $ git p4 submit --commit <sha1..sha1>
Посиланням на вихідний код зазвичай є refs/remotes/p4/master, але його можна змінити за допомогою параметра командного рядка --origin=.
Зміни p4 будуть створені, коли користувач викличе git p4 submit. Опція --preserve-user призведе до зміни права власності відповідно до автора коміту Git. Ця опція вимагає прав адміністратора в p4, які можна надати за допомогою p4 protect.
Щоб відкласти зміни замість надсилання, використовуйте --shelve та --update-shelve:
$ git p4 submit --shelve $ git p4 submit --update-shelve 1234 --update-shelve 2345
Unshelve
Команда Unshelving візьме відкладений список змін P4 та створить еквівалентний коміт git у гілці refs/remotes/p4-unshelved/<список змін>.
Коміт git створюється відносно поточної ревізії оригіналу (зазвичай HEAD). Батьківський коміт створюється на основі оригіналу, а потім на його основі створюється коміт unshelve.
Початкову версію можна змінити за допомогою опції "--origin".
Якщо цільова гілка в refs/remotes/p4-unshelved вже існує, стара буде перейменована.
$ git p4 sync $ git p4 unshelve 12345 $ git show p4-unshelved/12345 <submit more changes via p4 to the same files> $ git p4 unshelve 12345 <refuses to unshelve until git is in sync with p4 again>
ОПЦІЇ
Загальні параметри
Усі команди, крім clone, приймають ці опції.
- --git-dir <dir>
-
Встановіть змінну середовища
GIT_DIR. Див. git[1]. - -v
- --verbose
-
Надайте більше інформації про прогрес.
Параметри синхронізації
Ці опції можна використовувати як у початковому «клонуванні», так і в наступних операціях «синхронізації».
- --branch <ref>
-
Імпортувати зміни до <ref> замість refs/remotes/p4/master. Якщо <ref> починається з refs/, він використовується як є. В іншому випадку, якщо він не починається з p4/, додається цей префікс.
Зазвичай <ref>, що не починається з refs/, трактується як назва гілки віддаленого відстеження (в refs/remotes/). Цю поведінку можна змінити за допомогою опції --import-local.
Значення <ref> стандартно — «master».
У цьому прикладі імпортується новий віддалений "p4/proj2" до поточного репозиторію Git:
$ git init $ git p4 sync --branch=refs/remotes/p4/proj2 //depot/proj2 - --detect-branches
-
Використайте алгоритм виявлення розгалужень, щоб знайти нові шляхи в p4. Він описаний нижче в розділі "ВИЯВЛЕННЯ ГІЛОК".
- --changesfile <file>
-
Імпортуйте саме ті зміни p4, що вказані у file, по одній на рядок. Зазвичай git p4 перевіряє поточний стан репозиторію p4 та виявляє зміни, які слід імпортувати.
- --silent
-
Не друкуйте жодної інформації про хід виконання.
- --detect-labels
-
Запитуйте p4 на наявність міток, повʼязаних зі шляхами depot, та додавайте їх як теги в Git. Обмежена корисність, оскільки імпортує лише мітки, повʼязані з новими списками змін. Застаріло.
- --import-labels
-
Імпортуйте мітки з p4 у Git.
- --import-local
-
Зазвичай гілки p4 зберігаються в refs/remotes/p4/, де вони будуть оброблятися як гілки віддаленого відстеження командою git-branch[1] та іншими командами. Ця опція натомість поміщає гілки p4 в refs/heads/p4/. Зверніть увагу, що майбутні операції синхронізації також повинні вказувати
--import-local, щоб вони могли знайти гілки p4 в refs/heads. - --max-changes <n>
-
Імпортувати не більше n змін, а не весь діапазон змін, включених у заданий специфікатор редакції. Типовим використанням було б використання @all як специфікатора редакції, а потім використання --max-changes 1000 для імпорту лише останніх 1000 редакцій, а не всієї історії редакцій.
- --changes-block-size <n>
-
Внутрішній розмір блоку, який слід використовувати під час перетворення специфікатора ревізії, такого як @all, на список певних номерів змін. Замість використання одного виклику p4 changes для пошуку повного списку змін для перетворення, існує послідовність викликів p4 changes -m, кожен з яких запитує один блок змін заданого розміру. Стандартний розмір блоку становить 500, що зазвичай є достатнім.
- --keep-path
-
Зіставлення імен файлів зі шляху depot p4 з Git зазвичай передбачає видалення всього шляху depot. З цією опцією повний шлях depot p4 зберігається в Git. Наприклад, шлях //depot/main/foo/bar.c, імпортований з //depot/main/, стає foo/bar.c. З
--keep-path, шлях Git натомість буде depot/main/foo/bar.c. - --use-client-spec
-
Використайте специфікацію клієнта, щоб знайти список цікавих файлів у p4. Див. розділ "СПЕЦИФІКАЦІЯ КЛІЄНТА" нижче.
- -/ <path>
-
Виключити вибрані шляхи depot під час клонування або синхронізації.
Параметри клонування
Ці опції можна використовувати в початковому «клоні» разом з опціями «синхронізації», описаними вище.
- --destination <directory>
-
Де створити репозиторій Git. Якщо не вказано, для створення нової теки використовується останній компонент у шляху p4 depot.
- --bare
-
Виконайте голий клон. Див. git-clone[1].
Параметри надсилання
Ці опції можна використовувати для зміни поведінки git p4 submit.
- --origin <commit>
-
Місце розташування upstream, з якого визначаються коміти для надсилання до p4. Стандартно це найновіший коміт p4, доступний з
HEAD. - -M
-
Виявлення перейменувань. Див. git-diff[1]. Перейменування будуть представлені в p4 за допомогою явних операцій move. Немає відповідної опції для виявлення копій, але є змінні як для переміщень, так і для копій.
- --preserve-user
-
Переоформити зміни p4 перед надсиланням до p4. Для цієї опції потрібні права адміністратора p4.
- --export-labels
-
Експорт тегів з Git як мітки p4. Теги, знайдені в Git, застосовуються до робочої теки perforce.
- -n
- --dry-run
-
Показати, які саме коміти будуть надіслані до p4; не змінювати стан у Git чи p4.
- --prepare-p4-only
-
Застосуйте коміт до робочої області p4, відкриваючи, додаючи та видаляючи файли в p4, як для звичайної операції надсилання. Не виводьте остаточне "p4 submit", а натомість виведіть повідомлення про те, як надіслати вручну або скасувати. Ця опція завжди зупиняється після першого (найстарішого) коміту. Теги Git не експортуються до p4.
- --shelve
-
Замість надсилання створіть серію відкладених списків змін. Після створення кожної полиці (shelve) відповідні файли скасовуються/видаляються. Якщо у вас є кілька комітів, що очікують на розгляд, буде створено кілька полиць.
- --update-shelve CHANGELIST
-
Оновіть наявний список відкладених змін за допомогою цього коміту. Мається на увазі --shelve. Повторіть для кількох відкладених списків змін.
- --conflict=(ask|skip|quit)
-
Конфлікти можуть виникати під час застосування коміту до p4. Коли це трапляється, поведінка зазвичай ("ask") полягає в тому, щоб запитати, чи пропустити цей коміт і продовжити, чи вийти. Цей параметр можна використовувати для обходу запиту, що призведе до автоматичного пропускання конфліктуючих комітів, або для припинення спроб застосування комітів без запиту.
- --branch <branch>
-
Після надсилання синхронізуйте цю гілку з вказаною назвою замість стандартної гілки p4/master. Докладнішу інформацію див. у розділі «Параметри синхронізації» вище.
- --commit (<sha1>|<sha1>..<sha1>)
-
Надсилайте лише вказаний коміт або діапазон комітів, замість повного списку змін, що знаходяться в поточній гілці Git.
- --disable-rebase
-
Вимкнути автоматичне перебазування після успішного надсилання всіх комітів. Також можна налаштувати за допомогою git-p4.disableRebase.
- --disable-p4sync
-
Вимкнути автоматичну синхронізацію p4/master з Perforce після надсилання комітів. Має на увазі --disable-rebase. Також можна встановити за допомогою git-p4.disableP4Sync. Синхронізація з origin/master все одно відбудеться, якщо це можливо.
Гачки для надсилання
p4-pre-submit
Гачок p4-pre-submit виконується, якщо він існує та є виконуваним. Гачок не приймає жодних параметрів та нічого зі стандартного вводу. Вихід із цього скрипта з ненульовим статусом запобігає запуску git-p4 submit. Його можна обійти за допомогою параметра командного рядка --no-verify.
Один із сценаріїв використання — це запуск модульних тестів у гачка.
p4-prepare-changelist
Гачок p4-prepare-changelist виконується одразу після підготовки повідомлення стандартного списку змін та перед запуском редактора. Він приймає один параметр — назву файлу, що містить текст списку змін. Вихід зі скрипта з ненульовим статусом перерве процес.
Мета гачка — редагувати файл повідомлень на місці, і він не пригнічується опцією --no-verify. Цей гачок викликається, навіть якщо встановлено --prepare-p4-only.
p4-changelist
Гачок p4-changelist виконується після того, як користувач відредагував повідомлення зі списком змін. Його можна обійти за допомогою опції --no-verify. Він приймає один параметр — назву файлу, який містить запропонований текст списку змін. Вихід з ненульовим статусом призводить до переривання команди.
Гачку дозволено редагувати файл списку змін і його можна використовувати для нормалізації тексту до певного стандартного формату проєкту. Його також можна використовувати для відмови у надсиланні після перевірки файлу повідомлення.
p4-post-changelist
Гачок p4-post-changelist викликається після успішного надсилання змін у P4. Він не приймає параметрів і призначений переважно для сповіщення, але не може вплинути на результат дії надсилання змін у git p4.
СИНТАКСИС ШЛЯХУ DEPOT
Аргумент шляху до p4 depot для git p4 sync та git p4 clone може бути одним або кількома шляхами до p4 depot, розділеними пробілами, з необовʼязковим специфікатором ревізії p4 в кінці:
- "//depot/my/project"
-
Імпортуйте один коміт з усіма файлами зі зміни #head в цьому дереві.
- "//depot/my/project@all"
-
Імпортуйте один коміт для кожної зміни в історії цього шляху depot.
- "//depot/my/project@1,6"
-
Імпортувати лише зміни з 1 по 6.
- "//depot/proj1@all //depot/proj2@all"
-
Імпортуйте всі зміни з обох вказаних шляхів сховища в одне сховище. Включаються лише файли в цих теках. У Git немає теки для кожного "proj1" та "proj2". Ви повинні використовувати опцію
--destination, якщо вказуєте більше одного шляху сховища. Специфікатор ревізії має бути вказаний однаково для кожного шляху сховища. Якщо в шляхах сховища є файли з однаковою назвою, шлях з останньою оновленою версією файлу відображається в Git.
Див. розділ «довідка щодо версій p4» для повного синтаксису специфікаторів версій p4.
СПЕЦИФІКАЦІЯ КЛІЄНТА
Специфікація клієнта p4 підтримується командою p4 client і містить, серед інших полів, View, який визначає, як depot відображається в клієнтському репозиторії. Команди clone та sync можуть звертатися до специфікації клієнта, якщо їм задано опцію --use-client-spec або коли змінна useClientSpec має значення true. Після git p4 clone змінна useClientSpec автоматично встановлюється у файлі конфігурації репозиторію. Це дозволяє майбутнім командам git p4 submit працювати належним чином; команда submit переглядає лише змінну та не має опції командного рядка.
Повний синтаксис для представлення p4 задокументовано в розділі p4 help views. git p4 знає лише підмножину синтаксису представлення. Він розуміє багаторядкові зіставлення, накладання з +, виключення з - та подвійні лапки навколо пробілів. З можливих шаблонів підстановки git p4 обробляє лише …, і лише тоді, коли він знаходиться в кінці шляху. git p4 поскаржиться, якщо зустріне необроблений шаблон підстановки.
У реалізації співвіднесення перекриттів є помилки. Якщо кілька шляхів до depot через накладення співвідносяться з одним і тим самим місцем у репозиторії, команда git p4 може вибрати неправильний шлях. Цю проблему важко вирішити без створення окремої специфікації клієнта саме для git p4.
Імʼя клієнта можна надати git p4 кількома способами. Змінна git-p4.client має пріоритет, якщо вона існує. В іншому випадку використовуються звичайні механізми p4 для визначення клієнта: змінна середовища P4CLIENT, файл, на який посилається P4CONFIG, або імʼя локального хосту.
ВИЯВЛЕННЯ ГІЛОК
P4 не має такої ж концепції гілки, як Git. Натомість p4 організовує свій вміст як дерево тек, де за домовленістю різні логічні гілки знаходяться в різних місцях дерева. Команда p4 branch використовується для підтримки зіставлень між різними областями дерева та позначення повʼязаного вмісту. git p4 може використовувати ці зіставлення для визначення звʼязків гілок.
Якщо у вас є репозиторій, де всі гілки, що вас цікавлять, існують як теки одного шляху depot, ви можете використовувати --detect-branches під час клонування або синхронізації, щоб git p4 автоматично знаходив теки в p4 та генерував їх як гілки в Git.
Наприклад, якщо структура репозиторію P4 така:
//depot/main/... //depot/branch1/...
А "p4 branch -o branch1" показує рядок View, який виглядає так:
//depot/main/... //depot/branch1/...
Тоді ця команда git p4 clone:
git p4 clone --detect-branches //depot@all
створює окрему гілку в refs/remotes/p4/ для //depot/main з назвою master та одну для //depot/branch1 з назвою depot/branch1.
Однак, не обовʼязково створювати гілки в p4, щоб мати змогу використовувати їх як гілки. Оскільки важко автоматично визначити звʼязки між гілками, для явного визначення звʼязків між гілками можна використовувати параметр конфігурації Git git-p4.branchList. Це список пар "джерело:призначення", подібний до простої специфікації гілки p4, де "джерело" та "призначення" — це елементи шляху в репозиторії p4. У наведеному вище прикладі використовувалася наявність гілки p4. Без гілок p4 той самий результат буде отримано з:
git init depot cd depot git config git-p4.branchList main:branch1 git p4 clone --detect-branches //depot@all .
ПРОДУКТИВНІСТЬ
Механізм швидкого імпорту, який використовується git p4, створює один пакетний файл для кожного виклику git p4 sync. Зазвичай, стиснення сміття Git (git-gc[1]) автоматично стискає їх до меншої кількості пакетних файлів, але явний виклик git repack -adf може покращити продуктивність.
ЗМІННІ КОНФІГУРАЦІЇ
Наведені нижче налаштування конфігурації можна використовувати для зміни поведінки git p4. Усі вони знаходяться в розділі git-p4.
Загальні змінні
- git-p4.user
-
Користувач, вказаний як опція для всіх команд p4 з параметром -u <користувач>. Замість цього можна використовувати змінну середовища
P4USER. - git-p4.password
-
Пароль, вказаний як опція для всіх команд p4 з параметром -P <пароль>. Замість нього можна використовувати змінну середовища
P4PASS. - git-p4.port
-
Порт, вказаний як опція для всіх команд p4 з параметром -p <порт>. Замість нього можна використовувати змінну середовища
P4PORT. - git-p4.host
-
Хост, зазначений як опція для всіх команд p4 з параметром -h <хост>. Замість цього можна використовувати змінну середовища
P4HOST. - git-p4.client
-
Клієнт, вказаний як опція для всіх команд p4 з параметром -c <клієнт>, включаючи специфікацію клієнта.
- git-p4.retries
-
Визначає кількість разів, коли потрібно повторити команду p4 (зокрема, p4 sync), якщо мережа перевищила час очікування. Стандартне значення — 3. Встановіть значення 0, щоб вимкнути повторні спроби або якщо ваша версія p4 не підтримує повторні спроби (до версії 2012.2).
Клонування та синхронізація змінних
- git-p4.syncFromOrigin
-
Оскільки імпорт комітів з інших репозиторіїв Git набагато швидший, ніж імпорт їх з p4, існує механізм для пошуку змін p4 спочатку у віддалених Git. Якщо гілки існують у refs/remote/origin/p4, вони будуть отримані та використані під час синхронізації з p4. Цю змінну можна встановити на false, щоб вимкнути цю поведінку.
- git-p4.branchUser
-
Один з етапів виявлення гілок включає пошук нових гілок p4 для імпорту. Зазвичай перевіряються всі гілки. Ця опція обмежує пошук лише тими, що належать одному користувачеві, зазначеному у змінній.
- git-p4.branchList
-
Список гілок, які потрібно імпортувати, коли ввімкнено виявлення гілок. Кожен запис має бути парою назв гілок, розділених двокрапкою (:). У цьому прикладі зазначається, що як гілкаA, так і гілкаB були створені з main:
git config git-p4.branchList main:branchA git config --add git-p4.branchList main:branchB
- git-p4.ignoredP4Labels
-
Список міток p4, які слід ігнорувати. Він створюється автоматично, коли виявляються мітки, які не можна імпортувати.
- git-p4.importLabels
-
Імпортуйте мітки p4 у git, як зазначено в --import-labels.
- git-p4.labelImportRegexp
-
Імпортуватимуться лише мітки p4, що відповідають цьому регулярному виразу. Стандартне значення — [a-zA-Z0-9_\-.]+$.
- git-p4.useClientSpec
-
Вкажіть, що специфікація клієнта p4 має використовуватися для ідентифікації шляхів depot p4. Це еквівалентно вказівці опції
--use-client-spec. Див. розділ "СПЕЦИФІКАЦІЯ КЛІЄНТА" вище. Ця змінна є логічним значенням, а не назвою клієнта p4. - git-p4.pathEncoding
-
Perforce зберігає кодування шляху, задане вихідною ОС. Git очікує шляхи, закодовані як UTF-8. Використовуйте цю конфігурацію, щоб повідомити git-p4, яке кодування Perforce використовував для шляхів. Це кодування використовується для перекодування шляхів в UTF-8. Наприклад, Perforce у Windows часто використовує "cp1252" для кодування імен шляхів. Якщо цей параметр передається в запит клонування p4, він зберігається в отриманому новому репозиторії git.
- git-p4.metadataDecodingStrategy
-
Perforce зберігає кодування описів списків змін та повних імен користувачів у тому вигляді, в якому вони зберігаються клієнтом у конкретній ОС. Клієнт p4v використовує кодування, властиве для даної ОС, тому різні користувачі можуть зберігати описи списків змін або повні імена користувачів у різних кодуваннях в одному й тому ж сховищі. Git допускає несумісні/неправильні кодування в повідомленнях про коміти та іменах авторів, але очікує, що вони будуть вказані в utf-8. git-p4 може використовувати три різні стратегії декодування для обробки невизначеності кодування в Perforce: passthrough просто передає оригінальні байти з Perforce до git, створюючи придатні для використання, але неправильно закодовані дані, коли дані Perforce закодовані в будь-якому форматі, окрім utf-8. strict очікує, що дані Perforce будуть закодовані як utf-8, і не зможе імпортувати, якщо це не так. fallback намагається інтерпретувати дані як utf-8, а в іншому випадку переходить до використання вторинного кодування — зазвичай це кодування Windows cp-1252 — з екрануванням байтів верхнього діапазону, якщо декодування з використанням резервного кодування також не вдається. У Python 2 стандартною стратегією є passthrough з історичних причин, а в Python 3 — fallback. Якщо вибрано strict і декодування не вдається, у повідомленні про помилку буде запропоновано змінити цей параметр конфігурації як тимчасове рішення. Якщо цей параметр передано у запит на клонування p4, він зберігається у новому репозиторії git.
- git-p4.metadataFallbackEncoding
-
Вкажіть резервне кодування, яке слід використовувати під час декодування імен авторів Perforce та описів списків змін за допомогою стратегії «резервного кодування» (див. git-p4.metadataDecodingStrategy). Резервне кодування використовуватиметься лише у випадку невдалого декодування за UTF-8. Цей параметр за звичай використовує cp1252, поширене кодування Windows. Якщо цей параметр передається в запит клонування p4, він зберігається в отриманому новому репозиторії git.
- git-p4.largeFileSystem
-
Вкажіть систему, яка використовується для великих (бінарних) файлів. Зверніть увагу, що великі файлові системи не підтримують команду git p4 submit. Наразі реалізовано лише Git LFS (докладніше див. https://git-lfs.github.com/). Завантажте та встановіть розширення командного рядка Git LFS, щоб використовувати цю опцію, і налаштуйте його так:
git config git-p4.largeFileSystem GitLFS
- git-p4.largeFileExtensions
-
Усі файли, що відповідають розширенню файлу зі списку, будуть оброблені великою файловою системою. Не ставте перед розширеннями префікс ..
- git-p4.largeFileThreshold
-
Усі файли, розмір яких у нестиснутому стані перевищує поріг, будуть оброблені великою файловою системою. Зазвичай поріг визначається в байтах. Додайте суфікс k, m або g, щоб змінити одиницю вимірювання.
- git-p4.largeFileCompressedThreshold
-
Усі файли зі стиснутим розміром, що перевищує поріг, будуть оброблені великою файловою системою. Ця опція може уповільнити процес клонування/синхронізації. Зазвичай поріг визначається в байтах. Додайте суфікс k, m або g, щоб змінити одиницю вимірювання.
- git-p4.largeFilePush
-
Булева змінна, яка визначає, чи великі файли автоматично надсилаються на сервер.
- git-p4.keepEmptyCommits
-
Список змін, що містить лише виключені файли, буде імпортовано як порожній коміт, якщо для цього логічного параметра встановлено значення true.
- git-p4.mapUser
-
Зіставте користувача P4 з іменем та адресою електронної пошти в Git. Використайте рядок у такому форматі для створення зіставлення:
git config --add git-p4.mapUser "p4user = First Last <mail@address.com>"
Зіставлення замінить будь-яку інформацію користувача з P4. Можна визначити зіставлення для кількох користувачів P4.
Змінні надсилання
- git-p4.detectRenames
-
Виявляти перейменування. Див. git-diff[1]. Це може бути true, false або результат, очікуваний за допомогою git diff -M.
- git-p4.detectCopies
-
Виявлення копій. Див. git-diff[1]. Це може бути значення true, false або результат, очікуваний командою git diff -C.
- git-p4.detectCopiesHarder
-
Старанніше виявляти копії. Див. git-diff[1]. Булеве значення.
- git-p4.preserveUser
-
Під час надсилання змінюйте зміни, щоб відобразити автора Git, незалежно від того, хто викликає git p4 submit.
- git-p4.allowMissingP4Users
-
Коли preserveUser має значення true, git p4 зазвичай завершує роботу, якщо не може знайти автора в зіставлені користувачів p4. Цей параметр все одно надсилає зміни.
- git-p4.skipSubmitEdit
-
Процес надсилання викликає редактор перед надсиланням кожної зміни p4. Однак, якщо цей параметр має значення «true», крок редагування пропускається.
- git-p4.skipSubmitEditCheck
-
Після редагування повідомлення про зміну p4, git p4 перевірить, чи опис дійсно було змінено, перевіривши час модифікації файлу. Ця опція вимикає цю перевірку.
- git-p4.allowSubmit
-
Зазвичай будь-яку гілку можна використовувати як джерело для операції git p4 submit. Якщо цю змінну конфігурації встановлено, вона дозволяє використовувати як джерела надсилання лише іменовані гілки. Назви гілок мають бути короткими (без «refs/heads/») та розділятися комами («,») без пробілів.
- git-p4.skipUserNameCheck
-
Якщо користувач, який запускає git p4 submit, не існує в зіставленні користувачів p4, git p4 завершить роботу. Цю опцію можна використовувати для примусового надсилання в будь-якому разі.
- git-p4.attemptRCSCleanup
-
Якщо ввімкнено, git p4 submit спробує очистити ключові слова RCS ($Header$ тощо). В іншому випадку вони спричинять конфлікти злиття та завадять надсиланню. Наразі цю опцію слід вважати експериментальною.
- git-p4.exportLabels
-
Експорт тегів Git до міток p4, згідно з --export-labels.
- git-p4.labelExportRegexp
-
Експортуватимуться лише мітки p4, що відповідають цьому регулярному виразу. Стандартне значення — [a-zA-Z0-9_\-.]+$.
- git-p4.conflict
-
Вкажіть поведінку при надсиланні, коли виявлено конфлікт з p4, згідно з --conflict. Стандартна поведінка — ask.
- git-p4.disableRebase
-
Не перебазовувати дерево відносно p4/master після надсилання.
- git-p4.disableP4Sync
-
Не синхронізувати p4/master з Perforce після надсилання. Має на увазі git-p4.disableRebase.
ДЕТАЛІ РЕАЛІЗАЦІЇ
-
Набори змін з p4 імпортуються за допомогою Git fast-import.
-
Для клонування або синхронізації не потрібен клієнт p4; вміст файлу збирається за допомогою p4 print.
-
Для надсилання потрібен клієнт p4, який знаходиться не в тому ж місці, що й репозиторій Git. Латки застосовуються по одній до цього клієнта p4 та надсилаються звідти.
-
Кожен коміт, імпортований git p4, має рядок в кінці повідомлення журналу, який вказує місце знаходження depot p4 та номер зміни. Цей рядок використовується пізнішими операціями git p4 sync, щоб дізнатися, які зміни p4 є новими.
GIT
Частина набору git[1]