設定與配置
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢視與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.37.1 → 2.47.0 無變更
-
2.37.0
06/27/22
- 2.35.1 → 2.36.6 無變更
-
2.35.0
01/24/22
- 2.32.1 → 2.34.8 無變更
-
2.32.0
06/06/21
- 2.30.2 → 2.31.8 無變更
-
2.30.1
02/08/21
-
2.30.0
12/27/20
- 2.27.1 → 2.29.3 無變更
-
2.27.0
06/01/20
- 2.21.1 → 2.26.3 無變更
-
2.21.0
02/24/19
- 2.20.1 → 2.20.5 無變更
-
2.20.0
12/09/18
- 2.19.1 → 2.19.6 無變更
-
2.19.0
09/10/18
- 2.18.1 → 2.18.5 無變更
-
2.18.0
06/21/18
- 2.17.0 → 2.17.6 無變更
-
2.16.6
12/06/19
- 2.13.7 → 2.15.4 無變更
-
2.12.5
09/22/17
- 2.10.5 → 2.11.4 無變更
-
2.9.5
07/30/17
-
2.8.6
07/30/17
-
2.7.6
07/30/17
-
2.6.7
05/05/17
-
2.5.6
05/05/17
-
2.4.12
05/05/17
- 2.1.4 → 2.3.10 無變更
-
2.0.5
12/17/14
概要
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 會執行同步,並將目前分支變基到更新的 p4 遠端分支上。
範例
-
複製儲存庫
$ git p4 clone //depot/path/project
-
在新建立的 Git 儲存庫中進行一些工作
$ cd project $ vi foo.h $ git commit -a -m "edited foo.h"
-
使用來自 p4 的最新變更更新 Git 儲存庫,並將您的工作變基到頂部
$ git p4 rebase
-
將您的提交提交回 p4
$ git p4 submit
命令
複製
一般來說,git p4 clone 用於從現有的 p4 儲存庫建立新的 Git 目錄
$ git p4 clone //depot/path/project
此命令
-
在名為 project 的子目錄中建立一個空的 Git 儲存庫。
-
將給定 p4 depot 路徑的 head 修訂的完整內容匯入到 Git 分支 refs/remotes/p4/master 中的單一提交中。
-
從這個遠端建立一個本地分支 master 並將其檢出。
若要在 Git 中重現完整的 p4 歷史記錄,請在 depot 路徑上使用 @all 修飾詞
$ git p4 clone //depot/path/project@all
同步
隨著 p4 儲存庫中開發的持續進行,可以使用以下命令將這些變更包含在 Git 儲存庫中
$ git p4 sync
此命令會尋找 p4 中的新變更,並將其匯入為 Git 提交。
也可以使用 git p4 sync 將 P4 儲存庫新增至現有的 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 儲存庫是所有程式碼的最終位置,因此變基工作流程是合理的。此命令會執行 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>
-
確切匯入 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 倉庫路徑對應到 Git 時,會移除整個倉庫路徑。使用此選項,完整的 p4 倉庫路徑會保留在 Git 中。例如,從 //depot/main/ 匯入路徑 //depot/main/foo/bar.c 時,會變成 foo/bar.c。使用
--keep-path
,Git 路徑會改為 depot/main/foo/bar.c。 - --use-client-spec
-
使用用戶端規格來尋找 p4 中感興趣的檔案清單。請參閱下方的「用戶端規格」章節。
- -/ <path>
-
在複製或同步時排除選定的倉庫路徑。
複製選項
這些選項可以用於初始的 clone 操作,以及上述的 sync 選項。
- --destination <directory>
-
要在哪裡建立 Git 儲存庫。如果未提供,則會使用 p4 倉庫路徑中的最後一個元件來建立新目錄。
- --bare
-
執行裸複製。請參閱 git-clone[1]。
提交選項
這些選項可用於修改 git p4 submit 行為。
- --origin <commit>
-
用來識別要提交到 p4 的 commit 上游位置。預設情況下,這是從
HEAD
可存取到的最近 p4 commit。 - -M
-
偵測重新命名。請參閱 git-diff[1]。重新命名將在 p4 中使用明確的 move 操作來表示。沒有對應的選項可以偵測複製,但有變數可適用於移動和複製。
- --preserve-user
-
在提交到 p4 之前重新授權 p4 變更。此選項需要 p4 管理員權限。
- --export-labels
-
將 Git 中的標籤匯出為 p4 標籤。在 Git 中找到的標籤會套用到 Perforce 工作目錄。
- -n
- --dry-run
-
僅顯示會提交到 p4 的 commit;不要變更 Git 或 p4 中的狀態。
- --prepare-p4-only
-
將 commit 套用到 p4 工作區,開啟、新增和刪除 p4 中的檔案,如同一般的提交操作。不要發出最終的「p4 submit」,而是列印一則關於如何手動提交或還原的訊息。此選項始終會在第一個(最舊的)commit 之後停止。Git 標籤不會匯出到 p4。
- --shelve
-
不要提交,而是建立一系列已擱置的變更清單。在建立每個擱置後,相關的檔案會被還原/刪除。如果您有多個 commit 處於擱置狀態,將會建立多個擱置。
- --update-shelve CHANGELIST
-
使用此 commit 更新現有的已擱置變更清單。表示使用 --shelve。針對多個已擱置變更清單重複執行此操作。
- --conflict=(ask|skip|quit)
-
將 commit 套用到 p4 時可能會發生衝突。發生這種情況時,預設行為(「ask」)是提示是否要跳過此 commit 並繼續,或是退出。此選項可用於略過提示,讓發生衝突的 commit 自動跳過,或是在不提示的情況下退出嘗試套用 commit 的操作。
- --branch <branch>
-
提交後,同步此具名分支,而不是預設的 p4/master。如需更多資訊,請參閱上方的「同步選項」章節。
- --commit (<sha1>|<sha1>..<sha1>)
-
僅提交指定的 commit 或 commit 範圍,而不是目前 Git 分支中的完整變更清單。
- --disable-rebase
-
在所有 commit 都成功提交後,停用自動變基。也可以使用 git-p4.disableRebase 來設定。
- --disable-p4sync
-
在提交 commit 後,停用從 Perforce 自動同步 p4/master。表示使用 --disable-rebase。也可以使用 git-p4.disableP4Sync 來設定。如果可能,仍然會繼續與 origin/master 同步。
提交的 Hook
p4-pre-submit
如果 p4-pre-submit
hook 存在且可執行,則會執行此 hook。此 hook 不接受任何參數,也不會從標準輸入取得任何內容。從此指令碼退出並傳回非零狀態會阻止 git-p4 submit
啟動。可以使用 --no-verify
命令列選項來略過此 hook。
一個使用情境是在 hook 中執行單元測試。
p4-prepare-changelist
在準備好預設的變更清單訊息且編輯器啟動之前,會立即執行 p4-prepare-changelist
hook。此 hook 接受一個參數,即包含變更清單文字的檔案名稱。從指令碼退出並傳回非零狀態會中止程序。
此 hook 的目的是就地編輯訊息檔案,而且不會被 --no-verify
選項抑制。即使設定了 --prepare-p4-only
,也會呼叫此 hook。
p4-changelist
在使用者編輯變更清單訊息之後,會執行 p4-changelist
hook。可以使用 --no-verify
選項來略過此 hook。此 hook 接受單一參數,即保存建議變更清單文字的檔案名稱。退出並傳回非零狀態會導致指令中止。
允許此 hook 編輯變更清單檔案,並可用於將文字正規化為某些專案標準格式。此 hook 也可用於在檢查訊息檔案後拒絕提交。
倉庫路徑語法
git p4 sync 和 git p4 clone 的 p4 倉庫路徑引數可以是多個以空格分隔的 p4 倉庫路徑,並在結尾處加上選用的 p4 修訂版本規範
- "//depot/my/project"
-
匯入一個 commit,其中包含該樹狀結構下 #head 變更中的所有檔案。
- "//depot/my/project@all"
-
針對該倉庫路徑歷程記錄中的每個變更匯入一個 commit。
- "//depot/my/project@1,6"
-
僅匯入變更 1 到 6。
- "//depot/proj1@all //depot/proj2@all"
-
將來自兩個具名倉庫路徑的所有變更匯入到單一儲存庫。只會包含這些目錄下的檔案。Git 中沒有每個「proj1」和「proj2」的子目錄。當指定多個倉庫路徑時,您必須使用
--destination
選項。修訂版本規範必須在每個倉庫路徑上以相同方式指定。如果倉庫路徑中有檔案名稱相同的檔案,則會以 Git 中最新更新的檔案版本顯示。
如需 p4 修訂版本規範的完整語法,請參閱 p4 help revisions。
用戶端規格
p4 用戶端規格使用 p4 client 指令來維護,其中包含 View 等其他欄位,可指定如何將倉庫對應到用戶端儲存庫。當給定 --use-client-spec
選項或 useClientSpec 變數為 true 時,clone 和 sync 指令可以查詢用戶端規格。在 git p4 clone 之後,useClientSpec 變數會自動設定在儲存庫組態檔中。這樣可讓未來的 git p4 submit 指令正常運作;submit 指令只會查看變數,而不會有命令列選項。
p4 help views 中記錄了 p4 視圖的完整語法。git p4 只知道視圖語法的子集。它瞭解多行對應、帶有 + 的覆蓋、帶有 - 的排除,以及空白周圍的雙引號。在可能的萬用字元中,git p4 只會處理 …,並且僅在位於路徑結尾時才會處理。如果 git p4 遇到未處理的萬用字元,將會發出抱怨。
覆蓋對應的實作中存在錯誤。如果多個倉庫路徑透過覆蓋對應到儲存庫中的相同位置,git p4 可能會選擇錯誤的路徑。若沒有針對 git p4 專門設定的用戶端規格,此問題很難解決。
可以用多種方式將用戶端名稱提供給 git p4。如果存在,變數 git-p4.client 優先。否則,會使用判斷用戶端的正常 p4 機制:環境變數 P4CLIENT
、P4CONFIG
參照的檔案,或本機主機名稱。
分支偵測
P4 沒有與 Git 相同的分支概念。相反地,p4 會將其內容組織為目錄樹狀結構,其中依慣例不同的邏輯分支位於樹狀結構中的不同位置。p4 branch 指令用於維護樹狀結構中不同區域之間的對應,並指示相關的內容。git p4 可以使用這些對應來判斷分支關係。
如果您的儲存庫中,所有感興趣的分支都以單一倉庫路徑的子目錄形式存在,您可以在複製或同步時使用 --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
會為 //depot/main 在 refs/remotes/p4/ 中產生一個獨立的分支,稱為 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 建立一個 pack 檔案。通常,Git 垃圾壓縮 (git-gc[1]) 會自動將這些壓縮為較少的 pack 檔案,但顯式調用 git repack -adf 可能會提高效能。
組態變數
以下組態設定可用於修改 git p4 的行為。它們都在 git-p4 區段中。
一般變數
- git-p4.user
-
指定為所有 p4 命令的選項的使用者,使用 -u <user>。可以使用環境變數
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
-
將 p4 標籤匯入 Git,根據 --import-labels。
- 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 複製請求中,它會保留在產生的新 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 複製請求中,它會保留在產生的新 git 儲存庫中。
- git-p4.metadataFallbackEncoding
-
使用 fallback 策略(請參閱 git-p4.metadataDecodingStrategy)解碼 Perforce 作者名稱和變更清單描述時,指定要使用的回退編碼。只有在以 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
-
根據 --export-labels 將 Git 標籤匯出為 p4 標籤。
- git-p4.labelExportRegexp
-
只會匯出符合此正規表示式的 p4 標籤。預設值為 [a-zA-Z0-9_\-.]+$。
- git-p4.conflict
-
指定當發現與 p4 衝突時的提交行為,如同 --conflict 參數所設定。預設行為是詢問。
- 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 匯入的每個提交,其日誌訊息的結尾都會有一行指出 p4 儲存庫位置和變更編號。後續的 git p4 sync 操作會使用這一行來知道哪些 p4 變更是新的。
GIT
屬於 git[1] 套件的一部分