Câu hỏi git nhận ra tôi từ dòng lệnh chứ không phải từ cron


Khi tôi làm điều này:

cd /home/erelsgl/git/erel-sites;  git commit -m "test"

Tôi nhận được một cách chính xác:

On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

Nhưng, khi tôi đặt cùng một dòng trong crontab của tài khoản của tôi, tôi thấy trong logfile:

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'erelsgl@erelsgl-computer')

Tôi đặt "whoami" trong crontab và nhận được câu trả lời giống như bên ngoài ("erelsgl").

Tôi cũng đã cố gắng đặt các lệnh "git config --global" được đề xuất bên trong crontab (tôi đã chạy chúng thành công bên ngoài crontab) nhưng điều này không giúp được gì.

Tôi nên làm gì để cam kết từ crontab?


4
2017-08-16 07:28


gốc


Bạn đang đặt các lệnh này trong bảng cron cho tài khoản của bạn, hoặc của người chủ, hoặc một số người dùng khác? Giả sử rằng nó nằm trong bảng cron của bạn, hãy thử thêm tiền tố cho lệnh export GIT_DIR=/home/erelsgl; . - DopeGhoti
@DopeGhoti Tôi nhận được một lỗi "gây tử vong: Không phải là một kho git: '/ home / erelsg‌ l". Tôi cũng đã thử "xuất GIT_DIR = / home / erelsg‌ l / git", "xuất GIT_DIR = / home / erelsg‌ l / git / erel-sites" và "xuất GIT_DIR = / home / erelsg‌ l / git / erel- sites / .git "và có lỗi tương tự. - Erel Segal-Halevi
Nó có hoạt động nếu bạn chỉ đặt chúng một cách rõ ràng không? Ý tôi là như thế này: cd /home/erelsgl/git/erel-sites; git commit -c user.email=you@email.com -c user.name=erelsgl -m "test" - terdon♦
@terdon Tôi không chắc chắn những gì nó làm, nhưng tôi nhận được một lỗi "gây tử vong: Option -m không thể được kết hợp với -c / -C / -F / - fixup.". - Erel Segal-Halevi
Làm thế nào bạn thêm này vào cron? Thông qua /etc/crontab hoặc là crontab -e? Nếu qua /etc/crontab, có thể bạn cũng cần phải đặt $HOME. - Robie Basak


Các câu trả lời:


git cần tìm user.email và user.name trong một trong các tệp cấu hình của nó hoặc trong các biến môi trường. Bạn có nhiều tùy chọn hơn để làm cho git nhận được các giá trị này. Obviusly git không sử dụng một số tệp cấu hình khi được gọi từ crontab.

Tôi sẽ khuyên bạn nên chọn từ hai tùy chọn:

1. Đặt user.email và user.name vào cấu hình của kho với các lệnh

git config user.email "you@example.com"
git config user.name "Your Name"

Bạn nên ở trong kho lưu trữ khi thực hiện việc này. Theo cách đó, tệp cấu hình kho lưu trữ .git/config sẽ có các giá trị được đặt và cam kết sẽ hoạt động từ crontab. Bạn có thể kiểm tra với

cat .git/config

2. Đặt các biến môi trường để giúp git nhận được các giá trị bị thiếu. Trong trường hợp đó, tôi sẽ chạy các lệnh như thế này

cd /home/erelsgl/git/erel-sites; GIT_COMMITTER_NAME="Your Name" GIT_COMMITTER_EMAIL="you@example.com" git commit -m "test"

Tôi nghĩ rằng các biến GIT_AUTHOR_NAME và GIT_AUTHOR_EMAIL cũng sẽ hoạt động.

Tôi đã tìm thấy thông tin này trên các trang sau:


1
2017-08-19 15:40



Cảm ơn. Đây có lẽ là giải pháp tốt nhất trong hệ thống đa người dùng. - Erel Segal-Halevi


Thay vì --global, thử --system

sudo git config --system user.email "you@example.com"
sudo git config --system user.name "Your Name"

1
2017-08-19 14:54



Nhưng câu trả lời của bạn vẫn sử dụng --global? - edwinksl
Rõ ràng tôi đã hiểu sai. Trên thực tế thay thế --global bởi --system trong đoạn mã dài. Tôi không có đặc quyền chỉnh sửa cho câu trả lời của mình. - jswetzen
Bạn có đặc quyền chỉnh sửa cho câu trả lời của riêng bạn. - edwinksl
Lúc đầu tôi không thấy liên kết, có thể vì nó vừa được đăng. Bây giờ nó đã được sửa. - jswetzen
Những công việc này! Nhưng nó phải được chạy với "sudo" - Erel Segal-Halevi