리눅스에서 루트로 커밋하는 방법?


0

언젠가 /etcetckeeper가 작성한 저장소 와 같은 구성 파일을 수정해야합니다 . 그래서 나는 이것을한다 :

sudo git commit -am "Modified this setting"

불행히도 루트 자격 증명을 사용하여 커밋합니다. 하나의 더러운 대안은

sudo git commit -am "Modified this setting" --author "John Doe <jdoe@doe.com>"

다른 해결책이 있습니까?

다른 예로는 and로 /var/www설정된 파일이 있습니다 . 파일을 수정하려면 컨텍스트 에서 파일을 수정해야합니다 . 내 사용자 계정으로 어떻게 할 수 있습니까?0640root:www-dataroot

답변:


2

git이 일반 사용자로 올바르게 구성되어 있다면이 짧은 스크립트를 사용하여 원하는 것을 얻을 수 있습니다. 자동으로 생성되는 git commit것을 제외하고는 모든 인수를 허용 --author하며 자동으로 암호를 묻는 메시지를 표시하므로 다음과 sudo같이 실행할 필요가 없습니다 .

#!/bin/bash

name=`git config --get user.name`
email=`git config --get user.email`

author="${name} <${email}>"

sudo git commit --author "$author" $@

사용자의 git 구성에서 이름과 전자 메일을 가져 와서 그로부터 작성자 정보를 작성한 다음 git을 호출하여 커밋을 만듭니다. commit커밋을 생성하고 --author인수를 허용하는 다른 git 하위 명령을 대체 할 수 있습니다 .

또는 저장소를 일반 사용자 (SSH 복제를 통해 /var/www예를 들어)로 복제하고 git clone root@localhost:/var/www커밋을 일반 사용자로 만든 다음 기본 저장소로 푸시하십시오. 이를 통해 원하는대로 사본을보다 자유롭게 관리 할 수 ​​있지만 루프백 인터페이스에서 ssh를 통해 root로 로그인 할 수 있어야합니다.

그러나 etckeeper파일을 추가하거나 제거 /etc/.etckeeper해야 올바르게 업데이트 해야하는 경우으로 직접 git을 사용할 때주의 해야합니다. etckeeper commit불행히도 임의 커밋 권한을 지원하지 않는 경우 자동으로 발생 하지만 그냥 수행하면 그렇지 않습니다 git commit.


0

루트가 아닌 사용자의 구성 파일을 자동으로 포함시키기 위해 bash별명을 사용합니다 .

alias gsudo='sudo git -c "include.path='"${XDG_CONFIG_DIR:-$HOME/.config}/git/config\" -c \"include.path=$HOME/.gitconfig\""

그런 다음 둘 다 gsudo대신 사용 git합니다.

  • 루트로 실행
  • 모든 비 루트 사용자 git 구성에 액세스

구성을 실제로 가져 왔는지 확인하십시오.

gsudo config --list --show-origin --includes | less
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.