OpenProject與GIT整合

OpenProject能與GitHub、GitLab深度整合,當然也包含一般git server或local git。整合後,專案成員可看到所有檔案內容,我覺得有必要管控權限,畢竟有些人只要看到修改記錄即可,如PM。

既然我的目標只是想讓OpenProject能看到git的修改記錄,於是硬著頭皮改openproject程式,好險不難,硬生生讓我改成只能看到修改記錄。

詳請參考咖啡偶之書。

https://book.kafeiou.pw/books/openproject/page/git

列出docker images所有版本

我在試用openproject的時候,官方提供的docker指令只能看出容器大版本,很難看出細一點的數字(openproject/community:13),於是我找到一個程式,後面接容器名稱,就能列出所有的版本。

https://github.com/axil/docker-registry-list/tree/master

python3 -m pip install requests
wget https://github.com/axil/docker-registry-list/raw/master/docker-registry-list.py
chmod +x docker-registry-list.py
./docker-registry-list.py  <container image name>

Git出現很多修改過的檔案,實際上卻沒有異動

公司有個RedHat 5.x伺服器系統,安裝git 2.9 ,多年以來使用上一直相安無事;沒想到因為全面停用tls 1.0,導致git無法使用。

RedHat Linux系統在無法升級的情況下,git就再起不能;最後我指定其中一台windows主機,安裝RaiDrive透過sftp掛載Linux伺服器的git目錄,使其變成windows其中的一個磁碟,再透過windows的git用戶端,達到讓Linux伺服器裡面的資料能上git版控的目標。

就在我在windows主機上,順利掛載Linux目錄後,接著準備將資料push到git server,豈料出現一大堆檔案呈現已修改狀態,提示我這些檔案要commit,但是實際上這些檔案沒有任何異動修改;我追查了一下,發現是換行字元搞的鬼,Linux換行只有\n ,windows則為\r\n;

windows掛載Linux檔案,因為換行字元不同,當然會被誤認檔案被修改過。

解決方式,在windows掛載linux情況下,執行以下git指令,就可以解決了。

git config --global core.autocrlf true
git config core.filemode false
git status

 

gitea(吉茶)需要更新docker版本20.10.6或以上

前陣子我協助機構部門導入git LFS大檔案版本控管,當時希望push資料時,觸發webhooks,執行我寫好的程式進行分析。

我使用gitea內建測試功能,能很順利觸發webhooks,進而執行程式。

可是實作時卻觸發不了,經檢查logs與爬文後,發現docker版本必須大於等於 20.10.6 有作用,我更新到20.10.6之後測試,還是一樣沒用,只好先擺著,希望主機重開後,能有改善,但無論如何,吉茶說要更新我就照作了。

jgit clone專案失敗,原來要把帳號密碼存起來才行

自己寫 java 呼叫 jgit 函式庫clone專案,卻失敗,我看到錯誤訊息是沒有帳號密碼;可是程式明明有輸入帳號密碼,後來爬文才發現我有案子有使用LFS,需要設定快取把帳號密碼儲存起來,否則會一直要求輸入帳號密碼造成程式錯誤。

git lfs 需要2.0或是以上才行

git config --global lfs.cachecredentials

Gitea無法觸發webhook

我在Gitea上面設定達成某個條件,觸發webhook執行

但是出現以下錯誤

 ...webhook can only call allowed HTTP servers (check your webhook.ALLOWED_HOST_LIST setting)

需要允許webhook執行遠端的http程式

#修改app.ini
[root@firewall crontab]# docker exec -it gitea bash
14c18c2bd6c0:/# vi data/gitea/conf/app.ini
#加上
[webhook]
ALLOWED_HOST_LIST = 192.168.1.0/24

修改完成重開gitea就能使用了

bare是啥碗糕? git clone vs gi clone –bare

我們從github拉乾貨下來的時候,一般只有兩種方式,一種是直接下載zip檔案,另一種是克隆;這兩種方式差在克隆可以全部版都(甚至連分支branch)都有,而下載只有最新版的檔案,不含其他版本。

這裡介紹第三種方式,克隆指令加上–bare

git clone --bare <git http url>

會出現原始版本紀錄,但不會出現檔案.

 

未加–bare

我因為系統設計需要寫程式,只需抓出專案標籤名稱以及該標籤所屬的所有檔案名稱,但不需要使用實際檔案;考慮jgit函式庫還是需要克隆下來才能做事情,但我又不需要把真的檔案都拉下來,因此選擇–bare的方式拉貨,就能達到我的目標了。

Gitea(吉茶)認證綁定微軟網域主控站

根據官方文件 , 吉茶可以綁定各式各樣的登入認證, 也包含微軟網域主控認證, 但並沒有解釋太多, 因我有需求要綁定Micro$oft 網域主控站 , 因此記錄一下注意事項.


  • 重點在於搞定使用者篩選
# (memberOf=xxx) xxx 為群組名稱 CN=GitGroup,OU=groups,DC=test,DC=com
#  意思就是帳號需隸屬於GitGroup這個群組, 若不需要可以拿掉.
# (mail=*) 代表帳號email屬性必須有值才能用, 若不需要也可以拿掉

(&(objectCategory=Person)(memberOf=CN=GitGroup,OU=groups,DC=test,DC=com)(sAMAccountName=%s)(mail=*)(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))
  • 對應帳號屬性與email屬性

  • 若匯入的帳號不喜翻, 可以到資料庫刪除, 再執行作業重新匯入
MariaDB [gitea]> delete from email_address where id<>1;
Query OK, 2 rows affected (0.00 sec)

MariaDB [gitea]> delete from user where id<>1;
Query OK, 2 rows affected (0.00 sec)
1 2 3