추적 설정을 위해 / (루트)에 Git 저장소를 만드시겠습니까?


28

그래서 Git을 주로 개발 목적으로 사용하지만 우분투 설치시 가지고있는 설정 파일 버전을 저장하는 데 사용할 수 있음을 깨달았습니다.

내가 제안한 설정은 다음과 같습니다.

  • git init 레포 /

  • 추적하려는 특정 설정을 제외한 모든 파일을 무시 하는 .gitignoreat /를 추가하십시오 .

    예를 들어,는 .gitignore( source )를 포함 할 수 있습니다 .

    ## Ignore everything...
    *
    
    ## Except...
    !/etc/default/tlp
    !/etc/crontab
    
  • 저수준 설정을 변경할 때마다 추적 할 수 있습니다.

이 설정에 문제가 있습니까? 커널에 항상 /특정 폴더 만 있으면됩니까? 응용 프로그램의 기능을 망칠 수 있습니까?


아마 당신은 당신 고려해야 ~보다는 홈 디렉토리 설정 파일을 /파일
마이클 듀런트에게

1
이전 grex SunOS 공용 서버에는 모든 rc 파일이 있으며 일부 이전 소스 제어의 다른 내용을 알고 있습니다 (SCCS인지 RCS인지 확실하지 않지만 CVS보다 오래된 것임). 나는 이것에 문제가 없다.
Joshua

@ Mike Durrant : /etc/crontab내 개인 랩톱 과 같은 물건 은 분명히 내 것이지만, 무슨 말인지 알 수 있습니다.
Abhishek Divekar

7
etckeeper백업을 사용 하고 만듭니다.
Reinstate Monica-M. Schröder

그냥 않도록주의하지 않을 실수로 무대 / 커밋 예는 / dev / sda를하거나 유사한 : D
케찰코아틀

답변:


37

두 질문 모두에 대한 답변은 아니요 /입니다. 에서 원하는 디렉토리를 만들 수 있습니다 . 유일하게 일어날 수있는 것은 내가 생각할 수있는 일부 공간 경로와 관련된 일부 권한 문제입니다.

그러나 .git디렉토리를 다른 곳에 저장하는 것이 좋습니다 .

git --git-dir=/home/user/backup-root --work-tree=/

여기를 읽으 십시오 .


5
매우 흥미 롭습니다. 실제로 git에서 이것을 할 수 있다는 것을 몰랐습니다! 제안 해 주셔서 감사합니다.
Abhishek Divekar

/ home / user btw에서 설정 파일 만 추적 할 수있는 동일한 기능입니다. 쉘 별명을 추가하면 매우 편리합니다.
Daniel Jour

19

사실, 당신은 아마에서 버전 관리 설정 파일에 원하는 /etc/(루트 디렉토리의 항목에 대해 걱정하지 않는다 /특히 디렉토리처럼, proc또는 usrbin에서 /당신이 설치할 수 있도록) etckeeper패키지

또한 선택한 하위 디렉토리 /usr/share/applications/를 언급 한 것처럼 버전 제어 할 수도 있습니다 .

그러나 우분투 패키지 관리 시스템을 망설이지 마십시오 . 아마도 현재 설치된 패키지 목록을 백업해야 할 것입니다.


1
실제로 파일을 /usr/share/applications엉망으로 만드는 파일을 실제로 관리 합니다.
Abhishek Divekar

6

git repo를 가지고 있거나 잘 작동하지만 문제가있는 낮은 수준의 git repo가있을 때 알아 차리기가 어렵다는 것을 제외하고는 잘 작동합니다.

참고 : 작업이 적고 'debsum'을 사용하는 것이 더 유용 할 것입니다

sudo apt-get install debsums

바이너리 또는 구성 파일의 변경 사항을 신속하게 감지 할 수 있습니다.

설치된 패키지의 예로는 업스트림 패키지와 다른 패키지가 있습니다.

$ sudo debsums -c
/boot/vmlinuz-4.10.0-19-generic

다음을 사용하여 변경된 구성 파일 목록을 얻을 수 있습니다.

$ sudo debsums -ec
debsums: missing file /etc/default/chromium-browser (from chromium-browser package)
 /etc/libvirt/libvirt.conf
 <snip>

크롬 브라우저가 제대로 패키지되지 않고 존재하지 않는 패키지 파일 목록에 파일이 어떻게 나열되어 있는지 확인하십시오.

/var/lib/dpkg/info/chromium-browser.list

이것은 dpkg 데이터를 사용하며 큰 /.git 디렉토리 및 워크 플로우를 피합니다.


"문제가있는 하위 레벨 git repo가있을 때 알아 차리기가 어렵다는 점을 제외하고는 모든 문제에 대해 답할 수 있습니다." 조금 더? gitgitore가 몇 개의 파일 만 추적하면 문제가 발생할 수있는 방법을 이해하지 못합니다.
Abhishek Divekar

2
나는 당신이 말에 또 다른 자식의 repo를 만들 때 @abhidivekar 영업 이익은 말을 믿고 /home/$USER다음 .git에가 /있는 REPO 주어진 모든 자식 명령에 대해 응답 할 것이다 /home$USER보다는 그 [대한 .gir의 파일] /home/$USER...
조지 Udosen

아 알 겠어요 그런 다음 별도의 폴더에 보관해야한다고 생각합니다. 또는 /
Abhishek Divekar

1
@George .git트리의 상위 디렉토리에 액세스하려면, 그 디렉토리 cd또는 .git폴더 가없는 디렉토리 (보통 디렉토리)
cat

2
@abhidivekar 맞습니다. 혜택이 문제보다 큰 경우 문제가되지 않지만 예상치 못한 동작입니다. 차단제가 아니라 단지 경고입니다.
gdahlm

5

그래서 나는 다른 답변을 탐색하고 나에게 맞는 절차를 찾았습니다.

  • 확인 .gitignore/. Git이 하위 폴더에서 화이트리스트 파일을 처리하는 방식 때문에 생각보다 훨씬 복잡했습니다. 내가 사용 링크는 나를 도와.

    ## Source: https://stackoverflow.com/a/29932318/4900327
    ## Comments are on new lines because trailing whitespace matters in Git (stackoverflow.com/a/8865858/4900327)
    
    # Blacklist all files, folders and subfolders in the same directory as the .gitignore file.
    /*
    # Do not blacklist the .gitignore file.
    !.gitignore
    
    # Now whitelist certain files.
    # For files in subfolders, some hoops must be jumped through (stackoverflow.com/a/16318111/4900327):
    
    ## Whitelisting files in /etc/ folder:
    # Whitelist the /etc/ folder (the git repo folder is whitelisted always)
    !/etc/
    # Blacklist all files in /etc/ folder.
    /etc/*
    # Whitelist specific file(s) in /etc/ folder.
    !/etc/crontab
    
    
    ## Whitelisting files in /etc/default/ folder:
    # /etc/ is already whitelisted, and its contents blacklisted.
    # Whitelist /etc/default/ folder.
    !/etc/default/
    # Blacklist all files in /etc/default/ folder.
    /etc/default/*
    # Whitelist specific file(s) in /etc/default/ folder.
    !/etc/default/tlp
    
    
    ## Whitelisting files in /home/USERNAME/ folder:
    # Whitelist /home/ folder.
    !/home/
    # Blacklist all files in /home/ folder.
    /home/*
    # Whitelist /home/USERNAME/ folder.
    !/home/USERNAME/
    # Blacklist all files in /home/USERNAME/ folder.
    /home/USERNAME/*
    # Whitelist specific file(s) in /home/USERNAME/ folder
    !/home/USERNAME/.bash_profile
    !/home/USERNAME/.bashrc
    
  • 이동 /및 실행 git init .지금까지, 나는 저장할 수 없었습니다 .git/사용하여 다른 디렉토리에 폴더를 @Ravexina 언급 링크를 .

  • 실행 git add .git status. Git이 추적하고있는 모든 설정 파일 목록이 표시되어야합니다.

    If you used the above `.gitignore`, it should track `/etc/crontab`, `/etc/default/tlp`, `/home/USERNAME/.bash_profile`, and `/home/USERNAME/.bashrc`.
    
  • 로 커밋합니다 git commit -m "Initial settings files".

  • git log -p -- path/to/file또는로 변경 사항을 추적 할 수 있습니다 gitk path/to/file. 이에 대한 자세한 내용은 여기를 참조하십시오 .


2

/etc/shadowgit repo에 민감한 것들 (예 :)을 저장하려는 경우 기본적으로 객체에 권한이 444있고 디렉토리에 권한이 있기 때문에 모든 사용자가 읽을 수 없도록해야합니다 0755. 당신의 허가를 변경할 수 있습니다 .git에를 700 나에 넣어/root

또 다른 문제는 git이 파일 시스템과 같은 파일 권한을 저장하지 않으며 확장 속성을 저장하지 않는다는 것입니다. 파일의 경우 git은 파일이 실행 가능한지 여부 만 저장합니다. 따라서 삭제 된 파일을 복원하려는 경우 해당 소유자와 그룹은 루트가되고 (루트로 사용하는 경우) 권한은 644또는 755입니다. 소유자가 루트가 아닌 서비스 구성 파일에 문제가있을 수 있습니다.

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