Git
英文 ▾ 主題 ▾ 最新版本 ▾ git-p4 上次更新於 2.37.0

名稱

git-p4 - 從 Perforce 儲存庫匯入和提交

概要

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

此命令

  1. 在名為 project 的子目錄中建立一個空的 Git 儲存庫。

  2. 將給定 p4 depot 路徑的 head 修訂的完整內容匯入到 Git 分支 refs/remotes/p4/master 中的單一提交中。

  3. 從這個遠端建立一個本地分支 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 之外的所有命令都接受這些選項。

--git-dir <dir>

設定 GIT_DIR 環境變數。請參閱 git[1]

-v
--verbose

提供更多進度資訊。

同步選項

這些選項可用於初始 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 也可用於在檢查訊息檔案後拒絕提交。

p4-post-changelist

在 P4 中成功提交之後,會叫用 p4-post-changelist hook。此 hook 不接受任何參數,主要用於通知,並且不會影響 git p4 submit 動作的結果。

變基選項

這些選項可用於修改 git p4 rebase 行為。

--import-labels

匯入 p4 標籤。

取消擱置選項

--origin

設定要與已擱置 P4 變更清單比較的 Git refspec。預設為 p4/master。

倉庫路徑語法

git p4 syncgit 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 時,clonesync 指令可以查詢用戶端規格。在 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 機制:環境變數 P4CLIENTP4CONFIG 參照的檔案,或本機主機名稱。

分支偵測

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] 套件的一部分

scroll-to-top