設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.50.1 無更改
-
2.50.0
2025-06-16
- 2.37.1 → 2.49.1 無更改
-
2.37.0
2022-06-27
- 2.35.1 → 2.36.6 無更改
-
2.35.0
2022-01-24
- 2.32.1 → 2.34.8 無更改
-
2.32.0
2021-06-06
- 2.30.2 → 2.31.8 無更改
-
2.30.1
2021-02-08
-
2.30.0
2020-12-27
- 2.27.1 → 2.29.3 無更改
-
2.27.0
2020-06-01
- 2.21.1 → 2.26.3 無更改
-
2.21.0
2019-02-24
- 2.20.1 → 2.20.5 無更改
-
2.20.0
2018-12-09
- 2.19.1 → 2.19.6 無更改
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 無更改
-
2.18.0
2018-06-21
- 2.17.0 → 2.17.6 無更改
-
2.16.6
2019-12-06
- 2.13.7 → 2.15.4 無更改
-
2.12.5
2017-09-22
- 2.10.5 → 2.11.4 無更改
-
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 無更改
-
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>]
描述
此命令提供了一種使用 Git 與 p4 倉庫互動的方式。
使用 git p4 clone 從現有的 p4 倉庫建立新的 Git 倉庫,並指定一個或多個 p4 depot 路徑。使用 git p4 sync 合併來自 p4 變更的新提交。sync 命令也用於從其他 p4 depot 路徑包含新分支。使用 git p4 submit 將 Git 變更提交回 p4。命令 git p4 rebase 執行 sync 操作,並將當前分支 rebase 到更新後的 p4 遠端分支之上。
示例
-
克隆倉庫
$ git p4 clone //depot/path/project
-
在新建立的 Git 倉庫中進行一些工作
$ cd project $ vi foo.h $ git commit -a -m "edited foo.h"
-
用 p4 的最新更改更新 Git 倉庫,並在此之上 rebase 您的工作
$ git p4 rebase
-
將您的提交提交回 p4
$ git p4 submit
命令
克隆
通常,git p4 clone 用於從現有 p4 倉庫建立新的 Git 目錄
$ git p4 clone //depot/path/project
這
-
在名為 project 的子目錄中建立一個空的 Git 倉庫。
-
將給定 p4 depot 路徑的頭修訂版本的完整內容匯入到 Git 分支 refs/remotes/p4/master 中的單個提交中。
-
從此遠端建立一個本地分支 master 並將其檢出。
要在 Git 中重現整個 p4 歷史,請在 depot 路徑上使用 @all 修飾符
$ git p4 clone //depot/path/project@all
同步
隨著 p4 倉庫中的開發繼續,這些更改可以使用以下命令包含在 Git 倉庫中
$ git p4 sync
此命令查詢 p4 中的新更改並將其作為 Git 提交匯入。
p4 倉庫也可以使用 git p4 sync 新增到現有的 Git 倉庫中
$ mkdir repo-git $ cd repo-git $ git init $ git p4 sync //path/in/your/perforce/depot
這會將指定的 depot 匯入到現有 Git 倉庫的 refs/remotes/p4/master 中。--branch
選項可用於指定用於 p4 內容的不同分支。
如果 Git 倉庫包含分支 refs/remotes/origin/p4,那麼在 git p4 sync 期間將首先拉取並參考這些分支。由於直接從 p4 匯入比從 Git 遠端拉取更改慢得多,這在多開發者環境中可能很有用。
如果存在多個分支,執行 git p4 sync 將自動使用“分支檢測”演算法來嘗試將新更改分割槽到正確的分支中。這可以透過 --branch
選項來覆蓋,以指定僅更新單個分支。
變基
一種常見的工作模式是從 p4 depot 獲取最新更改並將其與本地未提交的更改合併。通常,p4 倉庫是所有程式碼的最終位置,因此 rebase 工作流是有意義的。此命令執行 git p4 sync,然後執行 git rebase,將本地提交移動到更新的 p4 更改之上。
$ git p4 rebase
提交
將 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
取消擱置
取消擱置將獲取一個擱置的 P4 變更列表,並在分支 refs/remotes/p4-unshelved/<changelist> 中生成等效的 git 提交。
git 提交是相對於當前源修訂版本(預設為 HEAD)建立的。根據源建立一個父提交,然後根據該父提交建立取消擱置的提交。
源修訂版本可以透過“--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 以及後續的 sync 操作中使用。
- --branch <ref>
-
將更改匯入到 <ref> 而不是 refs/remotes/p4/master。如果 <ref> 以 refs/ 開頭,則按原樣使用。否則,如果它不以 p4/ 開頭,則新增該字首。
預設情況下,不以 refs/ 開頭的 <ref> 被視為遠端跟蹤分支(在 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 變更號,每行一個。通常,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
,以便它們可以在 refs/heads 中找到 p4 分支。 - --max-changes <n>
-
最多匯入 n 個變更,而不是給定修訂說明符中包含的整個變更範圍。典型的用法是使用 @all 作為修訂說明符,但隨後使用 --max-changes 1000 來只匯入最後 1000 個修訂版本,而不是整個修訂歷史。
- --changes-block-size <n>
-
將修訂說明符(如 @all)轉換為特定變更號列表時使用的內部塊大小。不是使用單個 p4 changes 呼叫來查詢完整的變更列表進行轉換,而是有一系列對 p4 changes -m 的呼叫,每個呼叫請求給定大小的一個變更塊。預設塊大小為 500,通常應該適用。
- --keep-path
-
預設情況下,從 p4 depot 路徑到 Git 的檔名對映會刪除整個 depot 路徑。使用此選項,完整的 p4 depot 路徑將保留在 Git 中。例如,從 //depot/main/ 匯入的路徑 //depot/main/foo/bar.c 會變為 foo/bar.c。使用
--keep-path
,Git 路徑則為 depot/main/foo/bar.c。 - --use-client-spec
-
使用客戶端規範查詢 p4 中感興趣的檔案列表。請參閱下面的“客戶端規範”部分。
- -/ <path>
-
在克隆或同步時排除選定的 depot 路徑。
克隆選項
這些選項可以在初始 clone 中使用,以及上面描述的 sync 選項。
- --destination <directory>
-
建立 Git 倉庫的位置。如果未提供,則使用 p4 depot 路徑的最後一個元件來建立新目錄。
- --bare
-
執行裸克隆。參見 git-clone[1]。
提交選項
這些選項可用於修改 git p4 submit 的行為。
- --origin <commit>
-
標識要提交到 p4 的提交的上游位置。預設情況下,這是從
HEAD
可達的最新 p4 提交。 - -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
-
不是提交,而是建立一系列擱置的變更列表。建立每個擱置後,相關檔案將被恢復/刪除。如果您有多個提交待處理,將建立多個擱置。
- --update-shelve CHANGELIST
-
使用此提交更新現有擱置的變更列表。隱含 --shelve。對於多個擱置的變更列表重複此操作。
- --conflict=(ask|skip|quit)
-
將提交應用到 p4 時可能會發生衝突。發生這種情況時,預設行為("ask")是提示是跳過此提交併繼續,還是退出。此選項可用於繞過提示,導致衝突提交自動跳過,或在不提示的情況下退出嘗試應用提交。
- --branch <branch>
-
提交後,同步此命名分支而不是預設的 p4/master。有關更多資訊,請參見上面的“同步選項”部分。
- --commit (<sha1>|<sha1>..<sha1>)
-
僅提交指定的提交或提交範圍,而不是當前 Git 分支中變更的完整列表。
- --disable-rebase
-
成功提交所有提交後停用自動 rebase。也可以透過 git-p4.disableRebase 設定。
- --disable-p4sync
-
停用提交後從 Perforce 自動同步 p4/master。隱含 --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
,也會呼叫此鉤子。
DEPOT 路徑語法
git p4 sync 和 git p4 clone 的 p4 depot 路徑引數可以是一個或多個空格分隔的 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"
-
將兩個命名 depot 路徑中的所有更改匯入到單個倉庫中。僅包含這些目錄下的檔案。Git 中沒有“proj1”和“proj2”的子目錄。當指定多個 depot 路徑時,必須使用
--destination
選項。修訂說明符必須在每個 depot 路徑上指定相同。如果 depot 路徑中有同名檔案,則最新更新版本的檔案路徑將出現在 Git 中。
有關 p4 修訂說明符的完整語法,請參閱 p4 help revisions。
客戶端規範
p4 客戶端規範透過 p4 client 命令維護,其中包含(除其他欄位外)一個 View,它指定了 depot 如何對映到客戶端倉庫。當給定 --use-client-spec
選項或 useClientSpec 變數為 true 時,clone 和 sync 命令可以參考客戶端規範。在 git p4 clone 之後,useClientSpec 變數會自動設定在倉庫配置檔案中。這允許未來的 git p4 submit 命令正常工作;submit 命令只檢視該變數,沒有命令列選項。
p4 檢視的完整語法在 p4 help views 中有文件說明。git p4 只知道檢視語法的一個子集。它理解多行對映、帶 + 的覆蓋、帶 - 的排除以及空格周圍的雙引號。在所有可能的萬用字元中,git p4 只處理 …,並且僅當它在路徑末尾時。如果 git p4 遇到未處理的萬用字元,它會報錯。
重疊對映的實現存在 bug。如果多個 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 使用的 fast-import 機制為每次 git p4 sync 呼叫建立一個 pack 檔案。通常,Git 垃圾壓縮(git-gc[1])會自動將其壓縮為更少的 pack 檔案,但顯式呼叫 git repack -adf 可能會提高效能。
配置變數
以下配置設定可用於修改 git p4 行為。它們都位於 git-p4 部分。
通用變數
- git-p4.user
-
使用 -u <user> 選項指定給所有 p4 命令的使用者。也可以使用環境變數
P4USER
代替。 - git-p4.password
-
作為所有 p4 命令的選項指定的密碼,帶有 -P <password>。可以使用環境變數
P4PASS
代替。 - git-p4.port
-
作為所有 p4 命令的選項指定的埠,帶有 -p <port>。可以使用環境變數
P4PORT
代替。 - git-p4.host
-
作為所有 p4 命令的選項指定的主機,帶有 -h <host>。可以使用環境變數
P4HOST
代替。 - git-p4.client
-
作為所有 p4 命令的選項指定的客戶端,帶有 -c <client>,包括客戶端規範。
- git-p4.retries
-
指定如果網路超時,重試 p4 命令(特別是 p4 sync)的次數。預設值為 3。將值設定為 0 以停用重試,或者如果您的 p4 版本不支援重試(2012.2 之前)。
克隆和同步變數
- git-p4.syncFromOrigin
-
因為從其他 Git 倉庫匯入提交比從 p4 匯入快得多,所以存在一種機制,可以在 Git 遠端中首先查詢 p4 更改。如果 refs/remote/origin/p4 下存在分支,則在從 p4 同步時將拉取並使用這些分支。此變數可以設定為 false 以停用此行為。
- git-p4.branchUser
-
分支檢測的一個階段涉及檢視 p4 分支以查詢要匯入的新分支。預設情況下,所有分支都會被檢查。此選項將搜尋限制為僅限於變數中指定單個使用者擁有的分支。
- git-p4.branchList
-
啟用分支檢測時要匯入的分支列表。每個條目應為一對用冒號 (:) 分隔的分支名稱。此示例宣告 branchA 和 branchB 都是從 main 建立的
git config git-p4.branchList main:branchA git config --add git-p4.branchList main:branchB
- git-p4.ignoredP4Labels
-
要忽略的 p4 標籤列表。這是隨著發現不可匯入的標籤而自動構建的。
- git-p4.importLabels
-
根據 --import-labels 將 p4 標籤匯入到 git 中。
- git-p4.labelImportRegexp
-
只有匹配此正則表示式的 p4 標籤才會被匯入。預設值為 [a-zA-Z0-9_\-.]+$。
- git-p4.useClientSpec
-
指定應使用 p4 客戶端規範來標識感興趣的 p4 depot 路徑。這等同於指定選項
--use-client-spec
。請參閱上面的“客戶端規範”部分。此變數是布林值,而不是 p4 客戶端的名稱。 - git-p4.pathEncoding
-
Perforce 按照原始作業系統給定的編碼保留路徑。Git 期望路徑以 UTF-8 編碼。使用此配置來告訴 git-p4 Perforce 對路徑使用了哪種編碼。此編碼用於將路徑轉碼為 UTF-8。例如,Windows 上的 Perforce 通常使用“cp1252”來編碼路徑名。如果此選項傳遞給 p4 clone 請求,它將保留在結果新 git 倉庫中。
- git-p4.metadataDecodingStrategy
-
Perforce 按照給定作業系統上客戶端儲存的編碼保留變更列表描述和使用者全名。p4v 客戶端使用作業系統本地編碼,因此不同的使用者最終可能會在同一個 depot 中以不同的編碼儲存不同的變更列表描述或使用者全名。Git 容忍提交訊息和作者姓名中不一致/不正確的編碼,但期望它們以 utf-8 指定。git-p4 可以使用三種不同的解碼策略來處理 Perforce 中的編碼不確定性:passthrough 只是將原始位元組從 Perforce 直接傳遞到 git,當 Perforce 資料以 utf-8 以外的任何編碼編碼時,會建立可用但編碼不正確的資料。strict 期望 Perforce 資料以 utf-8 編碼,並且當事實並非如此時,匯入失敗。fallback 嘗試將資料解釋為 utf-8,否則回退到使用輔助編碼——預設是常見的 windows 編碼 cp-1252——如果使用回退編碼解碼也失敗,則會轉義高位位元組。在 python2 下,由於歷史原因,預設策略是 passthrough,在 python3 下,預設是 fallback。當選擇 strict 且解碼失敗時,錯誤訊息將建議更改此配置引數作為解決方法。如果此選項傳遞給 p4 clone 請求,它將保留在結果新 git 倉庫中。
- git-p4.metadataFallbackEncoding
-
在使用 fallback 策略解碼 Perforce 作者姓名和變更列表描述時,指定要使用的回退編碼(請參閱 git-p4.metadataDecodingStrategy)。回退編碼僅在 utf-8 解碼失敗時使用。此選項預設為 cp1252,一種常見的 windows 編碼。如果此選項傳遞給 p4 clone 請求,它將保留在結果新 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
-
根據 --export-labels 將 Git 標籤匯出到 p4 標籤。
- git-p4.labelExportRegexp
-
只有匹配此正則表示式的 p4 標籤才會被匯出。預設值為 [a-zA-Z0-9_\-.]+$。
- git-p4.conflict
-
當發現與 p4 衝突時,指定提交行為,與 --conflict 相同。預設行為是 ask。
- git-p4.disableRebase
-
提交後不要對樹進行 rebase 操作,使其與 p4/master 對齊。
- git-p4.disableP4Sync
-
提交後不要將 p4/master 與 Perforce 同步。隱含 git-p4.disableRebase。
實現細節
-
來自 p4 的變更集使用 Git fast-import 匯入。
-
克隆或同步不需要 p4 客戶端;檔案內容是使用 p4 print 收集的。
-
提交需要一個 p4 客戶端,它與 Git 倉庫不在同一位置。補丁會一個接一個地應用到這個 p4 客戶端,然後從那裡提交。
-
由 git p4 匯入的每個提交在其日誌訊息末尾都有一行,指示 p4 depot 位置和變更號。此行用於後續 git p4 sync 操作,以瞭解哪些 p4 更改是新的。