大家好,我們會本教學中向您介紹如何使用 Git 管理 TwinCAT 項目:TwinCAT 項目已集成到 Visual studio 中,因此您可以使用基本的軟件源代碼控制工具。當然,也有一些工具可以管理多個 PLC 製造商項目,如 Version Dog,但您應該嘗試不同的工具,看看哪一個最適合您。
Before Git..
請問你是如何在程序中進行聯合工作或編輯呢?
最常見的方法可能是原樣複製文件,然後添加名稱、日期等。但這種方法複製起來很費勁,而且很容易出錯。
此外,當文件上傳到服務器時,如果沒有明確的命名規則(如下圖所示),就很難分辨哪個是最新的,哪個是不同的。此外,當兩個人同時編輯同一個文件時,往往會出現先編輯的人在不知情的情況下覆蓋了文件的改動。
這就是 Git 的用武之地。
What is Git?
我會將解釋留給維基。
https://ja.wikipedia.org/wiki/Git
Git 是一個分佈式版本控制系統,用於記錄和跟踪程序源代碼等的更改。它由 Linus Torvalds 開發,用於 Linux 內核源代碼管理,後來被許多其他項目採用。其重點在於速度,以便能夠應對像內核這樣的大型項目。
點擊以下連結來參考更多資料;
https://backlog.com/ja/git-tutorial/
Git 是一種分佈式版本控制系統,本質上是一種高效管理 Linux Sorce 代碼和文件的工具。通過 Git,你可以將文件保存為歷史記錄,隨時保存,回到之前的狀態,並將文件的不同部分與歷史記錄進行比較。
它還能解決最惱人的文件覆蓋問題:如果其他團隊成員覆蓋了最新的文件,服務器會發出警告。這就解決了被寫入的問題。
KeyWord
首先,我會介紹 Git 的幾個常用術語。
Repository
Repository不僅可以記錄文件和目錄的狀態,還可以記錄其內容的更改歷史。你可以把要管理的文件夾放在Repository中,並記錄對該文件夾中內容所做的更改。
Repository有兩種類型:遠程和本地。遠程版本庫位於服務器上(如 Github),可以與多人共享,LOCAL版Repository則設置於你自己的電腦上。
Commit
每次當你更改或添加文件或文件夾時,都會在版本庫中記錄下來,這就是所謂的Commit。 Commit時,Repository中會創建一個修訂版本,它代表上次Commit和當前狀態之間的差異。
Stage
Stage表示在索引中登記特定的更改,這意味著與該 Commit 無關的更改將被忽略。
Push
這是從Local 上傳版本庫到服務器的操作。
pull
這是將服務器上的資源庫下載到Local的操作。
Branches
Branches是更新日誌流程的分支記錄,分支不受其他分支的影響,允許同時對多個版本庫進行更改。在軟件開發領域,多個工程師同時添加功能的情況很常見。
Revert
Revert 是一種取消當前Commit的操作。
CherryPick
cherry-pick會將其他分支的commit剪切到你所在的分支。
Merge
Merge是將對分支所做的修改整合到主分支的操作。
.gitignore
這是您不希望從文件夾中的 Git 管理的黑名單。
Git Install
讓我們從 Git 安裝開始。
Practice with Visual studio
因為在 TwinCAT 中突然開始使用GIT可能很難,所以我們會從 Visual studio 中練習一個簡單的項目。
Setup
打開工具>選項。
打開Source Control>Current source control plug-in到 Git。
請設定Source Control>Git Global Settings>UserName 等等的基本信息。
Git 現在可以在 Visual Studio 中使用。
New Repository
接下來,創建一個新的存儲庫。
打開File>New>Repository.
這一次只有Local ,因此使用 Local Only>Local path來設置 Repository Path。
New Project
接下來,創建一個Repository來進行歷史管理的項目。
打開File>New>Project.
由於這只是練習,請選擇Console Application>Console Application和Next。
請確保在先前創建的Repository中創建新的Project。
建立你的個人PROJECT.
於是,一個簡單的Console程序自動生成了。
Activate Useful WorkSpace
讓我們先激活幾種常用的選項。
打開View>Git Changes.這個選項是用於Commit,Merge等等。
打開View>Git Repository會列出當前的歷史記錄、分支等。
Your First Commit!
現在,讓我們開始第一次的Commit。
切換到 “Git Changes”。
系統會列出所做更改的位置。
要進行 “Commit”,您總是需要一條 “Message”來信息要說明你做了哪些改變。
請在谷歌上搜索 “Git Commit 格式”尋找更多情報。
點擊 + 按鈕。
然後,所有當前更改都將轉入 “Staged changes”。
要Commit的變更項也已暫存,因此下一步就是提交信息。
在這裡輸入一個簡單的 信息Init,然後點擊 “Commit Staged “按鈕Commit到Repository。
就是這樣。恭喜你!你已經完成了一個COMMIT。
View the History
假若你要查看已提交的內容,請打開Git> View Branch History。
當然,您也可以右鍵單擊>Git>View History。
您可以查看到目前為止所做更改的列表。
Commit Some Changes
讓我們在 Hello world 程序中添加更多代碼。
然後再一次Git>Commit or stash.
右鍵單擊有改動的地方>單擊Compare with Unmodified。
然後,它就會清楚地顯示出發生了哪些變化。
按下Stage All來Commit你的修改.
Commit成功了!
如果查看歷史記錄,就會看到剛剛添加的附加歷史記錄。
Compare with Previous Version
現在讓我們來比較修改履歴,這是GIT的另一項重要功能。
右鍵單擊歷史記錄 > Compare with Previous。
這將清楚地表明是否存在與之前更改歷史不同的地方。
Revert
下一步操作是放棄最後一次Commit。首先添加一些程序,然後Commit。
添加更多行並Commit。
在歷史記錄中,現在有兩個更改歷史記錄。
若果我們要返回”Line2、Line3 is added”的修改紀錄,請右鍵單擊更新日誌然後點下Revert。
您想恢復到該 Commit 嗎?
按下Yes.
SYSTEM會警告你程序中存有Conflicts。
讓我們右鍵單擊Unmerge Changes>Compare Current and Incoming,看看是否有任何不同。
如果沒有問題,點點擊Take Incoming(Soure)。
然後系統丟掉最後一個 Commit,會回你想復原的版本。
Cherry Pick
下一步是進行 Cherry Pick。在之前的操作中你已經還原了項目,現在右鍵單擊最後的歷史記錄,然後單擊 >Cherry-Pick 。
Git 獲取並修改了項目中的差異。
Branches
Git>Mange Branchesをします。現在我們會創建分支,請打開Git>Mange Branches。
您可以列出當前版本庫中的分支。
當然,現在只有MASTER版本,我們會創建一個新的BRANCHES。
Add Local Branches
右鍵單擊 Master>New Local Branch From。
Brance 的名稱是 TeamA。由於目前 Based On只有MASTER,所以只能按默許設定創建。
我們創建了一個 TeamA 分部。
Commit from Local Branches
我們現在會更改 TeamA 的Branch。
我會增加一些程序。
然後Commit。
現在,歷史記錄反映了 TeamA 所做的更改。
當然,它是在 TeamA 的分部中更改的,因此 TeamA 會反映了該更改。
但master Branch中TeamA 所COMMIT的更改並沒有反映出來。
Merge
我們還需要一個合併步驟,將 TeamA 中的更改反映到 Master 中。
右鍵單擊 TeamA 中的 Branch>Merge “TeamA” into “maste|。
你需要Merge嗎?Yes.
然後,TeamA 的更改和 Master 的更改被合併。在更新日誌中,TeamA 和 Master 也在同一BRANCH。
在MASTER的BRANCH中,TeamA 的變化也以同樣的方式得到了正確反映。
Create Branches from other Branches
接下來,我要在 TeamA 的分支中再添加一個分支。
右鍵單擊 TeamA,然後單擊 >New Local Branch From。
在Based on的項目中設置為TeamA。
按下Create。
TeamAClass1 已創建。
下一步是在該分支的基礎上進一步修改代碼。
然後我們會Commit這個Branch.
TeamA 和 Branch 沒有合併,因此當然無法反映更改。
Master Branch 也是一樣.
Merge
系統在CHECKOUT了TeamA 的狀態下選 TeamA 後,右鍵單擊 > Merge TeamAClass1 Into TeamA。
Yes.
現在,TeamAClass1 的更改已合併到 TeamA 中。
TeamA 分支現在反映了 TeamAClass1 的更改。
但是,Master 和 TeamA 没有整合,所以 Master 仍然處於舊板本。
同樣,我們也將TeamA 也合併入 Master。
Yes.
當我查看BRANCH歷史記錄,您在所有三個Branch都處於同一個 Commit 中。
Master的Branch也反映到剛來的修改。
Play with TwinCAT!
練習到此為止。現在我們就用 TwinCAT和GIT來管理你的專案吧。
File Structure in TwinCAT Project
這就是每個 TwinCAT 項目文件的功能列表。
Setup in Visual Studio
要將 GIT 與 TwinCAT 結合使用,我們需要更改設置。
請打開Tools>Options。
請確保 Source Control>Plug in Selection我們已經選擇了 Git。
接下來,我們會打開 TwinCAT>XAE Environmrnt>File Settings。
該設置決定 TwinCAT 中的軸和程序是否應保存為個別檔案。
若果我們需要使用GIT,請確定該設定已被設定為True。
當然,你也可以使用右鍵單擊單個對象>Independent Project File。
當你設置新項目和Repository後,Axis、POU 等都有一個藍色圖標和一個軟盤圖標。
接下來,點擊 PLC 項目中的Instance。
在OBJECT中點下Keep Unrestored Link Info的Checkbox。
Setup in TCCompre
我們之前進行了 Visual Studio 的代碼比較。因為TwinCAT ST 代碼是 XML 格式的,因此對它們進行正接比較共沒有太大意義。反而您可以將 Visual Studio 和 TwinCAT 項目連接起來進行比較。首先,右擊任務欄中的 TwinCAT 圖標>工具>TwinCAT 項目比較。
打開Tools>Configure User Tools。
點擊Export Configuration。
在Plugin中選擇GIT。
如果TWINCAT找到你的配置文件,則會顯示”Config is found!”信息。
New Repository
現在我們可以為 TwinCAT 創建一個存儲庫。
你應該會找工作列上找到Git選項。
打開Git>Create Git Repository。
設置你的工作路徑。
Commit!
现在,让我们开始Commit程序。
被修改的OBJECT會標註一個紅色小標記。
右擊Git>Commit or Stash。
這方面的操作我不會再作詳述,因為在以前的章節我們都練習過了。
當我們進行Commit後,查看其歷史記錄。
OK!
Fatal Error
當我們第一次Commit時,總是出現 Fatel 錯誤,但從未成功過。
What Happen?
請右鍵單擊 Repository>Git Bash Here來調查原因.
git status
我發現 .project.*.project.~u 中的文件一直在更新。
該文件是 TwinCAT 項目備份文件,我們需要在COMMIT時忽略對該文件的更改。
Add .gitignore File
請在Repository文件夾中添加.gitignoreのFile 文件。
請插入以下的設定。
参考LINK:
# TwinCAT files *.tpy *.tclrs *.compiled-library *.compileinfo *.project.~u *.tsproj.bak *.xti.bak /TwinCAT Project1/TwinCAT Project1.project.~u~parent of 2dcc9fc (ok) |
打開Tools>Options。
從Source Control>Git Repository Setting>Git Files中我們可以得知TWINCAT識別了我們的BLACK-LIST文件。
單擊 “Edit “按鈕,我們也能查看到相同的描述。
If Git can not refresh..
如果 .gitignore 沒有反映,則使用以下命令清除一次 Cash。
git rm -r –cached . |
Finally
所以,我想大家現在可以放心地Commit TWINCAT程序了。
What About the TCCompre?
我們剛剛設置了 TCCompre,但實際在哪裡使用呢?
在你Commit程序後,你會看到一個 M 按鈕。
M:変更
A:追加
D:削除
R:重新命名文件
這是標準的 Git 東西,不只是 TwinCAT。
當你點擊那個M鍵後,TWINCAT會為你正確指出程序中的不同地方。
如果你們直接使用Compare with Unmodified來比較XML Format交件的話,我們會很難掌握兩個文件的不同之處.
Finally
最後,如果您有任何問題,請隨時告訴我。