Git
ansible 角色:為什麼我必須在 etckeeper 中設置 user.email?
我寫了一個 ansible 角色來自動安裝
etckeeper
.我發現如果我沒有配置 user.email,git 會抱怨。在某些情況下,git 送出會失敗。這包括在安裝包時自動送出到 etckeeper,可能導致安裝失敗。所以我必須為此添加一個任務,就像其他人一樣:)。
令人沮喪的是,在某些情況下,它似乎工作正常。而且手動使用etckeeper似乎也沒有問題。 教程
user.email
中從未提及。是否真的需要設置
user.email
Ansible 角色?如果是這樣……一定有一些故意的原因導致了這種情況。一些解釋,我可以在角色中添加評論,或者證明給 etckeeper 或 git 打更新檔是合理的?
更新:應該在下一個版本(1.18.8)中修復。
打了幾次之後,我覺得我需要查看原始碼。
- git 的送出絕對需要一個“電子郵件地址”。如果沒有,它將拒絕送出。
- 如果系統主機名可以解析為完全合格的域名,git 將“自動檢測”一封電子郵件。(你必須至少有一個
.
資格:)。或者,如果/etc/mailname
存在,它會優先使用它,而不檢查.
s。- etckeeper 嘗試將電子郵件地址傳遞給 git,該地址由使用者名和系統主機名構成。git 將接受此類明確指定的電子郵件,即使主機部分不是 FQDN。如果
sudo
使用,etckeeper 使用環境中的 SUDO_USER。萬一su
被使用,環境中什麼都沒有,所以 etckeeper 從tty的所有者那裡讀取使用者。所以失敗了
git commit
,etckeeper vcs commit
當我沒有設置user.email
時,我的主機名沒有解析為 FQDN。
etckeeper commit
在某些情況下git commit
不起作用。我相信當我之前(除其他外)進行測試時,我對這兩者感到困惑。如果你
etckeeper
從執行sudo
,它不會失敗。如果從 執行它su
,它不會失敗。如果您以 root 身份登錄並執行它,它也不會失敗;它會找到一個 root 擁有的 tty,並傳遞一個root@HOSTNAME
.
etckeeper commit
當且僅當
user.email
未設置在git
, AND- 系統主機名無法解析為 FQDN,並且
- /etc/mailname 不存在(它是由 Debian exim 軟體包創建的?)並且
- etckeeper 不是從 sudo AND 執行
- etckeeper 不是從 tty 執行的
最後,測試表明在 ansible 下執行的命令永遠不會從 tty 執行。(即使使用
ssh
連接和sudo
密碼,ansible 也被描述為需要使用偽 tty)。