2017年6月21日 星期三

[軟體] 默默無聞的版本控制系統 PREFORCE

PERFORCE 大概是我使用過最不人性化的版本控制軟體了!
重點是,超過 20 人以上使用要付費!!!
GUI 界面不好用,指令也不如 SVN 或 Git 那麼直覺(真心推薦小烏龜啊!)

PERFORCE 最難搞的地方在於,
從 Server sync 到本地端的檔案全部都唯讀,
要修改檔案前必須要先「p4 edit」改成可讀可寫,
修改完之後再「p4 submit」。

但是對 debug 的人或是專案開發的人來說,這無疑是一件很困擾的事:
因為我今天更改的檔案不見得是我未來要 submit 的檔案。
不過既然公司用這套系統,還是大概簡單介紹一下指令用法

Client workspace

p4 client
編輯 client 資訊
p4 sync
Synchronize the client
相當於 svn up。
最大的差別是: 刪除在 client 端的檔案後下 svn up, 檔案仍會 update 回來。p4 sync 只有在檔案不是 opened 的時候才會 update

options:  -f (強制所有檔案 sync again)

發生 conflict 時可以使用 p4 resolve

Files

p4 add
p4 delete
相當於 svn add, svn delete
把新檔案加到 server 或是從 server 端移除檔案

* 但是!!!! 不管在哪裡新增的檔案權限幾乎都是可讀可寫,p4 add 只能加入唯讀的檔案
p4 diff
Compare a client workspace file to a revision in the depot.

用法:
p4 diff file#567    Compare with revision #567
p4 diff @234       Compare with change list @234
p4 diff -sr | p4 -x - revert
(opened 但沒有被更動的檔案全部 revert)
p4 diff2
diff 只能用來比現在 workspace 的檔案。若要比兩個 revision 或是 change list 間的差異就要用 diff2

用法:
p4 diff2 //depot/rel1/... //depot/rel2/...#4
(rel1資料夾下的檔案與revision #4的rel2資料夾相比)
p4 diff2 file@34 file@1998/12/04
(change list 34 的 file 與 1998/12/04 的 change list 比)
p4 edit
把想要編輯的檔案權限變更為可讀可寫(opened),然後就可以開始更改這些檔案了!

注意: 用 p4 edit 過後若沒有更改檔案,對 PERFOCE 來說這些檔案依舊是 opened。如果沒有要 submit 沒更改的檔案的話要注意。
p4 move
rename 的意思
p4 revert
Discard changes made to open files.
  -a open 但沒有變更才 revert
  -c 只 revert 某個 change list 裡面的檔案
  -n 列出會被 revert 的檔案(但是還沒執行)
  -w 如果使用p4 add,這個指令可以還原 add

Changelists

p4 change
p4 changelist
1. 用 p4 add, p4 delete, p4 edit 過後的檔案會出現在 changelist
2. 檔案會出現在 default 的 changelist 裡面,可以新增多個 changelist
3. p4 change 過一次之後下次再打 p4 change 就找不到這個 changelist 了!所以一定要記得 change list number
4. 可以用 reopen 把改動的檔案從這個 changelist 搬到另一個,但是沒辦法把這個改動的檔案從 changelist 中移除 =..= (只能用 revert 還原)

-d 刪除 changelist,但是 changelist 有 opened file 的話不給刪
-o #changlist 把 changelist 內容印出來(但無法改)
p4 describe
Provides information about changelists and the changelists' files.
p4 opened
List files that are open in pending changelists.
要看自己更動過了哪些檔案用這個比較省事!
p4 submit
最終 Submit!!!
1. p4 edit → p4 submit
2. p4 edit → p4 change 修改 changlist 的描述 → p4 submit -c (change list #)