783 字
4 分鐘
我把 Linus 大神(Linux之父)加到我的小(廢)專案裡面來了

為了慶祝我的 25 歲生日,我請出了 Linus 當 co-author,一起製作專案並推到了 github

[github co-author linus pic]

好啦並沒有,林先生日理萬機,怎麼可能會跑來我這個小廢專案胡搞瞎搞呢? 我是用 git 跟 github 的機制,「模擬」出了 Linus 在我專案的假象。

其實類似的操作我在 3 年前的這個 repo 也這樣搞過,當時也是我生日,沒事總喜歡搞些不一樣的東西。當時我是直接改掉 author,變成 Linus 在我的 repo 推了一個 commit。

[gh author-linus pic]

關於那篇的介紹,我在我部落格好像找不太到了,不過手法跟這篇差不了多少,就加減看看吧😁

更改 commit 協作者#

翻開 github 的 doc, 如果想在 commit 裡面添加 co-author,要在 commit message 裡面加上指定的格式:

$ git commit -m "Refactor usability tests.
>
> Co-authored-by: NAME <NAME@EXAMPLE.COM>
> Co-authored-by: ANOTHER-NAME <ANOTHER-NAME@EXAMPLE.COM>"

我們可以把底下的 coauthor name 改成 Linus。

至於 email,就算我們不知道 Linus 在用的 email 是哪一個也沒問題,我們可以使用 github 為每一個人預留的信箱位置 ACCOUNT_ID+USERNAME@users.noreply.github.com

account id 我們可以利用 github api 獲取:

[gh api torvalds]

可以發現其 account id 是 1024025,挺好看的數字。

NOTE

順便提一下,如果要拿 bot 的 user id (不是 app id),可以用 https://api.github.com/users/{BOT名稱}[bot]

e.g. https://api.github.com/users/jcxyis-github-bot[bot]

拿到這些資訊就能使用別人的身分來進行 commit 了。

另外也可以發現,如果使用這組 email 來 commit 的話,前面的 name 填什麼其實沒有關係,只有在 email 無效或沒有在 github 上註冊時才會顯示這組名字。

然後,使用這種方法 commit,Linus 就會永遠變成這專案的 contributor,就算把紀錄洗掉也一樣。

alt text

更改 commit 時間#

關於 git 修改 commit 時間,git commit 確實有一個參數 --date 可以修改日期,不過我試了一下,這樣改會被 github 強制設成 push 的時間。

$ git commit --date "2001-03-02T12:00:00" -m "Hello from the past"

推測是 github 看的並不是 author 的時間,而是 committer。關於這兩者之間的關係,黑大有一篇文章就在講這件事。

這裡我們就使用另外一種方法, export 改環境變數去同時更改 author 與 commitor 時間,這樣就不會被 github 改回來:

export GIT_AUTHOR_DATE="2001-03-02T12:00:00"
export GIT_COMMITTER_DATE="2001-03-02T12:00:00"
git commit -m "Hello from the past"
unset GIT_AUTHOR_DATE
unset GIT_COMMITTER_DATE

需要注意的是 git 內部使用 unix timestamp 來儲存時間資訊,所以沒辦法輸入 1970-01-01 以前的日期。

寫在後面#

雖然我們利用 github id 去模擬了 commit author,但實際點進「受害」開發者的 commit history,我們不會看到他的版面上有我們的專案。

這樣也好,不然 Linus 大神平常都在修一些了不起的工具,突然冒出我這東西,可能會引起整個開發者社群撻伐😅

既然知道這個方法了,乖寶寶們還是不要去亂搞喔~~~

林姓商人我很抱歉我沒有買 Linux 授權

我把 Linus 大神(Linux之父)加到我的小(廢)專案裡面來了
https://blog.jcxyis.com/posts/25bdsorrylinus2/
作者
JCxYIS
發佈於
2026-03-04
許可協議
CC BY-NC-SA 4.0