Git

ansible 角色:為什麼我必須在 etckeeper 中設置 user.email?

  • June 22, 2017

我寫了一個 ansible 角色來自動安裝etckeeper.

我發現如果我沒有配置 user.email,git 會抱怨。在某些情況下,git 送出會失敗。這包括在安裝包時自動送出到 etckeeper,可能導致安裝失敗。所以我必須為此添加一個任務,就像其他人一樣:)

令人沮喪的是,在某些情況下,它似乎工作正常。而且手動使用etckeeper似乎也沒有問題。 教程user.email中從未提及。

是否真的需要設置user.emailAnsible 角色?如果是這樣……一定有一些故意的原因導致了這種情況。一些解釋,我可以在角色中添加評論,或者證明給 etckeeper 或 git 打更新檔是合理的?

更新:應該在下一個版本(1.18.8)中修復。

https://etckeeper.branchable.com/todo/requires___96__user.email__96___be_set_under_undocumented_circumstances/


打了幾次之後,我覺得我需要查看原始碼。

  1. git 的送出絕對需要一個“電子郵件地址”。如果沒有,它將拒絕送出。
  2. 如果系統主機名可以解析為完全合格的域名,git 將“自動檢測”一封電子郵件。(你必須至少有一個.資格:)。或者,如果/etc/mailname存在,它會優先使用它,而不檢查.s。
  3. etckeeper 嘗試將電子郵件地址傳遞給 git,該地址由使用者名和系統主機名構成。git 將接受此類明確指定的電子郵件,即使主機部分不是 FQDN。如果sudo使用,etckeeper 使用環境中的 SUDO_USER。萬一su被使用,環境中什麼都沒有,所以 etckeeper 從tty的所有者那裡讀取使用者。

所以失敗了git commitetckeeper vcs commit當我沒有設置user.email時,我的主機名沒有解析為 FQDN。

etckeeper commit在某些情況下git commit不起作用。我相信當我之前(除其他外)進行測試時,我對這兩者感到困惑。

如果你etckeeper從執行sudo,它不會失敗。如果從 執行它su,它不會失敗。如果您以 root 身份登錄並執行它,它也不會失敗;它會找到一個 root 擁有的 tty,並傳遞一個root@HOSTNAME.

etckeeper commit當且僅當

  1. user.email未設置在git, AND
  2. 系統主機名無​​法解析為 FQDN,並且
  3. /etc/mailname 不存在(它是由 Debian exim 軟體包創建的?)並且
  4. etckeeper 不是從 sudo AND 執行
  5. etckeeper 不是從 tty 執行的

最後,測試表明在 ansible 下執行的命令永遠不會從 tty 執行。(即使使用ssh連接和sudo密碼,ansible 也被描述為需要使用偽 tty)。

引用自:https://unix.stackexchange.com/questions/368850