Azure DevOps 版本控制:強制取出尚未簽入的鎖定檔案

今天查閱過去的程式碼的時候發生一件事情,就是TFS(Azure DevOps、Visual Studio Team Foundation)中有一個檔案被已離職的同事簽出(取出)在他自己電腦的本機工作區而且檔案被鎖定(Lock),這時候的困境甚至是這台所謂的本機工作區電腦搞不好都已經FORMAT了,那麼要怎麼能夠把檔案的權限拿回來呢?

這部分網路的資訊真的很少,不然解決方案就是寫的曖昧不明,記得很久以前有遇過同樣的問題,那時候是使用一套有UI介面的Team Foundation Sidekicks來解決,但這套軟體在VS2015後就沒有再更新了,這意味著VS2017後再也沒有UI介面下的解決方案。唉~他本機的那一份檔案就拋棄吧,那已經是無法再奢望的事情了,把眼前的問題解決比較重要。

將TFS中已經被取出鎖定的檔案權限拿回來

這個動作在英文的環境中其實叫做「UNDO」,若要找資訊的話可以用這個關鍵字去尋找會比較快,且要做到這個動作你的身分必須是這個TFS版控的「管理者身分」等級才可以,話不多說開始教學:

Step 1. 先找出自己電腦中的TF.EXE藏在哪裡,找到後去防火牆把這個軟體的網路存取權限開起來讓他透通(因為經過繁複的測試後發現,這個CLI好像對HTTPS存取上有點問題)。以我來說他的路徑藏在這裡:

C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\TF.exe

或者是(請自己看目錄舉一反三,不同年份不同版本不同授權,都可能會放在雷同的目錄下)

C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\TF.exe

Step 2. 接著你可以用最高管理權限打開TF.EXE,或者你要懶一點可以去開始>程式集>Developer Command Prompt for VS 2017,在這個命令視窗下可以直接使用TF.EXE,他已經幫你把APP Path設定好了。

Step 3. 打開VisualStudio,試圖去刪除那個被取出鎖定的檔案,你會發現VS試圖吐出下列類似的錯誤訊息給你:

Unable to perform operation on $/YourAppPath/YourProgramFiles.cs. The item $/YourAppPath/YourProgramFiles.cs is locked in workspace Jonny-PC;Jonny.

上面訊息說明兩個很重要的資訊:

  1. 程式碼在TFS中代表的路徑$/YourAppPath/YourProgramFiles.cs
  2. 使用者的工作區電腦名稱以及使用者名稱Jonny-PC;Jonny

Step 4. 在Step 2的視窗中鍵入下列指令並按下送出:(注意!路徑電腦名稱使用者名稱都要正確喔!)

tf.exe undo "$/YourAppPath/YourProgramFiles.cs" /workspace:"Jonny-PC;Jonny" /server:"https://yourTfsName.visualstudio.com"

Step 5. 正常的情況下,他會另外開一個瀏覽器的視窗讓您登入,如果你的TFS帳號有開啟2FA驗證那可能需要經過額外的APP驗證,總之一切沒問題後,TF.EXE可能會吐類似下列的字眼,代表已經將檔案解鎖(恢復到上一個動作)成功了。

已順利完成作業。因為工作區 Jonny-PC;Jonny 不在這部電腦上,您必須在工作區中另外執行取得作業,利用在伺服器上所做的變更進行更新。

Step 6. 因為檔案現在已經回到TFS的開放領取狀態,所以誰先對其動作誰就是檔案擁有者,如果這個檔案你不再需要,建議可以直接在VisualStudio中把它砍了,接著你再針對這個檔案進行簽入動作,你會發現檔案可以順利被刪除且不會有錯誤訊息了。

Microsoft TFS TeamFoundationServer AzureDevOps FileDelete FileLock FileUnlock FileCanNotDelete FileCanNotRemove