--- tags: Perforce title: Perforce description: --- [TOC] # 壹.為何要用Perforce? ## 🥁 進入版本控制(版控)的目的跟定義是什麼?? - 這版本是正確是要同步給其他user使用 - 建立一個回溯的基準點 ## 🥁 先知道動畫和遊戲的版本控制方法差異 - 出發點跟目的不一樣,導致工作方法不一樣,導致版控方法不一樣 - 出發點跟目的不一樣 - 動畫:暴力! 無所不用其極製作,反正不是即時呈現,算出圖就是王道! - 遊戲:講究即時效能和美術,沒有玩過或聽過遊戲畫面很漂亮遊戲會lag的吧?即時效能真的很重要! - 工作方法不一樣 - 動畫:好做!另存很多版本檔案,有更新內容再用replace reference -- 很多類似的東西都養肥在同個檔案 -- 是很大一包做替換,做replace refernce不太會有問題(不同檔案名稱的方法替換) ![image](https://hackmd.io/_uploads/Byp-Fgi3T.png) - 遊戲:講求即時效能,所以需要精簡重複,大量使用繼承或同樣素材用連結的方式製作,拆分了很多重複利用的素材零件(mesh.shader.skeleton...etc) ![image](https://hackmd.io/_uploads/HJ4t1bj36.png) ![image](https://hackmd.io/_uploads/S1mwg-j26.png) - 導致版控方法不一樣 - 動畫因可很任性的更改,更改是相較大包素材,不是錯綜複雜的連接零件素材,所以可以用非常半手工的方式做***另存多個不同檔案版本控制*** - 遊戲因為為了提升效能,素材零件可拆分成很細,如下圖user另存一個M_chair_01的新材質球,要手動替換N個上游的指定?當然不會,所以會選擇蓋掉原本一樣的命名檔案,***對同樣命名的檔案做版本控制*** ![image](https://hackmd.io/_uploads/By9WQWih6.png) ## 🥁 做版本控制前,需了解unreal製作的陷阱 - 陷阱: - 前提如果檔案是NAS共用專案的情況,某人開專案了,就會綁架這專案的存檔權限;另一人也可以開專案製作,但會遇到無法存檔問題 - 導致問題: - 多人共同NAS製作就會遇到打架沒默契的問題,我開檔做了花了一天修改尚未存檔,另一同事也開檔花了一天修改上未存檔,那到底需要放棄誰的製作?? - 假如10多人都在local製作,我能確保我正在修改的東西不會跟其他人修改是同一檔案?我可以安心的丟給其他人? - 我確定我確實有把另外10位同事更新的檔案更新在我local專案??我是一直保持最新版專案內容往下製作??? - 我修改蓋掉同一個檔案,我要怎樣救回舊版本檔案? - 結論 - 這不是團隊默契問題,而是機制問題!這就需要perforce幫忙 ## 🥁 為什麼不是用git? - git也是可以製作專案 - 可回溯舊版本檔案 - 但無法鎖住檔案製作,所以還是需要靠嚴謹分工,誰沒先說要修改什麼就掌嘴,誰沒告知修改而存檔就剁掉哪隻手 - 大量傳輸比較慢(網路上說的) - 單一檔案太大會無法上傳上去,需要靠git LFS plugin --- # 貳.介紹Perforce ## 🥁 Perforce有哪幾種使用? - Server端:負責專案倉庫管理,登入人員和群組資訊控管,人員和群組權限控管。 - 程式指令方式管理 - P4Admin介面管理 - Client端:就是對製作檔案版本控制 - 程式指令操作 - P4V介面操作 - Unreal plugin操作 ## 🥁 使用Perforce前需要知道的東西 - Depot 和 Workspace差別 - Depot(倉):由管理者在server(p4 admin)創立,管理者會根據怎樣的類型,創立怎樣的倉庫,就如:米商要用的就蓋適合大小類型屬性的米倉,工業用的就蓋適合的工廠。倉庫只是給個種類空間,其他部分都是由artist去發揮。artist也會把workspace的內容更新上傳到depot,也會從depot下載最新資訊到workspace,也可以把depot當作交換檔案資訊的倉庫 - Workspace(工作區):就是個人的local工作區塊。每個帳號只能切換自己帳號的workspace,不能切換到其他人帳號的workspace,例如登入user01的帳號,就只能切換user01所創過的workspace,並不能切換至user37創過的workspace ## 🥁 Perforce 與 工作workflow ![image](https://hackmd.io/_uploads/B17PET-VA.png) ![image](https://hackmd.io/_uploads/HJxrZbm6p.png) ![image](https://hackmd.io/_uploads/rkkE-bQa6.png) ![image](https://hackmd.io/_uploads/HytlYXhpa.png) --- # 參. 簡易流程示範-Depot已有data,如何要創建workspace和拉下depot的資訊 ## 🥁 創立workspace(方法一) - 在Depot或Workspace的tab有下拉選單,選擇New Workspace,創立個人本機工作區域 ![image](https://hackmd.io/_uploads/H1Vm-_BAa.png) - 彈跳出視窗,依序重新設定Workspcae name,Workspace root,Stream ![image](https://hackmd.io/_uploads/rJ5tN_SC6.png) - Workspcae name: - 官方預設(於Workspcae執行):\<Machine_Name>\_\<Username>\_\<Number> - 官方預設(於Stream Graph執行):\<Username>\_\<Machine_Name>\_\<Stream_Name>\_\<Number> - 官方希望有個Machine_Name是因為你同個使用者名稱,有可能在不同設備使用,視為不同的workspace - 個人建議:\<Username>_\<Project_Name>,例:chihhao_lo_AOT - Workspace root: - local專案資料夾位置,需包含專案資料上層資料夾 - Stream: - 點擊Browser按鈕選擇對的stream名稱,並按OK ![image](https://hackmd.io/_uploads/HkR4LuHCa.png) - 勾選下方兩個選項,點擊OK按鈕 ![image](https://hackmd.io/_uploads/ByJ5IuSA6.png) - switch to new workspace immediately: 馬上切換到新的workspace - automatically get all revisions: 馬上自動下載最新的版本data - 如果指定路徑資料夾下有東西,工具只是提醒您,您指定的路徑下有其他檔案,是否要指令其他資料夾(底下沒檔案)?選擇no,我就是堅持要使用這資料夾 ![image](https://hackmd.io/_uploads/HJ3IF3r6p.png) - 下載畫面 ![image](https://hackmd.io/_uploads/Sya1fBlA6.png) ## 🥁 創立workspace(方法二)[可省略] - 在Stream Graph頁面,選擇對的Depot,於stream滑鼠右鍵選擇New workspace - ![image](https://hackmd.io/_uploads/BJmWu_SC6.png) - 優點在於可透過外部圖像關聯式可以選擇對的stream ![image](https://hackmd.io/_uploads/HyV6OdH0a.png) ## 🥁 拉下或更新depot的資訊[可省略] - 如果有勾選automatically get all revisions就不用做了 - 沒勾選automatically get all revisions,就須走下方步驟 ![image](https://hackmd.io/_uploads/rykCKdrCp.png) 1.選擇對的workspace 2.選擇workspace root資料夾 3.點擊Get Latedt按鈕做更新下拉 ## 🥁 於unreal perforce 做連動設定 - 進入下章節講解 - 前提告知unreal內部的perforce pluging功能不齊全還是蠻雞肋的仍須搭配P4V --- # 肆. Perforce In Unreal ## 🥁 Unreal Perforce Plugin - 檢查是否有版控的(一般都會有的) ![image](https://hackmd.io/_uploads/rkdC8eXTT.png) ![image](https://hackmd.io/_uploads/SkJZPgQaT.png) - 一般都會被開啟,如果發現沒有,再開啟他 ![image](https://hackmd.io/_uploads/ByseOeQT6.png) ## 🥁 Unreal Perforce 設定 - unreal editor右下方有 Revision Control選項 ![image](https://hackmd.io/_uploads/SJ0gMxnaT.png) - 選擇Perforce選項,第一次選完會等一段時間 ![image](https://hackmd.io/_uploads/S1P9MenTp.png) - 輸入ip跟登入帳號資訊,workerspace可以手輸入或遊available workspace下拉選擇(有時候這不管用,只能再user name欄位用手動輸入),按Accept Setting ![image](https://hackmd.io/_uploads/SkQ5tx3T6.png) ## 🥁 新增 (Mark For Add) - Mark For Add - 口訣: 專案下新產生的檔案都要做Mark For Add。 - 解釋: 註冊,此檔標記被perforce追蹤。 ![image](https://hackmd.io/_uploads/H104ExQ6a.png) - 方法: 在需要被追蹤版控的物件或資料夾,使用滑鼠右鍵選擇Mark For Add ![image](https://hackmd.io/_uploads/rkw3Eg7Tp.png) - 再次確認是否執行?Yes ![image](https://hackmd.io/_uploads/BJiSYGxCT.png) - 等了若干年後,圖示變成這樣,就代表你成功了 ![image](https://hackmd.io/_uploads/S1T2KGeCp.png) ## 🥁 送出 (Check in or Submit) - Check in(Submit) - 口訣: 把新增(修改)的東西推向depot - 解釋: 送出登記紀錄,把版本紀錄資訊寫再depot,給其他artist也能拿到這新的檔案資訊 - 方法: 先儲存有修改的檔案,選擇"很多要的檔案"或"資料夾"右鍵選擇check in作登記,並留下description紀錄資訊 ![image](https://hackmd.io/_uploads/SkC81H3aa.png) ![image](https://hackmd.io/_uploads/rJyYBrhap.png) - 有勾選才會被checkin,沒勾選則不會被checkin ![image](https://hackmd.io/_uploads/HydojEhpT.png) - 方法: 或是針對這專案對所有的的檔案做check in登記,並留下description紀錄資訊(先儲存有修改的檔案) ![image](https://hackmd.io/_uploads/HypeGrha6.png) ![image](https://hackmd.io/_uploads/HydojEhpT.png) - 關於Check in(Submit)的Changelist Description重要性 - Changelist Description填寫很重要,寫上修改製作內容的概述,寫這個很重要,要回溯檔案這些就是很重要的資訊 - 完成後,畫面右下角會出現送出成功編號,content的東西也恢復到正常的圖示 ![image](https://hackmd.io/_uploads/rktP7U3Tp.png) ![image](https://hackmd.io/_uploads/HkOTrr3a6.png) - checkin完,繼續checkout鎖定 ![image](https://hackmd.io/_uploads/HkXZv2I0T.png) ## 🥁 編輯 (checkout) - Checkout - 口訣: 盡量Checkout後才開始做local檔案編輯。先Checkout者先贏,別人就無法Checkout - 解釋: 前有提到unreal製作時無法共同編輯問題。Checkout功能就是透過"機制"去防堵問題發生。 - 解釋: 簽出,簽出。大聲跟大家宣布這檔案我要修改(圖式視覺化),別人別去修改這檔案。 - 方法: 選擇"很多要的檔案"或"資料夾"右鍵選擇checkout作簽出 ![image](https://hackmd.io/_uploads/rk2k8BnaT.png) - 畫面會跳小視窗,請你再次確認你要checkout的內容。有勾選才做checkout,沒勾選則不會起作用 ![image](https://hackmd.io/_uploads/H1mdUH2p6.png) - 簽出後的圖示 ![image](https://hackmd.io/_uploads/Hy278r2aT.png) - Checkout自己看到的圖示,他人看到別人Checkout的圖示,可以知道是誰在編輯這檔案。 ![image](https://hackmd.io/_uploads/SyhAiHnTa.png) - 告知有防護機制: 當有人做Checkout行為,其他人是無法checkout的,行為是被禁止的;當使用者釋放了他人才能checkout再編輯 - 防護機制說明: 被鎖定追蹤過的local 檔案是唯讀機制。Checkout解開local檔案唯讀。 - 不要check out最上層,會被揍。根據要修改的檔案做checkout。 - 可以先修改.存檔,再checkout,但..再您修改時有人先搶先checkout進行修改那就尷尬了 ![image](https://hackmd.io/_uploads/HkPXS28Aa.png) ![image](https://hackmd.io/_uploads/r1tUS38Cp.png) - 製作過程中忘記checkout,想要馬上checkout,方法可以馬上存檔,工具也會同時詢問你是否要checkout解決 - 對方checkout時,我不理會或不知情,我仍可進行編輯,但存檔時會跳出不允許存檔通知 ![image](https://hackmd.io/_uploads/rkOvLhLCa.png) - 如果在已通知更新,無去更新檔案,執意要修改檔案並存檔,也會遭受阻擋,如下圖 ![image](https://hackmd.io/_uploads/rkE1unU0p.png) ![image](https://hackmd.io/_uploads/rkx7uhL0a.png) - 如果在已通知更新,無去更新檔案,執意要去執行checkout,工具會讓你無法執行 ![image](https://hackmd.io/_uploads/r1nIO3I0T.png) - 可以觀察Checkout開關和檔案唯讀狀況之間的關係 ![image](https://hackmd.io/_uploads/SkLoO3YGC.png) ![image](https://hackmd.io/_uploads/H1zRu3FGR.png) - Checkout有三種模式,優缺點比較 - (推薦)清楚要做什麼檔案修改,先checkout,先卡位保護自己,也不要讓別人有犯錯的機會 - 先做修改,再存檔,再自動checkout,但在您修改時有人先搶先checkout進行修改那就非常尷尬了,製造了麻煩。這通常會發生在自己修改了東西不知道會存這個檔(checkout) - 對方先已checkout,我沒checkout,編輯後存檔時,會強迫進入checkout阻擋環節,讓你無法存檔 ![image](https://hackmd.io/_uploads/HkPXS28Aa.png) ![image](https://hackmd.io/_uploads/r1tUS38Cp.png) - 到Editor Preferences設定一但更動修改檔案,立即自動checkout行為 - 警語:很方便,但也是非常危險的行為!對方不管是"已經"手動checkout或設置自動checkout的情況下,我使用修改自動checkout的設定,工具系統會打破機制,認定雙方都執行checkout(正常來說一方checkout,另一方有阻擋checkout的機制),那就是看誰先checkin(submit)來決定,擾亂了checkout的美意防護機制... - Edit > Editor Preferences ![image](https://hackmd.io/_uploads/BJj8inURa.png) - 打入關鍵字"checkout",勾選automatically checkout in asset modification(預設關閉) - 或是按黃底筆刷案類別尋找 ![image](https://hackmd.io/_uploads/S1IUn28RT.png) ## 🥁 更新狀態及下載 (refresh and sync) - Refresh - 口訣: 更新目前depot與worspace之間的狀態資訊 - 解釋: 基本上切換資料夾即可更新,或是執行Refresh按鈕也可。提醒對方有新增data,Refresh跟切換資料夾皆無法更新到最新狀態;對方修改的data才能更新 - 方法: 選擇"很多要的檔案"或"資料夾"右鍵選擇Refresh,我通常會選擇content資料夾做refresh來更新整個專案 ![image](https://hackmd.io/_uploads/rJyYBrhap.png) ![image](https://hackmd.io/_uploads/rJeEZbUnTT.png) - 執行時會彈跳出貼心(雞婆)的視窗,詢問這大量的更新需要嗎?選擇yes ![image](https://hackmd.io/_uploads/rkP_MLnap.png) - Sync(get latest) - 口訣: 同步下載目前depot資料至worspace - 方法: 在資料夾右鍵選擇sync做同步 - 注意: 新content 無法在unreal 做sync,需要用到P4V做更新(爛透了),只能Sync雙方都存在的檔案 ## 🥁 觀看日誌與差異比較 (log and diff) - 觀看日誌 - 於檔案或資料夾,滑鼠右鍵選擇觀看歷史紀錄 ![image](https://hackmd.io/_uploads/SJvSg3UR6.png) - 彈跳出視窗,只能"觀看"日誌紀錄和做版本差異比較 ![image](https://hackmd.io/_uploads/H1wgx3URT.png) - 版本差異比較 - 可於日誌做比較 - 對depot當選擇的修訂版本與前一版的差異 - 對depot當選擇的修訂版本與當下workspace的差異 ![image](https://hackmd.io/_uploads/Hy2ecpU0a.png) - 其實上面差異資訊不一定要懂 ![image](https://hackmd.io/_uploads/Hk2Q1CLAT.png) - 可於日誌外做比較 - 對當下workspace的檔案與depot的最新版本差異 - 其實功能跟日誌的Diff Against Workspace File一樣 - 非Blueprint版本差異比較與Blueprint版本差異比較 - 在unreal editor介面對"非"Blueprint做版本差異比較 ![image](https://hackmd.io/_uploads/Hk2Q1CLAT.png) - 在unreal editor介面對Blueprint做版本差異比較 ![image](https://hackmd.io/_uploads/By8JLAURT.png) ![image](https://hackmd.io/_uploads/BJJE8A8RT.png) - 在P4V介面對Blueprint與非Blueprint做版本差異比較 ![image](https://hackmd.io/_uploads/BJzvD0I0p.png) ## 🥁 刪除 (Mark for delete) - 不是說你在原地刪除,其他人就會跟著你同步做刪除,需要跟版控告知說,我標記確定要刪除此檔案,其他人做同步時也會跟著一起刪除 - 直接再unreal editor做刪除,並做submit ![image](https://hackmd.io/_uploads/H11ZxhdfC.png) - 或是在p4v介面選擇檔案做刪除 ![image](https://hackmd.io/_uploads/SJK4ehuzC.png) ## 🥁 回溯最新版檔案 (Revert) - 回溯檔案基本上分為下面A.B兩種 - A:當下depot最後版本(最新)回溯至當下workspace檔案(已checkout,已修改或未修改) - 在unreal perforce介面可以辦到,在該資料夾偵測集體檔案或檔案滑鼠右鍵執行 ![image](https://hackmd.io/_uploads/HyPxn0LRT.png) - 按Revert按鈕後,會立即把你checkout後"有"編輯更改或checkout後"沒"編輯更改的檔案強制回溯到depot的版本,並把checkout的鎖定移除,釋放給其他人使用 ![image](https://hackmd.io/_uploads/S1DJ6A8Rp.png) - 有勾選Revert unchanged only並按Revert按鈕後,只會對checkout後"沒"編輯更改的檔案,做checkout的鎖定移除,釋放給其他人使用 ![image](https://hackmd.io/_uploads/HJsX0AUAp.png) - 進化問題:混選多個"有"跟"沒有"編輯更改的檔案,同時做勾選Revert unchanged only並按Revert按鈕,結果會變如下,"有"編輯更改的檔案不會做回溯行為並仍繼續checkout鎖住,"沒有"編輯更改的檔案解開checkout,釋放給大家使用(不用回溯,因為沒編輯修改本就跟depot一樣) - 意圖: - 大致上直接按Revert按鈕的大多就是發現檔案做爛了,直接砍掉拿舊版重練 - 大致上會執行勾選Revert unchanged only並按Revert按鈕的大多是本想checkout編輯卻後來沒要編輯釋放給大家使用的意圖或是海選checkout卻發現沒要編輯這檔案的情況 - B:想從depot撈前好幾個版本(非最新)回溯至當下workspace檔案 - 非常不幸的無法在unreal editor的perforce介面完成 - 需在P4V介面才能達到 ![image](https://hackmd.io/_uploads/HyE2iUt0T.png) - 忘記自己checkout哪些,可以在content資料夾做Revert ## 🥁 變動清單介面進階功能 (Changelists) ![image](https://hackmd.io/_uploads/ByBNDDFRp.png) - 介面大概介紹 - Changelists(介面左上): 已checkout的大項,並顯示統計數量,滑鼠右鍵叫出更多其他功能 - Uncontrolled Changelists(介面左下): 統計沒有被Mark For Add的檔案大項,並統計數量 - 清單項目資訊(介面右邊): 根據選的左大項的清單項目資訊 - Changelists(介面左上) - 解釋: 有被checkout的檔案都會跑到此區(Changelists or pending),可以想成是待宰區 - Submit Changelists: 跟checkin後的功能很像,差別此功能是無法uncheck清單 ![image](https://hackmd.io/_uploads/HyAE569Ra.png) - Validate Changelists: 檢查checkin前,檢查驗證檔案是否符合規格,常出現問題就是被偵測到檔案尚未存檔,如何下圖。紅區也會顯示尚未儲存統計,執行Validate Changelists時也會跳出綠區小視窗警告,按Show Message Log可以看更詳細的錯誤解釋 ![image](https://hackmd.io/_uploads/SyN4sa9Ra.png) 成功的顯示 ![image](https://hackmd.io/_uploads/S1ktx0qCT.png) - Revert Unchanged: 跟上篇集解釋的一樣,尚未修改的檔案,退回depot版本 - Revert File: 跟上篇集解釋的一樣,不管是否修改的檔案,一律強制退回depot版本 - Shelve Files: 下章節詳細講,發生在急著要某版本先出來,擱置保存目前已修改的內容步驟,這種棘手狀況解決流程 - Edit Changelists: 修改事件清單,Changelists就像更改的簡略形容,例如change room layout是修改事件。工具允許你提早讓做修改事件的存放,如下面操作 ![image](https://hackmd.io/_uploads/SkGJ1A5Rp.png) 執行成功後顯示如下圖,這兩個檔案修改就會放這區,你可以繼續修改直到你checkin(submit)才會消失 ![image](https://hackmd.io/_uploads/Hyjkm05R6.png) 後續的其他檔案修改預設就會放在default的修改區塊 ![image](https://hackmd.io/_uploads/S1DeDA90T.png) 當然你也可以提早先製作修改事件清單,先做修改分類,工具介面有個+(如下圖紅圈),輸入修改敘述 ![image](https://hackmd.io/_uploads/rJScvCcRa.png) 就會看到新產生的清單是藍色的,數量為0。步驟1.接著我選擇default區,步驟2.選擇你想要的檔案清單內容,步驟3.拖曳到新的事件清單 ![image](https://hackmd.io/_uploads/SJFudRcR6.png) 之後就變成這樣了 ![image](https://hackmd.io/_uploads/rkxXY050a.png) 我可以針對我更改的項目清單做checkin(submit) ![image](https://hackmd.io/_uploads/ryeKFCqCp.png) 這就幫你免費幫你把敘述打上(適合很容易忘記你一開始要對這檔案做什麼的人) ![image](https://hackmd.io/_uploads/HkHsYA506.png) 完成!Submit後的清單不見了! ![image](https://hackmd.io/_uploads/r1KbqC90a.png) :::info 提醒: 在同個檔案做修改,在同一個時間軸是無法拆分成兩個Changelists。 例如:修改材質球做了效率化的function一個修改事件,同時也做了修改數值讓材質更美另一個事件,是同一個修改檔案就無法分成兩個Changelists去追蹤,除非拆成前後兩個時間軸去做兩個Changelists ::: - Reconcile: 調解,下章節詳細講,主要是發生在很混亂的情況會使用到 ## 🥁 回溯多版本之前的檔案 - 必須透過P4V處理 - revert: 回溯 - 使用情境: 想要恢復叫回很久之前的版本,取代現在的版本。或是想要跟舊版本做合併。 - 情境先前介紹: - 我有對某材質球做了有先後順序疊加三個版本。 (1.原本版本 2.增加normal強度 3.讓材質球看的更濕更金屬感 4.有透貼效果) ![image](https://hackmd.io/_uploads/r1TR40hbC.png) 1.原本版本 ![image](https://hackmd.io/_uploads/BkgcJ1abR.png) 2.增加normal強度 ![image](https://hackmd.io/_uploads/SySBgypZ0.png) 3.讓材質球看的更濕更金屬感 ![image](https://hackmd.io/_uploads/rkIRekpWC.png) 4.有透貼效果 ![image](https://hackmd.io/_uploads/rkXVWJTWC.png) - 回溯前請關掉ue editor,要不然無法回溯,卡住! ![image](https://hackmd.io/_uploads/Sk7BfJp-0.png) - 進入版本控制(版控)的目的是什麼?? - 這版本是正確是要同步給其他user使用 - 建立一個回溯的基準點 - 回溯簡易解釋圖 ![image](https://hackmd.io/_uploads/Hki-yuDM0.png) - 回溯可以分兩種,一種我只是看看,沒有要進後續的版本控制(Get This Revision)。一種就是我就是確定要哪個版本,我之後要進後續的版控(Undo Revision) - Get This Revision: 我只是看看,沒有要進後續的版本控制,沒有要影響到其他人 - 這又分細分兩種,A狀態:我真的只想回溯看一下前面版本的檔案狀況,我沒有要在回溯版本下再編輯,也沒有要submit(check in),B狀態:A的模式反悔了...我要在這狀態下更改並升級一版 A狀態:我真的只想回溯看一下前面版本的檔案狀況,我沒有要在回溯版本下再編輯,也沒有要submit(check in) - 開啟History的tab,紅框包住的文件,就是代表你現在檔案"看到"的狀態是在哪一版本? ![image](https://hackmd.io/_uploads/HJqruya-0.png) ![image](https://hackmd.io/_uploads/HJvcwypZR.png) - 到你想看看回溯的版本項目,右鍵Get This Revision。 ![image](https://hackmd.io/_uploads/r1FfOk6WC.png) - 看到紅框包住的文件換成你指定的項目了,滑鼠移到History的大項目或workspace的檔案都會出現提示,告知你目前此檔案非depot控制的最後最終版本,開啟ue專案你也能看到你回溯的版本,但這番操作也只是在你workspace小圈圈做改變,無法影響Depot的版控,更不能更新到其他人的更新 ![image](https://hackmd.io/_uploads/B1LztkTW0.png) ![image](https://hackmd.io/_uploads/BJ37r4RZ0.png) - 如果要回到最後版本可以在p4v介面執行Get Latest,或是在unreal editor執行Sync - B狀態:A的模式反悔了...我要在這狀態下更改並升級一版 - 一樣執行Get This Revision - Get This Revision進入unreal editor時會發現只能被強迫同步更新的選項,無法達到要在Get This Revision狀態下編輯在進化一版,所以又要再次拋棄unreal perforce了 ![image](https://hackmd.io/_uploads/SJJsL4zMR.png) - 關閉unreal editor,回到P4V ![image](https://hackmd.io/_uploads/r1-_FpBM0.png) - 在P4V執行Checkout ![image](https://hackmd.io/_uploads/BJCjYpHz0.png) - 執行OK ![image](https://hackmd.io/_uploads/r1iy5aSMR.png) - 沒有要更新到最新版,沿用舊版 ![image](https://hackmd.io/_uploads/SkSGqTSzR.png) - 狀態轉變成這樣,開始做編輯,並存檔 ![image](https://hackmd.io/_uploads/rkGLGHPz0.png) - 接著如果直接submit(checkin)是無法的,必須製造檔案衝突才能往下一步進行版控 - 製造衝突就是現在的修改狀態,並拉下最後一版(Get Latest) ![image](https://hackmd.io/_uploads/B1O2Prwf0.png) - 會看到狀態又改變了,需要resolve,解決衝突,達到目的 ![image](https://hackmd.io/_uploads/HJM1drvfC.png) - 右鍵選擇解決衝突resolve ![image](https://hackmd.io/_uploads/SyT4urwGC.png) - 雲端版本和local版本,強制選擇我local這版本 ![image](https://hackmd.io/_uploads/HyGsOSvfA.png) - 這樣就可以submit了 ![image](https://hackmd.io/_uploads/ryRbtSwMC.png) - 再雲端就記錄了這版本資訊 ![image](https://hackmd.io/_uploads/rk4EtrPMC.png) - Undo Revision: 我確定要回溯到某舊版本,要進後續的版本控制,我要其他人接收到我的更新 - 這又分細分兩種,A狀態:很非常確定要回到某版本並且立馬存成一個新版本,B狀態:我先預存pending進入修改模式,確認後或添加消改內容再存成一個新版本 - A狀態:很非常確定要回到某版本並且立馬存成一個新版本 - 此動作只能在p4v完成,在unreal editor是無法完成的 :::info 很重要!! 對你想回溯的版本右鍵選擇Undo Revision,回溯的是你選擇的前一版本,例如選擇revision 3執行回溯,檔案呈現的是revision 2,這要注意一下!跟Get This Revision選擇某revision版本就回溯改版本的機制不一樣 ::: - 選擇你想回溯的版本的後一個 ![image](https://hackmd.io/_uploads/rJeF5QRWA.png) - 選擇下圖選擇的內容,執行Submit ![image](https://hackmd.io/_uploads/HyjKhmAWC.png) - 跳出要Check in(Submit)的視窗,並寫入文字敘述 ![image](https://hackmd.io/_uploads/BJM91ERW0.png) - 在歷史清單就會看到新增了一個版本,並檔案處在最後版本 ![image](https://hackmd.io/_uploads/rymFgNCbR.png) ![image](https://hackmd.io/_uploads/rJ1ct4AWR.png) - B狀態:我先預存pending進入修改模式,確認後或添加消改內容再存成一個新版本 - 選擇你想回溯的版本的後一個 ![image](https://hackmd.io/_uploads/HJNCTalfA.png) - 選擇Save to Changelist ![image](https://hackmd.io/_uploads/S1_SBAxz0.png) - Refresh後,會發現在執行Undo Revision前最終版本是第5版,現在也是第5版而非產生第6版,並會發現檔案圖示變不一樣了,這是代表目前是使用第5版的修改狀態,標記更改清單並等待整合 ![image](https://hackmd.io/_uploads/SylQ8AlGR.png) - 這時候打開檔案是第1版(原版),並可以開始動手術了 ![image](https://hackmd.io/_uploads/SkXJXk-zA.png) - 但ue修改完要存檔時無法存檔,ue跟p4v之間會有個bug,發現unreal editor有checkout檔案,在p4v的介面則無checkout檔案...所以解決方式就是到p4v介面checkout此檔案,這樣就可以在ue存檔了 ![image](https://hackmd.io/_uploads/r1lgZ1bfA.png) - 修改完後就可以丟上新版了 ![image](https://hackmd.io/_uploads/r110EJbMA.png) - 完成之後的p4v history ![image](https://hackmd.io/_uploads/ByiAS1bzA.png) - 回溯到跨多版本時,如果想要撿中間某版本的功能怎辦??例如:現在是在第9版,我想要回溯到第3版,但我也想要保留第5版的某某功能怎辦? - 回溯blueprint類型: 可以先回到想保留的版本,ctrl+c複製你想要的nodes後暫時ctrl+v到記事本,在到你要回溯的檔案做ctrl+v把nodes貼回再connect回去 - 回溯非blueprint類型: 就無法用上述上述方法了...比較麻煩... - 能對一個"檔案"做回溯,當然!也能對一個"送出事件"(多個檔案)作回溯 - 在檔案右鍵啟動"Get Revision"會有比較多的內容選項,例如有一個狀況發生就需要使用到 - 不小心誤刪workspace的某些檔案,要如何補救?發現在worksapce也同步檔案消失,使用get latest和revert都無法救回檔案 - 解決方是就是使用"Get Revision"的Foece Operation功能回復 ![image](https://hackmd.io/_uploads/Hki0LKwzR.png) - 預設是沒有打勾的 ![image](https://hackmd.io/_uploads/HyFlPYwGR.png) - 執行完會發現檔案的更新時間都是新的,強制更新!所以小心不要對專案執行,會很浪費時間 ## 🥁 調解 (Reconcile) - 這unreal editor裡面沒有,需要到P4V執行,使用的情境是在斷網的情況下做修改 ## 🥁 擱置 (shelve) - shelve,擱置 - 解釋: 正在修改的檔案遇到突發狀況需要擱置保留,之後會再取來使用,不進入depot版本控制 - 使用情境: 自己正在做某些改,突然有bug或需求須優先製作出來,暫時擱置正在做的狀態,先恢復原狀做出新需求,擇日再拿回來修;或是我想做好幾個版本測試,到時在決定要不要使用 - workflow ![image](https://hackmd.io/_uploads/S16x9oA0p.png) - 情境發生,步驟解釋: - 做到一半,突然需要交付另一種版本,但我也想要保留著一版修改,留到下次修改 - 在changelists選擇大項目或複選不同檔案,右鍵選擇Shelve Files ![image](https://hackmd.io/_uploads/ByzTFF00p.png) - 在changelists下面多了Shelved Items的大項,右邊清單內容也變黃色 ![image](https://hackmd.io/_uploads/BkzgcF0Rp.png) - 可以將就現在的修改繼續往下修改(後面會有更進一步講解),不用執行下方Revert Files功能 - 我必須放棄現在的修改,回復depot的最新狀態檔案(下方講解都照這情境教學) - Bug錯誤告知: user會很直覺性的在changelists執行修復,很不幸的告訴各位此動作工具會告知錯誤無法這樣做,如下圖(錯誤訊息沒截圖) ![image](https://hackmd.io/_uploads/HyRzctRR6.png) - 所以你可以去你知道的位置去content browser右鍵執行revert,或是選擇清單內容右鍵Assset>Brose to Asset,帶你到正確的content browser ![image](https://hackmd.io/_uploads/rJcT2tRAp.png) - 到了content browser選擇素材右鍵Revert ![image](https://hackmd.io/_uploads/SJmkaKRAa.png) - 恢復到跟depot一樣的版本 ![image](https://hackmd.io/_uploads/By6n19CC6.png) - 修改好緊急的檔案救checkin到depot去,緊急修改的任務完成了 ![image](https://hackmd.io/_uploads/rJW1gc00p.png) - 接著我要拉回到我擱置shelve的檔案 - Bug錯誤告知: user會很直覺性的在changelists執行unshelve的動作,很不幸的告訴各位此動作工具會告知錯誤無法這樣做,並hold住約6分鐘才告訴你error(小聲說我也有是過checkout後在執行也不行...) ![image](https://hackmd.io/_uploads/r1ybZcC0T.png) - Bug錯誤告知: unreal hold住約6分鐘給你看 ![image](https://hackmd.io/_uploads/BkiLg9RCT.png) - Bug錯誤告知: 跳出錯誤 ![image](https://hackmd.io/_uploads/S1q6Sq00p.png) - 所以需要靠外部的P4V執行shelve才可以。 - P4V的Pending也會跟unreal一樣同步資訊,選擇大項或檔案右鍵執行Unshelve Files ![image](https://hackmd.io/_uploads/S179LcCAa.png) - 彈跳出視窗,什麼都不用選,再次確認並執行Unshelve ![image](https://hackmd.io/_uploads/B1-AU50Ca.png) - 此刻會發現清單圖式變不一樣了,滑鼠移過去會浮出便條資訊,告知此檔案被checkout了,並且這部是最新depot的版本資訊 ![image](https://hackmd.io/_uploads/ByUeFcR0T.png) - 同時到unreal看changelists的資訊也是被記錄在修改名單上(非shelve大項內),在content browser的素材狀態變驚嘆號,滑鼠移過去也告知非最新版(但不知為什麼沒checkout圖式) ![image](https://hackmd.io/_uploads/SJXdt5CRT.png) - 這時只能執行get latest功能,讓你的unshelve的檔案跟depot上的檔案做命運上的抉擇 ![image](https://hackmd.io/_uploads/r1_q1iAAT.png) - 執行後,P4V工具告訴你這問題需要你解決,所以圖式出現?,滑鼠移過去也告知你需要解決衝突 ![image](https://hackmd.io/_uploads/SJG21iCR6.png) - 根據你發生衝突的檔案右鍵執行Reslove功能 ![image](https://hackmd.io/_uploads/Sypp1sC0T.png) - 彈跳出視窗,並問你要選depot還是你修改版本?選擇Accept Target,也是選擇自己的版本為主(不要幻想merge) ![image](https://hackmd.io/_uploads/H1wCShCC6.png) - 執行完之後在P4V跟unreal的介面就恢復正常,進入checkout的階段,救繼續你未完成的修改,並checkin(submit) ![image](https://hackmd.io/_uploads/BJ7igj0A6.png) - shelve後,想要依照目前狀態繼續修改方法 - 執行完shelve,依照現在狀態做修改,想要checkin(submit)時發現並無法執行 ![image](https://hackmd.io/_uploads/rykbj30C6.png) - 所以你必須把在shelve的內容拖曳搬去default的changelists才行 ![image](https://hackmd.io/_uploads/SkLu3nRRT.png) - 這樣右鍵就可以執行checkins(submit)了,同時shelve的資訊也仍在 ![image](https://hackmd.io/_uploads/SkG53hA0a.png) - 想要有多重shelve,我有多個版本要測試 - 作法跟上面一樣,先把修改清單內容移到default ![image](https://hackmd.io/_uploads/SJeX3p0CT.png) - 跟上方作法一樣,取用不一樣的shlef - 建議執行P4V時,同時也關掉unreal會比較好,有遇過P4V作執行,unreal不會自動更新,透過工具更新也不能,關掉unreal在打開才會更新情況 # 肆. P4V(client) ## 🥁 登入P4V - 在windows搜尋,啟動P4V ![image](https://hackmd.io/_uploads/BkeEEukey0.png) - 會跳出登入資訊,輸入perforce server的ip,目前是10.100.10.151,port是1666 - 10.100.10.151:1666 - 接著在user欄位點擊Brose按鈕 ![image](https://hackmd.io/_uploads/Bybouyx10.png) - 選擇你的連線帳號做登入,按確定 ![image](https://hackmd.io/_uploads/HJtKFyl1C.png) - 在workspace欄位典籍Browse,選擇你已經創過的workspace做切換,並按OK按鈕(也可以留白先登入,在進去選workspace) ![image](https://hackmd.io/_uploads/B1V0tJgyC.png) - 資料皆填完,按最後OK按鈕做登入 ## 🥁 P4V介面簡介 - 大致分為menu區,目錄區,操作區,訊息區 - menu區: 這應該不太需要解說,個軟體都有 - 目錄區: 介面左上角,有Depot跟Workspce的顯示切換,也可以對所選資料夾或檔案做一些操作行為 - 操作區: 部分介面根據目錄區選擇的資料夾或檔案,顯示更深層的眾多資訊清單內容;部分顯示這任務類型的內容資訊 - 訊息區: 一些log資訊 - Depot區塊: - 可以顯示眾多公用專案內容 ![image](https://hackmd.io/_uploads/H1eK2JekC.png) - Workspce區塊: - 可以顯示你當下切換workspace的資料夾檔案狀況 ![image](https://hackmd.io/_uploads/H1s6aklyA.png) - 可以作workspace的切換,點選紅圈區塊 ![image](https://hackmd.io/_uploads/HyWQ0JeJA.png) - (下圖)這邊紅圈區會顯示近日有創立過的workspace[部分],點擊該workspace,則會顯示該workspace的資訊內容(資料夾架構) ![image](https://hackmd.io/_uploads/H16TCyxkC.png) - More Workspace: 顯示所有關於此登入帳號的woekspace,並可根據選取的做切換 ![image](https://hackmd.io/_uploads/rJ3JEelJC.png) - New Workspace: 創立新的Workspace - Edit Workspace: 變更顯示Workspace的數量,如果擁有10個workspace,也就只會顯示5個內容(要切換不同workspace畫面才會更新) ![image](https://hackmd.io/_uploads/H1nQFeeJR.png) ![image](https://hackmd.io/_uploads/H16TCyxkC.png) - 對檔案連點2下是可以直接開啟檔案,但對unreal專案來說,點.uproject檔案開啟才有用處 - 在workspace內的檔案會顯示檔案目前狀態 - 最左邊圖示可以快速快覽這檔案目前是被checkout?被追蹤?不是最新版本? - 最右邊\<binary\>就是顯示檔案是binary的檔案格式 - 右邊倒數第二個的公式是#workspace版本號/depot版本號,#5/7這代表你目前workspce的檔案版本是被回溯到第5版,目前depot的最新版是第7版; #2/2也就代表workspace跟depot都是第二版的最新版本 ![image](https://hackmd.io/_uploads/r1ZLoggkR.png) - 滑鼠移至檔案時也會清楚的解釋該檔案目前的詳細狀態解說 ![image](https://hackmd.io/_uploads/B1OKRexJR.png) - 在資料夾或檔案,會在不同的狀態下,滑鼠右鍵跳出的執行選單內容也會跟著不一樣 ![image](https://hackmd.io/_uploads/BJ4WRleyA.png) - depot和workspace都可以執行排序或fileter的功能 ![image](https://hackmd.io/_uploads/ryR3H-gyA.png) - 操作區塊可以呼叫出多個不同任務種類頁面 - 有個+的按鈕能叫出這些頁面 ![image](https://hackmd.io/_uploads/SyN61bxkC.png) - 叫出幾個頁面相對的也會少幾個選擇,相對應的 ![image](https://hackmd.io/_uploads/B16Mgbxk0.png) - 也可以在menu區的View選單呼叫出來頁面 - Files - 檔案資訊 - 選擇workspace的資料夾或檔案,Files page會顯示該資料夾同層級的檔案詳細資訊,例如修改時間.檔案大小...etc - 在"欄位"點擊滑鼠右鍵可以顯示更詳細的資訊 ![image](https://hackmd.io/_uploads/BJLdZ-g1C.png) - 在"內容清單"右鍵也可以執行很多功能 ![image](https://hackmd.io/_uploads/rySGh-eJC.png) - Pending - 此workspace被checkout的項目(含已修改和尚未修改檔案) - 跟unreal裡的changelists一樣 - 不受workspace的檔案選擇影響 - 如果沒有創造pending changelists,只會出現default大項(如下圖) - 藍色三角形代表裡面是空的,紅色三角形代表裡面有內容 ![image](https://hackmd.io/_uploads/HkjOEfey0.png) - 展開pending內容 ![image](https://hackmd.io/_uploads/rkv-rzx1C.png) - 跟unreal changelists一樣可以拖曳變換pending的內容 - 在"內容清單"右鍵也可以執行很多功能 - 上方也有filter過濾資訊功能 - Workspaces - 列出workspace,並有更多詳細的執行功能在裡面 - 也可以在這執行切換workspace ![image](https://hackmd.io/_uploads/r1NCeQxJA.png) - History - 歷史日誌 - 在workspace下選擇**資料夾** - 選擇workspace的root資料夾,顯示全部的歷史詳細紀錄 ![image](https://hackmd.io/_uploads/rkGDDbxyR.png) - 選擇workspace的某子層資料夾,顯示該資料夾下的檔案群歷史詳細紀錄 - 在workspace下選**檔案** - 選擇workspace的某檔案,只會顯示該檔案的歷史詳細紀錄(比較少資料) - 會顯示該檔案depot的總版本數的資訊,也標示workspace被回溯到第幾版(紅框) ![image](https://hackmd.io/_uploads/S1n1kzeJC.png) - 共同功能 - 在"欄位"點擊滑鼠右鍵可以顯示更詳細的資訊 - 在"內容清單"右鍵也可以執行很多功能 - Submit - submit(checkin)被送出depot的歷史資訊 - 不受workspace的檔案選擇影響 - 在"欄位"點擊滑鼠右鍵可以顯示更詳細的資訊 - 在"內容清單"右鍵也可以執行很多功能 - 一個sumbit紀錄裡面,可能會有多個檔案送出資訊 ![image](https://hackmd.io/_uploads/BJ6uwfgk0.png) - History和Submitted的差異 - revision(該檔案修訂版本號) - 每個檔案的另存版本號 - changelist(事件的更改清單) - 一個修改事件任務,可能會擁有很多檔案的修訂版本號 - changelist與revision之間的關係 - 白話文:我這次修改,創立了一個changelist(事件版本),這個changelist可能會有多個檔案的revision(檔案版本),例如:置換某個男主角色的材質這就是一個changelist(事件版本),這事件包含很多檔案的修改,修改了盔甲材質球第八版,皮膚材質球第三版,連帶貼圖序列第五版的revision(檔案版本) - 重點:建立一個恰當的回溯點很重要(changelist事件)。回溯一個事件,可以同時回溯多個檔案,就不用各別每個檔案一個個各自回溯。事件的定義可大可小,由user決定,user只要想如果要undo回溯,怎樣對他或別人比較有利跟方便? - description - 這次submit(publish)的修改製作內容的概述 - 這很重要,這資訊不只是要自己看的,別人也會看。運氣不好需要回溯,你就會嘗到苦頭了 - 最低標準:過了2.3個月後自己也要看的懂description再寫什麼 ## 🥁 Pending ## 🥁 使用Perforce ### 🎉 新增 - Mark For Add - 口訣: 專案下新產生的檔案都要做Mark For Add。 - 註冊,此檔標記被perforce追蹤。 ### 🎉 編輯 - Checkout - 口訣: Checkout後才能開始做local檔案編輯。 - 前有提到unreal製作時無法共同編輯問題。Checkout功能就是透過"機制"去防堵問題發生。 - 簽出,提取。大聲跟大家宣布這檔案我要修改(圖式視覺化),別人別去修改這檔案。 - Checkout自己看到的圖示,他人看到別人Checkout的圖示,可以知道是誰在編輯這檔案。 - 告知有防護機制: Checkout仍是可以作檔案編輯,但是修改完是無法做local存檔。 - 防護機制說明: 被鎖定追蹤過的local 檔案是唯讀機制。Checkout解開local檔案唯讀。 - 不要check out最上層,會被揍。根據要修改的檔案做checkout。 - check out防護很重要。動畫像積木,錯了還能做修改,遊戲像飲料,錯了很難做修改。 - submit, - submit, - save - 單個檔案,集體submit - file history - workspace - file - get last - Revert - Revert If Unchange - Revert - Revert, - get last,Revert ### 🎉 刪除 - mark for delete ### 🎉 特殊 - Resolve - 解決衝突 - Accept Source: 依照depot雲端素材為主 - Accept Target: 依自己版本為主做覆蓋 - Accept Meged: 讓工具自動做合併 - Run Merge Tool: 使用merge工具做手動合併 ![image](https://hackmd.io/_uploads/SkiSl4sMC.png) - Reconcile - 如果有連結到perforce server,您作的一舉一動都會被perforce追蹤進入changelists,才能進入check in(submit) - 如果曾經連結過perforce server,但失去連結並斷掉perforce的連接設定,之後在這情況下強制修改檔案,最後再連回perforce server,因失去了perforce server鷹眼的監控,所以不會自動進入changelists,也就導致無法check in(submit) - 最大重點,發生在先前專案有跟做過連結,突然遇到斷網情況下必須作業,再連回perforce而造成的錯亂現象才須執行 - 例如: 您的公司電腦網路斷了,但急需進度...必須再斷網的情況下作業 - 例如: 你被外派到國外出差,上飛機前主管要求,這很重要...但飛機上沒網路...需要下飛機前交出 - 例如: 你感染上了某傳染病,不得需要在家工作,無法連至公司perforce server - 例如: 某些狀況您住院了,主管跪下來求你幫忙修改,你不得不在病床上做修改,無法連至公司perforce server - 斷網做修改,真的不知道自己在幹嘛做了什麼? - 新增大量資料夾內容 - 刪了部分大量檔案 - 更改檔案名稱,check out/mark add/mark delete ![image](https://hackmd.io/_uploads/H1jb-SofC.png) ![image](https://hackmd.io/_uploads/S1udBBozR.png) ![image](https://hackmd.io/_uploads/ByBEtHizC.png) - 在做上層做Reconcile,會把很多可能不是你要加入追蹤的也加進去了,最好是在可能有修改的區域做 ![image](https://hackmd.io/_uploads/Sk4da6R2a.png) # 伍. Perforce進階 ## 🥁 忽略專案下的素材類型 - 要如何設定ignore忽略某種類型檔案或特定檔案或資料夾 - 產生.p4ignore - 找到專案資料夾並在檔案名稱打上「 .p4ignore」,存檔類型設定為「所有檔案 (*.*)」 - File → Open Command Window Here - p4 set P4IGNORE=.p4ignore - 驗證 - 已經added的檔案或資料夾 - 在stream做設定 - create stream 當下時也可以設定 - 編輯stream ignore # 陸.使用Perforce,需要改變思維和作法 - 前提下你要清楚要修改什麼檔案? - 清楚此次修改行為會影響什麼檔案? - 修改檔案前先refresh > get latest version(sync) > checkout > modify - 工作檔案任務需要切碎一點,檔案大防守範圍太大,遇到修改時會有可能B同事必須要等A同事修改完了,才能接手修改,無法達到同步作業 - levels - sequesces - blueprints - material functions - 沒有在修改檔案就check out放掉,不要鎖住檔案無法讓其他人製作 - 固定每日早上上班執行get latest version,更新最新版本資訊 - 固定每日下午6點左右執行submit(checkin) - 良好的submit(checkin)習慣,隔天你突然請假,有急案需要修改...你綁架住這檔案了...別人無法修改... - submit comment要寫清楚,最好是要讓別人懂這次修改是什麼資訊,最低限度是要日子久了連你要自己也要看得懂 - 商城素材建議再另一專案挑選完migration到正在製作中的專案 # 柒.Perforce Streams ## 🥁 介紹 - Stream(流.線程): 簡稱有大腦的分支 (branching with brain) - Branch分支: 一個大型專案生產線(主幹)會需要分配大項任務去開發或生產(分支),等分支任務完成再合併主幹(merge or copy) - 形象比喻: 像一棵大樹(主幹mainline)分出很多的樹枝(分支branch),樹枝會再分更小的樹枝 - 動畫專案製作喻: 某動畫案子會隨著時間往下製作,這就是主幹(mainline),專案會隨著時間軸不同分配部門去製作而形成分支(branch),例如這專案時間軸,模型部門和材質部門做分配一大部分人分支任務(branch lv1),模型部分再分場景組跟人物組(branch lv2),場景組的某個大型城市需要再分配建築物給不同人製作(branch lv3)。隨著時間軸就要慢慢的合併至主幹(merge or copy) ![image](https://hackmd.io/_uploads/r17H3SymR.png) ![image](https://hackmd.io/_uploads/By4LkL1QC.png) - 一般版控的分支(git)與有大腦的分支(perforce): 一般的Git只有單存的分支,沒有從屬依賴關係,不知跟上層branch跟mainline的差異更新提醒,perforce 號稱的有大腦的分支(stream),就是有顯示從屬依賴流程線關係和差異更新提醒的功能,節點樹狀圖 ![image](https://hackmd.io/_uploads/HkpfgLkmA.png) - stream可以當作分配出去的任務區塊,分出去的任務分支可大可小,分出去的任務可用事件,人,組別..等而創立,由當事人來定義 - stream可以分5種類型: Release、Mainline、Development、Virtual、Task,歸類越前面stream類型的檔案會比較穩定性(Release Stream),越後面的修改程度會更頻繁更大 ![image](https://hackmd.io/_uploads/rkAJx8JX0.png) - 同個stream類型,可以擁有很多不同的stream工作任務區塊。 - 例如:同樣development stream類型可以擁有很多工作分類區塊,有一群人被分配在遊戲開發區,一群人分配在場景製作區,一群人在動畫處理區,不同工作區塊的checkout、submit(checkin)...等互相不受影響,但規範在同區的人就會受到checkout、submit(checkin)影響 - 固定從屬(主從)階層關係解釋 - 由上到下固定架構就是最上面是release種類多版本,mainline只會有一個,development種類多版本;其他類型不一定 ![image](https://hackmd.io/_uploads/S1I71D1XA.png) - 從屬依賴流程線解釋 - 除了有些固定的上下置放層級外,也搭配流程線清楚觀看從屬來源關係 ![image](https://hackmd.io/_uploads/rywokP1Q0.png) - 線條圖示顏色通知解釋 - 代表擁有向下merge/intergrate的功能(合併整合),經檢查stream兩端間無須更新動作 ![image](https://hackmd.io/_uploads/ByX1gDyXA.png) - 代表擁有向上copy的功能(複製覆蓋),經檢查stream兩端間無須更新動作 ![image](https://hackmd.io/_uploads/HylieDkmR.png) - 需要向下merge/intergrate,經檢查stream兩端間須做更新動作 ![image](https://hackmd.io/_uploads/Syz8ZwJXC.png) - 需要向上copy的功能,經檢查stream兩端間須做更新動作 ![image](https://hackmd.io/_uploads/ByvsbvyXC.png) - 可以快速切換不同的stream ![image](https://hackmd.io/_uploads/SJ9T-8VQ0.png) - 依照不同的需求產生不一樣類型的stream - 可以在同一個workspace切換不同的stream - 不同的stream執行checkout或submit,並不會同時影響到其他stream,當在工作執行的stream到一個階段就可以合併至mainline,其它的stream接收到mainline stream有更新,其他人也會跟著更新內容 ## 🥁 Release Stream ### 🎉 Release Stream細部解釋 - 使用時機: 在我們專案可當作要算圖使用的lock release版本,可以想像是lighting的算圖檔案 - 原理: 在某個時機點執行執行,就是在那時間點對Mainline Stream執行快照複製出Release Stream,要執行算圖鎖定算圖版本或需要某版發行版本就來這拿 - 特性: 五個類型裡面最穩定(修改頻率最低),要發布的stream - 建立於Mainline Stream(父層級)的Release Stream(子層級) - Mainline Stream有更動,並不會影響到Release Stream - 無法從新版的Mainline Stream壓過(copy)Release Stream;但可以從Release Stream進行修改後合併(merge/intergrate)回mainline,如下圖表示 ![image](https://hackmd.io/_uploads/S1cQMNmmC.png) ### 🎉 Release Stream實做解釋 - 開啟Stream Graph的頁面,並選擇妳要操作的depot名稱(後面的教學都是沿用這步驟) ![image](https://hackmd.io/_uploads/B14nVL7XC.png) - 右邊頁面會出現mainline stream,對它滑鼠右鍵 ![image](https://hackmd.io/_uploads/SyR4LUX70.png) - 設定資訊 - stream name,輸入要發行的名稱,讓其他同事一看就懂的名稱 - stream type,選擇release類型 - create a workspace to use with this stream勿勾選。沒勾選代表沿用目前的workspace做切換;有勾選就會產生多一個workspace,會更複雜,圖下方會解釋...(進階A) - branch files from parent on stream creation要勾選,沒勾選會很麻煩。有勾選代表我要把當下mailline stream的所有檔案快照至分支;沒勾選代表我沒打算要把mainline檔案copy過來,切換至此stream時,只會有資料夾不會有檔案。在release stream如果沒勾選的話是無法同步檔案的,建議刪掉此stream,再生成一個新的release stream...(進階B) ![image](https://hackmd.io/_uploads/S1h8tLXX0.png) - 成果 ![image](https://hackmd.io/_uploads/HJqkKDNQC.png) - 切換時會詢問取得最後版本,yes。也會發現原本已有做三個版本,產生新的stream跟切換過去後,版本就會變第一版(也就是在另外一區的重新第一版) ![image](https://hackmd.io/_uploads/SJseqDVQ0.png) :::info - release stream是當下時間版本固定式,mainline stream是時間版本進行式。 - 發行了release版本,可以有理由的從release版本做修改合併回mainline stream,但mainline stream做了修改就沒有理由併回原本release版本,直接做新的release stream才是正確之舉 ![image](https://hackmd.io/_uploads/Hy0g7qOmC.png) ::: - (進階A) create a workspace to use with this stream 無勾選執行VS勾選執行? - "無"勾選執行: - 工具不會產生"新"workspace,只會有1個workspace並有2個stream可做切換 ![image](https://hackmd.io/_uploads/SyuJL2tQ0.png) - 個人覺得比較好的方式,切換不同的stream在同一個工作實體路徑 - 勾選執行: - 工具會自動產生自動命名的workspace,就會擁有2個workspace並有2個stream做切換 - 此時就會發現多了一個workspace,也就意味多了一個工作實體路徑 ![image](https://hackmd.io/_uploads/H1uWUnFQR.png) - 目前不了解為何提供可以自動多創worspace功能?這樣變成2個workspaces(實體資料夾)和2個stream可做切換,會有4種排列組合,2倍的專案工作檔案量,目前不推薦這種做法 - 當我從release stream修改了錯誤並submit,需要合併回mianline stream的情況實做 - 發生情境: 當release後發現bug或需要修改的必要,此時mianline stream已submit了非常多版本,需要併回主線,讓其他線程也可以得到這更新bug資訊 - 記得! release出去的線程當下時版本即是固定版本,沒有必要在從主線併回舊release的線程,而是必須要產生新的release - 先示範mainline做多個submit後,在release stream不會收到需要更新的圖示 ![image](https://hackmd.io/_uploads/S1CQYRt7C.png) - release修改併回mainline實做: - 切至release stream ![image](https://hackmd.io/_uploads/BkyI9CFQR.png) - 同時會發現原本在mainline stream狀態有很多版控數量,到新創的release stream會從第一版本開始,重新開始的版本控制 ![image](https://hackmd.io/_uploads/SyyCj0KXR.png) - 也會發現在某stream做checkout時,其他stream也就不會被checkout ![image](https://hackmd.io/_uploads/Hy_zG19mC.png) - 也會發現release增加了很多版本,mainline版本是不會跟著增加的,因為是不同的區塊。例如下圖,release版本號由1增至5,mainline版本號一樣在版本3,沒增加 ![image](https://hackmd.io/_uploads/SyyuFy97R.png) :::info 目前的示範是release"有"增加版本號和mainline"無"增加版本號的情境 ::: - 發現原本線條是灰色的,變成了綠色,代表release和mainline有檔案差異,提醒使用者要併回 (merge/intergrate)mainline ![image](https://hackmd.io/_uploads/B1RqYy9XR.png) - 併回mainline記得要把workspace切至mainline,方可執行。只要記得因為我是要修改整合至mainline的檔案,所以我現在當下的workspace必須是被修改的stream(反過來想,如果我workspace當下是在release,為何要release併回release??) - 同時滑鼠右鍵執行merge/intergrate files to ... ![image](https://hackmd.io/_uploads/BJIgnycmA.png) - 彈跳出新視窗,注意是否選擇倒是stream to stream,選擇正確的source stream(預設是選字母排序,所以需要手動自動選擇),介面中間選擇automatically submit after resolving,執行merge ![image](https://hackmd.io/_uploads/rkUra1cQC.png) - 成功合併至mainline,下圖為從頭到尾的介面變化 ![image](https://hackmd.io/_uploads/HyH41l57R.png) :::info 以下的示範是release"有"增加版本號和mainline"也有"增加版本號的情境,會有衝突的發生及須解決 ::: - 範例隨著時間軸移動,在release stream從版本5增至8,在mainline stream從版本4增至5,擬造這複雜情況 ![image](https://hackmd.io/_uploads/BJdLjl57C.png) - 跟上方一樣的做法,滑鼠右鍵merge/intergrate files to …,執行merge後發現工具跳出告知需要解決衝突的提示,無法往下一步走 ![image](https://hackmd.io/_uploads/H1DNcl97R.png) - 到Pending的page發現標示needs resolve的提醒 ![image](https://hackmd.io/_uploads/ryjuqg5QC.png) - 在待解決的檔案群滑鼠右鍵選擇resolve,下圖截圖錯誤(非Revert) ![image](https://hackmd.io/_uploads/Sk2Kcl5X0.png) - 只能二擇一,選擇source(release)的檔案或選擇target(mainline)檔案 ![image](https://hackmd.io/_uploads/Sk8jcecX0.png) - 在release stream從版本5增至8,在mainline stream從版本4增至5,最後合併到mainline stream版本6的縮圖情況 ![image](https://hackmd.io/_uploads/rkm7hl5QA.png) ## 🥁 Mainline Stream ### 🎉 Mainline Stream細部解釋 - 專案執行主要的stream,所有的分支類型圍繞著Mainline Stream,不管是分支拆出或合併 - 使用時機: 接受眾多分支的合併和拆出至主幹 - 特性: 五個類型裡面最主要幹線,原本的設計是負責分支的拆出跟合併,mainline stream盡量避免跟其他stream衝突合併的行為,mainline stream盡量成為保持穩定安全的主幹 ### 🎉 Mainline Stream實做解釋 - 上述操作方式皆可在在mainline stream實做 ## 🥁 Development Stream ### 🎉 Development Stream細部解釋 - 原理: 在不影響主幹mainline的前進為前提而開分支獨立執行線程,等待階段性或全面完成再併回mainline - 特性: 開發.測試.研究.生產的旁支線程 - 使用時機: 我個人的建議是因為我們unreal的專案目前只有動畫製作為主,以下情況建議開deleveopment stream - 如果同樣專案CG素材要去做其他產品設備開發研發(如VR頭盔開發.motion leep開發.stereo.遊戲製作...等),盡量不會修改到原本的content內容為前提 - 動畫開發測試,有機率的會放棄這線程,例如:想要測試動畫某帥氣的功能(燈光與材質的調整),我不想影響主線程生產製作,我有可能會破壞到mainline的製作,有可能此功能測試會放棄不用,也有可能會併回mainline。 - 生產線程的旁枝分支作業,可以是全新乾淨的分支或拿部分檔案的分支另外作業(後面會有教學) - development stream有利就有弊 - 優點: - 可以在development stream開party: 可以在[一群人]再開發區(development stream)亂搞測試,改壞檔案也沒關係,不影響主線程(mainline stream);如果[個人]測試可以在workspace測試,短時間測試可用revert復原,稍長時間可以用shelf功能 - development可拋棄式使用: 可以中途選擇是否要合併回mainline,或是放棄此stream - 精簡mainline stream的version control和log數量: 在development submit的 version control和log可以很多(例如上百條submit log),合併copy至mainline的version cotrol和log就會很少(一個或少數個) - checkout 在stream間互不影響: checkout 正在使用的development stream(簡稱dev 1.0),不會影響到其它的development stream(簡稱dev 2.0)和mainline stream。所以mainline可以正在checkout並修改CG主角asset(意圖為正確的進度製作),平時時間在dev 1.0也可以checkout 和修改CG主角asset(意圖為測試讓主角更精進的開發),dev 2.0做一樣的asset不同的開發checkout 和存檔也不會影響到 - 缺點(或是稱做該注意的地方): - mainline僅能回溯development合併的版本(copy): 如果是要回溯development中間發布的版本,請切到development stream,並change revision,再submit development stream,最後再copy 回mainline stream - stream間執行merge/intergrate和copy會有衝突的風險: 因checkout 在stream間互不影響的關係,所以有機率遇到衝突,必須要做抉擇的動作,或手動修復 - development stream與其他stream做合併的先後順序 - 需要先知道的概念是,development stream相較於mainline stream,develpment可以允許衝突雜亂,所有複雜的衝突處理必須在develpment處理好,再合併(copy)至mainline。記住髒亂可以在自家,但給別人的東西必須是乾淨整理過的 - 解釋: 前面提到的合併為merge/intergrate或copy - 再次複習一次名詞解釋,由mainline的content合併至develpment稱為merge/intergrate,從mainline來的檔案需要移至development做複雜檔案的融合/整合;反之由develpment的content合併至mainline稱為copy,從development需整理好了直接做copy paste動作,不會有衝突merge/intergrate的行為發生 - 當雙燈號都亮時,必須優先執行 merge/intergrate,處理完衝突(或無衝突),綠色圖示變灰色後,才能執行copy行為,紅色圖示變灰色(如下圖左方),不這樣做工具也會擋 ![image](https://hackmd.io/_uploads/SyvgJmsQA.png) - 當只有綠燈亮起,建議盡速從mainline更新執行merge/intergrate,能拿到最新檔做更新,development沒有比mainline擁有更新的檔案(如上圖右) - 當只有紅燈亮起,代表mainline沒有比development擁有更新的檔案,只需直接copy至mainline ### 🎉 Development Stream實做解釋 - 一樣右邊頁面會出現mainline stream,對它滑鼠右鍵 ![image](https://hackmd.io/_uploads/SyR4LUX70.png) - 跟release stream的設定差不多,只是stream type必須選擇正確,development ![image](https://hackmd.io/_uploads/HJTPsVsXR.png) - 創完後會發現圖示都是灰色都無須合併 ![image](https://hackmd.io/_uploads/S1TznEiXC.png) - 切換至dev 1.0,進行了檔案修改,圖示更新告知dev 1.0有相較於mainline擁有更新的檔案 ![image](https://hackmd.io/_uploads/r19SCVjmA.png) - 當於dev 1.0製作過程中,mainline有人更新檔案或是有其他線程合併至mainline,圖示更新告知雙邊都有更新檔案。個人建議如果有出現通知mianline有更新檔案,就盡量先馬上更新拿到新檔案,如果有要修同一個檔案的話才能建立在別人新檔下編輯製作避免掉要做檔案抉擇跟手工合併的麻煩 ![image](https://hackmd.io/_uploads/BkzAJrsXA.png) - 一樣先確認切換至dev 1.0 stream,右鍵執行merge/intergrate files to … ![image](https://hackmd.io/_uploads/r1_RxSoX0.png) - 重複確認一下source stream選擇是否正確,綠色區塊 ![image](https://hackmd.io/_uploads/r1B4QBs7R.png) - 沒有衝突的情況下,就順利往下處理 ![image](https://hackmd.io/_uploads/rJwK-Kh7C.png) - 切著需要切換至mainline stream並滑鼠右鍵執行copy ![image](https://hackmd.io/_uploads/BkKzGKhQR.png) - 一樣要選擇正確的source(紅底線),看是要採用自動還手動方式處理(綠底線) ![image](https://hackmd.io/_uploads/SJyDMF2XR.png) - copy成功畫面 ![image](https://hackmd.io/_uploads/B1qZmK3mR.png) ## 🥁 Virtual Stream ## 🥁 Task Stream ## 🥁 stream進階 ### 🎉 stream進階前言 - 在新增或編輯stream時,有進階設定可選擇專案下的細部路徑 - 有以下功能類型,share, isolate, import, import+, exclude - 各功能的權限跟用處如下圖表 ![image](https://hackmd.io/_uploads/Hk95KY37C.png) - 為什麼要以上功能?? - 一個大型案子資料夾內容很多,但使用stream時只需幾個資料夾檔案需要使用, - 一來不想要抓取大量專案內容在workspace - 二來避免有犯錯機會改到不能改的 - 可以stream設定排除一些路徑檔案(其實用ignore方式也行) - 可以引入檔案,卻不能修改更新至其他線程(mainline) - 也可以引用其他depot專案的檔案(但不能修改) - 可以在新增或編輯stream時做進階設定 - create stream ![image](https://hackmd.io/_uploads/BJVnBTamC.png) - edit stream ![image](https://hackmd.io/_uploads/S12aH6pmC.png) - advanced ![image](https://hackmd.io/_uploads/ryavBpT7R.png) - 可以在同一個stream做多個進階路徑設定 - 以下範例會以這為基礎往下做 - 創一些跟執行功能一樣的資料夾名稱,方便判別 ![image](https://hackmd.io/_uploads/rJ3qwppX0.png) ### 🎉 share - 用途: 針對部分資料夾或檔案引用,不想整專案引用 - create new developmemt stream ![image](https://hackmd.io/_uploads/BJK8dp6XR.png) - after create stream,發現切換到這stream,p4v和實體資料夾變成僅有我設定share的路徑 ![image](https://hackmd.io/_uploads/H1mJtapX0.png) - 當然如果設定多個資料夾的方式就如下圖 ![image](https://hackmd.io/_uploads/HyJTYpaQC.png) - 資料夾被設定版控的情況如下,其他原本資料夾有的檔案都不會被帶上 ![image](https://hackmd.io/_uploads/BkRb9pTmR.png) - 可以擁有所有權限 ![image](https://hackmd.io/_uploads/ryjHl0a70.png) - 可以submit,送出版控 ![image](https://hackmd.io/_uploads/B1gfZCpQA.png) - 可以顯示同步狀態 ![image](https://hackmd.io/_uploads/BkP6bRp70.png) - 做merge/intergrate行為是成功的 ![image](https://hackmd.io/_uploads/ry8LzRT70.png) - 做copy行為是成功的 ![image](https://hackmd.io/_uploads/S1KKM06XR.png) ### 🎉 isolate - 用途: 老實說這isolate設定,在動畫製作的製程上用不太到。比較會用在程式開發方面和遊戲開發,bin資料夾下的.exe版控或game package...等,希望能進入版控,但不想推進至父stream或不想被父stream更新影響 - 官方有很強烈的表示,設定isolate的路徑,前面父層級stream或目前設定的stream,必須加上擁有share的設定,設定isolate路徑層級以上的路徑 ![image](https://hackmd.io/_uploads/B13x5d-VA.png) - 創立新的stream 進階isolate設定 ![image](https://hackmd.io/_uploads/SygBDuWV0.png) - 發現isolate資料夾的內容沒有被同步過來, ![image](https://hackmd.io/_uploads/HkYIJtb4C.png) - 可以擁有所有權限 ![image](https://hackmd.io/_uploads/r1T8ryRQA.png) - 在設定isolate的path,是可以submit的,但是在自己的世界裡做版控 ![image](https://hackmd.io/_uploads/B1gfZCpQA.png) - 但也會發現在設定isolate的路徑,不管是從下游的stream檔案修改,或是跟上游的stream檔案修改,都不會出現合併圖示更新,也無法執行merge/intergrate和copy的動作,這就是isolate的功能 ![image](https://hackmd.io/_uploads/S18iLJRmR.png) - 說說跟ignore的差別? ### 🎉 import - 用途: 引用[*此專案*]或[*其他專案(depot)*]的某路徑content,並強制新成立的stream針對import的路徑無法在此stream做版控 ![image](https://hackmd.io/_uploads/ryPnL9bNC.png) - 產生後stream後,也會看到workspace的圖示變了不一樣 ![image](https://hackmd.io/_uploads/HJsCU5ZVC.png) - 可以擁有所有權限 ![image](https://hackmd.io/_uploads/SJIL_cW4R.png) - 可以checkout,但無法submit,submit過程會發生阻擋 ![image](https://hackmd.io/_uploads/rJokYcW4A.png) ![image](https://hackmd.io/_uploads/SkhNKqZNC.png) - 如果父層級stream更新內容,在stream的流程線並不會跳出要更新的提示,此stream也無法submit,無法更新到父stream ![image](https://hackmd.io/_uploads/HJ0_a5-E0.png) - 另一種import或import+的獨特使用方法,import其他depot專案的東西,使用方法如下圖,可以在不破壞其他depot內容狀態下執行 ![image](https://hackmd.io/_uploads/BJ7GVi-NR.png) ### 🎉 import+ - 跟import的功能跟使用方式差不多,唯一不一樣的在於可以在新成立的stream做submit,做版本控制和回溯,但無法跟父層級做來回合併更新 ![image](https://hackmd.io/_uploads/Bk3HUobV0.png) - 也會發現原本的版控也出現了!也就意思可以回溯至舊版本 ![image](https://hackmd.io/_uploads/Hk6IwjZNA.png) - 可以擁有所有權限 ![image](https://hackmd.io/_uploads/H1f1_iW4R.png) - 是可以submit,版本控制的,也能回溯 ![image](https://hackmd.io/_uploads/Sy3VuoZNA.png) - 跟import的功能一樣,父.子層級stream有更新,stream間的更新互不影響跟提醒 ### 🎉 exclude - 排除阻擋路徑檔案,跟share的功能完全相反。如果要同步的路徑多就用exclude方法比較方便省時;如果要同步的路徑少就用share方法比較方便省時 - 方法如下 ![image](https://hackmd.io/_uploads/HkFRjsWV0.png) - 切換stream後呈現 ![image](https://hackmd.io/_uploads/SkYm3jZEA.png) - 可以擁有所有權限 ![image](https://hackmd.io/_uploads/r1kWti-VR.png) - 發現下了這設定的路徑什麼都不能做,基本上就跟ignore一樣 ## 🥁 其他需要注意的地方 - share, isolate, import, import+, exclude設定路徑皆可混用 - 兩邊stream資料不一樣的情況下,切換會花費很大量時間,例如原本父stream有5000個檔案,子層級只有50個檔案,這兩個stream在做切換時會跟server做大量檔案的傳輸 ## 🥁 刪除stream - 右鍵執行刪除時,如果出現下方錯誤訊息,代表是你刪除的stream是目前使用的workspace設定 ![image](https://hackmd.io/_uploads/S1apUtYXA.png) - 遇到以下情況就是需要把workspace目前的stream切成其他stream,才能執行刪除 ![image](https://hackmd.io/_uploads/ryfZSKY7C.png) - switch至mainline stream,執行刪除 ![image](https://hackmd.io/_uploads/BJ_sUFYQR.png) - 現在執行的刪除stream並非真正的刪除,此stream的差異資料仍會在此名稱的stream裡。下次如果創了一樣名字的stream,content的內容會跟之前刪除時的狀態一樣 - 刪除stream前depot的狀態圖示 ![image](https://hackmd.io/_uploads/ry-aMn-4A.png) - 不管怎樣選擇結果都是會一樣,所以...就照原設定做刪除 ![image](https://hackmd.io/_uploads/H10CfnbVR.png) ![image](https://hackmd.io/_uploads/Sk-WXh-4A.png) - 刪除stream後depot的狀態圖示,保留了跟父stream的差異檔案紀錄 ![image](https://hackmd.io/_uploads/BJ2m73b40.png) - 下次如果又再創**一樣的名字的**stream name,新的stream也會將舊的紀錄拉回線在新創的stream裡面,解決的方法有兩種: - 取另外的stream名稱 - 請管理員至P4Admin做刪除動作,即可使用原名stream ![image](https://hackmd.io/_uploads/ByziEhWEC.png) ![image](https://hackmd.io/_uploads/BJEpE3ZNC.png) ![image](https://hackmd.io/_uploads/SJIRE3-N0.png) ## 🥁 stream的結論 - 我們公司第一階段採取stream的策略,主要使用mainline stream製作,並使用release stream功能,development功能就看是否有需要再使用 - Depot - Stream - Workspace這三者關係再次釐清 - Depot: 紀錄差異版控的地方(公用交換區) - Workspace: 在本機製作的地方(私用工作區) - Stream: 在本機可以切換不一樣的工作線程(私用工作-線程種類區) # 柒.介紹Perforce Server ## 🥁 免費使用規則 - 預設免收費 ![image](https://hackmd.io/_uploads/B1LT0gy6a.png) - A選擇: 可以創造5個自由帳號,如果在5個數量帳號以內(含)的情況下,會有限制20個workspace(每個帳號的本機個工作區塊加總)數量限制,但可以追蹤版控的檔案數量無限。 - B選擇: 可以創多個無限制數量的自由帳號,但會有1000個以內版控的檔案數量限制。 - A或B選擇一但達標限制,server的顯示就會出現紅字提醒 ![image](https://hackmd.io/_uploads/H1j3ftg7R.png) https://www.perforce.com/manuals/p4sag/Content/P4SAG/install.tips.release.html ## 🥁 創建depot和stream和workspace ### 🎉 概念 - 步驟一: 先於sever端,管理者登入p4 admin介面創建depot,創立怎樣的公用倉庫 - 步驟二: 可於client端,任何user登入p4v介面創建stream,在公用倉庫下定義mainline stream類型流(主幹) - 步驟三: 於client端,創立workspace,定義自己本機存放位置 - 步驟四: 把新專案及素材放入workspace內並更新(add and submit)至depot ### 🎉 於p4 admin介面創建depot - create depot ![image](https://hackmd.io/_uploads/ByX_kbkap.png) - 彈跳出小視窗,要求輸入新depot名稱 ![image](https://hackmd.io/_uploads/Bke3Zfka6.png) - 預設送出 ![image](https://hackmd.io/_uploads/Hy03ZzkTa.png) ### 🎉 於p4v介面創建mainline stream - 需要到p4v client端創立stream - 按新增(+),叫出stream graph視窗 - 在depot欄位,透過下拉是選單選擇該新增的專案名稱 ![image](https://hackmd.io/_uploads/H1MxQz1pa.png) - 右側空白處右鍵執行,New Stream ![image](https://hackmd.io/_uploads/Bye9mGkpa.png) - stream type選擇mainline(紅) - 並選擇對應的depot(綠) ![image](https://hackmd.io/_uploads/HJLYIYe7A.png) - 此時看到有多出來的stream ![image](https://hackmd.io/_uploads/rkiBNf1a6.png) ### 🎉 於p4v介面創建創立workspace - 前方教學已有教 - 創立workspace當下可以指定已存在路徑位置,或重新指定新的資料夾位置,再把素材丟進去 ### 🎉 於p4v介面的workspace內新增專案,add and submit(check in)至depot - add素材進版控 - 可於p4v外部作 - 也可以再unreal editor作 ## 🥁 user與group與permission的關係 ## 🥁 創建depot和stream ![image](https://hackmd.io/_uploads/BySDdWNTT.png) ![image](https://hackmd.io/_uploads/rkmdub466.png) ![image](https://hackmd.io/_uploads/rkmz8IuT6.png) ## 🥁 遇到白目離職同事惡意臨走前checkout專案或突然請假checkout鎖住檔案解決方式 ### 🎉 解決流程,基本上就是想辦法登入該名電腦的p4v,並revert該名的checkout - 更改該名的密碼 - 更改成該名使用者更改環境 - revert已checkout檔案 ### 🎉 更改該名的密碼 - 如果有順利得到到該名成員的密碼,則無需執行下面步驟來需更改密碼 - 先遠端登入到perforce sever的電腦 ![image](https://hackmd.io/_uploads/S14W8bjfA.png) - 在P4admin介面的Users&Groups,選擇該名滑鼠右鍵,選擇更改密碼 ![image](https://hackmd.io/_uploads/HJ9hXbifC.png) - 在server端無須輸入舊密碼,直接更改成新密碼 ![image](https://hackmd.io/_uploads/HJgvE-sfR.png) ### 🎉 更改成該名使用者更改環境 - 執行前需要知道一個概念,在你自己的登入環境下是無法使用他人的workspace,所以必須登入該名環境 - 接著可以在個人電腦執行,無須登入server,以下步驟皆須使用到dos command - 再windows執行列輸入"cmd" ![image](https://hackmd.io/_uploads/BkhDIZsGC.png) - cd C:\Program Files\Perforce,更改執行路徑 ![image](https://hackmd.io/_uploads/rkslv-jMC.png) - p4 set P4USER=user01,設定登入的user為該名。 - p4 set P4HOST=Gcp012_Allen_Chen,設定該名的電腦名稱。 ![image](https://hackmd.io/_uploads/S1qkObsMR.png) - p4 login,執行登入,並輸入密碼(強迫更改的新密碼或得到該名的密碼) ![image](https://hackmd.io/_uploads/rJlKY-oMC.png) - 成功登入 ![image](https://hackmd.io/_uploads/HJzqK-sz0.png) ### 🎉 revert已checkout檔案 - 選擇哪個workspace的進行專案全部revert,p4 -c user01_AOT_mainline revert -a ![image](https://hackmd.io/_uploads/ryTsR-jzC.png) - 如何知道對方的workspace名稱? - 登入p4v介面 - 此時登入的環境就是該名成員 - 切換workspace,選擇more workspaces ![image](https://hackmd.io/_uploads/H1z2eziG0.png) - 照理說這裡會有一堆workspace,複製該執行的workspace名稱即可 ![image](https://hackmd.io/_uploads/ByB-bMoG0.png) - 如果該名在職同事表示無法進行revert,有正在做的進度存在,那就只好幫他執行shlef的暫存功能了 - 記得!執行完,切回自己的環境,要不然你會惹上麻煩 - p4 logout ![image](https://hackmd.io/_uploads/r1-KwEif0.png) - p4 set P4USER=XXXX - p4 set P4HOST=XXXX - p4 login