SmartGit令人驚豔的LFS鎖定功能

我用過幾種GIT客戶端程式, 從tortoiseGit, GitEye, gitkraken,SourceTree,GitHub Desktop, 都長期用過, 但老實說我只用基本功能,因此看不出來差異在哪, 也不在意哪種用戶端程式好或不好.

直到最近,公司有個需求,要版控”機構部門的圖檔”,這原本是PLM宏大系統的功能(整合ERP,文件管制), 但…廠商報價後,就GG了.

於是我想自己找解決方案, 能滿足版控, 又要能滿足檔案鎖定功能, 也參考過網路力推,能管控圖檔的 https://www.perforce.com,

perforce 能版控,也能鎖檔案, 甚至細心列出git,svn,與自身產品的差異(當然是老王賣瓜了)
https://www.perforce.com/blog/vcs/git-vs-svn-what-difference
如果有預算, 我也建議圖檔管控應當要用perforce.

但我個人還是想要用git這個比較熟悉,簡單,無複雜系統的工具.
那問題來了,雖說git的LFS可以進行大檔案版本控管與鎖定,但客戶端工具程式還沒找到好用上手的,

直到SmartGit(20.1版以上)現世,這工具能針對檔案進行直覺的”鎖定”, 就好像用檔案總管一樣,能讓麻瓜容易上手.
雖說tortoiseGit也可以在客戶端就鎖定檔案,但整合度實在差太多了, 很不推薦.

Git檔案被william鎖定了

不囉唆,寫心得

  • 確認Git伺服器是否援Git LFS 2.0
    我使用的gitblit 1.9.3 雖然支援LFS,但不是LFS 2.0就無法鎖定檔案,
    慘阿,只好先用吉茶測試
  • 建立/克隆專案Repository,並且確認那些要進行LFS管控
#執行cmd, 到專案Repository目錄執行
git lfs install
git lfs locks --local
git lfs locks --verify
## 設定那些檔案需要進行LFS管控
git lfs track *.exe --lockable
git lfs track *.zip --lockable
...
若執行 git lfs locks –verify 出現錯誤, 有可能是Git伺服器不支援LFS鎖定功能
  • 修改專案Repository設定
#修改.git\config 以下設定若沒有就自行新增
[lfs "https://server/repo.git/info/lfs"]
    ...
    locksVerify = true
#"https://server/repo.git/info/lfs" 為 remote URL,加上/info/lfs
  • 啟用LFS檔案鎖定功能,與背景自動更新LFS最新狀態
SmartGit->Edit->Preference->Low-level Properties
設定 
status.lfs.locks=true
status.lfs.locks=true
background.fetch.delay=30
background.periodicalRefresh.delay=30
backgroundTasks.idleDelay=30
SmartGit->Edit->Preference->Backgroup Command->detect remote changes
設定
當專案Repository沒使用的時候, 或是已設定我的最愛的專案Repository 需要定期檢查LFS狀態

#若沒有設定,則不會自動更新狀態, 會無法得知其他人是否鎖定檔案

**SmartGit 一套單機版最便宜約100美金左右

結論,這樣的設定很複雜,目前還不好用,若能安裝時就一件設定,那就很好了

android Git文字筆記APP更新版本

3年前我實作一個Git文字筆記app, 使用jgit套件, 可將github clone到android手機上, 然後進行編輯, 編輯完畢,直接版控到github上面,

最近play store要求target api在2022年11月前, 至少要設定31 , 於是我就編輯了一下, 實在有夠麻煩, 一大堆套件要升級, android studio也是大改版要求舊的專案也要跟著升級.

升級升級, 想說之前jgit只使用4.5.7版本, 趁這機會,改用jgit 6.3.x版, 後來發現6.3.x 使用outputstream類別中的一個函式”transferTo”, 造成android app 找不到該method,程式跳掉.

最後我發現 android 13才支援”transferTo”

另外我開發的這支app, 當初硬改成可以接受未正式簽章的SSL網站, 現在變成資安問題,上架失敗, 原因是X509相關類別,被我繼承改成一律安全 , 只好再改成原本的檢查方式,

也就是說以後這支app要使用遠端git網站, 必須是正式簽章HTTPS, 否則是不能使用的.


為何我的app要使用jgit 6.3.x , 因為jgit終於支援shallow(depth)功能, 可以讓我clone的時候快一點, 不然有些commit數量太多, 要clone很久,很麻煩, 而app本身只想用來做文字筆記, 不用clone太多commit版本下來,不然使用者會嫌棄的.

公司有pixel手機, 趕緊升級到android 13

Github 程式存取必須使用PAT(Personal Access Token)

之前寫過 用戶端github commit需要改用token密碼 才可以使用,
(或是web browser認證),

也就是說, 使用程式例如 JGIT套件, 帳號密碼,也需要使用token密碼, (ps. 我有時候久了就會忘記,真是糟糕)

Setting->Developer setting

點選Personal access tokens -> 點選 Generate new token , 產生新的token密碼

輸入相關資料, 過期時間(可選永不過期), 與該token權限

將token密碼複製,就可以使用了

git lfs下載時出現404 object not found問題

解決方式

  1. 下載mirror git專案
    git clone –mirror <git url>
  2. 找出有問題的object OID
    cd git專案
    git lfs fetch –all
  3. 透過OID,找出有問題的LFS檔案, 並且把檔案名稱都記下來
    git log –all -p -S <OID>
  4. 下載BFG repo cleaner (java 程式)
    https://rtyley.github.io/bfg-repo-cleaner/
  5. 清理檔案
    java -jar bfg.jar –delete-files <file name> <git location : xxx.git>
  6. 重新整理
    cd xxx.git
    git reflog expire –expire=now –all && git gc –prune=now –aggressive
  7. 收工
    git push

8/13起 github 專案commit要改用token

github 公告 2021/8/13起, 強制改用token的方式, 之前使用密碼的方式不能再用

"Beginning August 13, 2021, we will no longer accept account passwords when authenticating Git operations on GitHub.com."

所以要到個人github上, 生成token, 然後當作密碼使用

https://github.com/settings/tokens

  1. 先產生 token , 將token copy 起來

2. 用戶端輸入帳號,與密碼(此時不要輸入真的密碼, 請輸入token)

git server移轉注意事項

我工作上用的git server有兩個, 一個是吉茶(gitea), 另一個是吉累(gitlab), 因為重新使用吉碧麗(gitblit), 所以將吉累狠心地關閉, 因為他功能太多, 架構龐大, 太耗資源, 願意用的原因只有一個, 就是分類的方式比吉茶好, 現在終於來了一個分類更強的server – gitblit.

我將gitlab上面的git專案, 直接複製到gitblit 目錄上, 一切正常, 但卻遇到 lfs 檔案移轉失敗的現象, 也就是gitblit上面的lfs並無法真正的指向檔案實體位置, 全部都是空的.

我嘗試很多指令想解決這問題, 如 git lfs clean , git lfs pust –all 等等要麻就是無反應timeout, 要麻就是出現檔案不存在等等奇怪現象, 皇天不負苦心人, 我終於爬文爬到有位專家 https://github.com/sprohaska 提出解法 https://github.com/git-lfs/git-lfs/issues/1113 , 最後如願從client端將大檔案正確的放到新的gitblit上, 指令如下:

git lfs ls-files -l | awk '{ print $1 }' | xargs git lfs push --object-id origin

再次擁抱-吉碧麗gitblit – git server 使用docker

原本用習慣的git server gitblit , 在2016年發表1.8.0版本之後, 原創者就不再更新, 當時也因為參與修改幾個bug,以及中文化花了不少心血, 覺得非常可惜, 撐到2018年之後, 覺得該專案不再更新, 安全性與bug都無法處理, 就毅然決然改用gitea 吉茶.

用了吉茶之後, 發現非常不能適應, 吉茶並沒有多子目錄的設計 , 方便我們建立階層式管理專案, 例如我要建立it部門, 吉碧麗除了畫面會分類成it之外, 連網址都與分類一致, https://yyy.zzz/r/it/xxx.git , 非常直覺.
吉茶則是團隊, 群組的概念, 對於專案的分類並沒有這樣的設計, 應該都儘量與github相同,程式師才會容易上手.
至於gitlab有分類,但似乎只能一層,無法達到gitblit的多子階層的功能.

以下是docker安裝吉碧麗的步驟:

  1. 官網
    https://github.com/gitblit/gitblit-docker
  2. 設定volume之後, 啟動gitblit , 指令的port隨時可改, 預設帳密都是admin , 登入後請馬上更改
    docker volume create gitblit-etc
    docker volume create gitblit-data
    docker run -d --restart always --name gitblit -v gitblit-data:/var/opt/gitblit/srv -v gitblit-etc:/var/opt/gitblit/etc -p 8443:8443 -p 8089:8080 -p 9418:9418 -p 29418:29418 gitblit/gitblit:latest
1 2 3