分類: Git

[Git瘦身] 使用cherry-pick挑出並保留只有master的節點

Git版本控制

當一個專案運行了幾年後Git逐漸開始肥大,因為它記錄了每個分支的每個commit歷史。但對於已經併進master上線運行好幾年的code來說,有沒有辦法只保留master的hotfix commit及merge記錄就好,將其他支幹的commit都拿掉,幫Git瘦身呢?

(這是我主管某天突然丟出的疑問)

於是在我回去研究了一下後,發現可以將這個問題拆成兩個步驟解決。

  • 列出所有master的commit (一般節點及合併的節點)
  • 用cherry-pick的方式挑出剛剛列出的commit

為了模擬這樣的情境,我們開一個新的repository,並隨意commit一下,製造一些偽開發記錄,如下圖。反白的部份是我們希望最後cherry-pick出來保留的節點。

 

[Git] commit至未來或過去的特定時間

Git版本控制

偶然間在逛別人的repo時發現了對方的contribution竟然這麼酷炫

這絕對不可能是每天勤奮地commit出來的

肯定是可以用程式算好一次性的commit、push

查了一下語法,原來設定GIT_AUTHOR_DATEGIT_COMMITTER_DATE可以調整commit的時間

GIT_AUTHOR_DATE='Wed Dec 30 10:00 2020 +0800' \
GIT_COMMITTER_DATE='Wed Dec 30 10:00 2020 +0800' \
git commit -m "my commit"

這樣就可以commit到特定的時間點去啦

Git修改local端、server端的branch名稱

Git版本控制

之前為了測試新功能而建立新的branch

原本想說只是測試看看,所以就暫時隨便取一個名字

到最後發現名字跟branch的內容有點文不對題

於是去查了一下git怎麼改local端跟server端的branch名稱

 

改local端的branch名稱

git branch -m {欲改名的branch} {branch新名稱}

這樣只有改好local端的名稱

還要把新名稱的branch push到server,並且把舊名稱的branch刪除

git push origin {新名稱的branch} :{改名後欲刪除的branch}

 

改server端的branch名稱

如果欲改名的branch並不存在local端,只存在server端

在server端複製一份欲改名的branch,並且重新取好新名字

git branch {branch新名稱} origin/{欲改名的branch}

把剛剛的操作push至server

git push origin {新名稱的branch}

把舊branch從server端上刪除

git push origin :{改名後欲刪除的branch}

下載Github上特定Repository內的資料夾

GitSVN版本控制

最近在研究mifare讀卡機,剛好看到GitHub上別人寫好的sample code想借來用用

但是人家的repository已經是一個很龐大的專案,自己想要的code也只放在其中一個資料夾下

不想要下載幾GB的repository,只為了那幾KB的code怎辦


 

經過一番搜尋,找到了解決之道,其實可以利用svn借力使力只checkout回自己想要的資料夾

在Ubuntu上架SVN+Apache與權限設定(mod_authz_svn)

Git版本控制

這學期教了svn怎麼使用,其中,老師出了作業要我們架兩個repository:

  • 一個設為公開,所有人都有access的權限,但只能read。
  • 一個設為非公開,必須先登入才能access這個repository,此外,不同帳號登入有不同的權限。

我在權限的地方被折騰了很久,所以一定要筆記一下以免老了忘記Orz…