다른 컴퓨터에 갖고 싶은 설정 파일(.gitconfig, .gitignore, .emacs 등)이 많기 때문에 홈 디렉터리(~)를 소스 제어(이 경우 git)에 두고 싶습니다. Git에 넣으면 쉽게 검색할 수 있습니다.
내 호스트 컴퓨터는 MacBook이고 OS X 설정 방식으로 인해 무시하고 싶은 폴더(문서, 다운로드, .ssh)가 많이 있습니다. 이미 Git(.emacs.d)을 사용하고 있는 폴더도 있습니다.
내 생각은 이 모든 디렉터리를 내 .gitignore 파일에 추가하는 것이었지만 이는 약간 짜증나는 것 같고 예상치 못한 결과를 초래할 수 있습니다. 다음 아이디어는 저장하고 싶은 파일을 홈 디렉터리의 일부 폴더에 주기적으로 복사한 다음 해당 폴더를 커밋하는 것이었습니다. 이것의 문제는 커밋하기 전에 그것들을 옮겨야 한다는 것을 기억해야 한다는 것입니다.
이를 수행하는 깨끗한 방법이 있습니까?
답변1
git 아래에 있어요 $HOME
. 내 .gitignore 파일의 첫 번째 줄은 다음과 같습니다.
/*
나머지는 수식어를 사용할 때 무시할 수 없는 패턴입니다 !
. 첫 번째 줄은 내 홈 디렉터리의 모든 파일이 기본적으로 무시된다는 의미입니다. 버전 제어하려는 파일은 .gitignore
다음과 같습니다.
!/.gitignore
!/.profile
[...]
내 더 까다로운 패턴 중 하나는 다음과 같습니다.
!/.ssh
/.ssh/*
!/.ssh/config
즉, 나는 단지 버전 제어를 원합니다 .ssh/config
. .ssh의 키와 기타 파일이 git에 들어가는 것을 원하지 않습니다. 이것이 제가 이것을 달성한 방법입니다.
편집: 모든 경로의 시작 부분에 슬래시를 추가했습니다. 이렇게 하면 어느 곳이 아닌 저장소 상단($HOME)에서 무시 패턴 일치가 이루어집니다. 예를 들어 !lib/
패턴이 있고(lib 디렉터리의 모든 항목을 무시하지 않음) 파일을 추가하면 .gitignore
이전 패턴( !.gitignore
)이 해당 패턴과 일치합니다. 앞에 슬래시( !/.gitignore
)를 사용하면 .gitignore
내 홈 디렉터리에서만 일치하며 하위 디렉터리에서는 일치하지 않습니다.
이것이 내 무시 목록에 실제로 영향을 미치는 경우를 본 적이 없지만 기술적으로는 더 정확한 것 같습니다.
답변2
내가 한 일은(같은 목표로) 내 구성 파일을 하위 디렉터리에 넣고 ~/lib
내 홈 디렉터리에 심볼릭 링크를 포함시키는 것이었습니다 .emacs -> lib/emacs/dot.emacs
. 예를 들어, 내 홈 디렉터리에는 버전 제어 하에 명시적으로 작성한 구성 파일만 보관됩니다. 버전이 제어되지 않는 도트 파일을 생성했습니다. 따라서 ~/lib
버전 제어가 적용되는 반면 내 홈 디렉토리는 그렇지 않습니다.
. 아래 파일에서 심볼릭 링크를 생성하는 스크립트가 있습니다 ~/lib
. 새 컴퓨터에서 계정을 만들 때 ~/lib
스크립트를 체크아웃하고 실행하여 계정을 채웁니다.
내 경험은 git이 아닌 CVS를 사용했기 때문에 100% 이식성이 없습니다. 내 홈 디렉토리를 CVS 바로 아래에 두지 않는 이유 중 하나는 이것이 ~/.cvsignore
내 홈 디렉토리뿐만 아니라 모든 CVS 체크아웃에 적용된다는 것입니다. 버전 제어 하에 홈 디렉토리를 두는 것과 비교할 때 이 접근 방식의 단점은 이를 사용하여 git status
명시적으로 무시하기로 결정한 파일(파일 무시에 나열되므로 표시되지 않음)과 그 파일을 구별하는 데 사용할 수 없다는 것입니다. 주석 파일을 제어할 수 없습니다( 로 표시됨 ?
).
일부 파일에는 시스템마다 다른 요구 사항이 필요합니다. 나는 그것들을 이라는 디렉토리에 넣고 심볼릭 링크를 생성합니다 . ~/Local/SITENAME/lib
또는 (지원하는 파일 형식의 경우) ~/lib
. ~/Here -> ~/Local/SITENAME
CVS와 달리 git은 대부분 유사하지만 동일하지는 않은 리포지토리를 지원하도록 설계되었으므로 시스템별 파일을 관리하는 더 나은 방법이 있을 수 있습니다. 내 도트 파일 중 일부는 실제로 심볼릭 링크가 아니지만 ~/lib
아래 및 아래의 콘텐츠에서 자동으로 생성됩니다 ~/Here
.
답변3
Git의 기능을 사용 하면 파일이 나열된 후에도 계속 추적할 수 있습니다 .gitignore
..gitignore
$ cat .gitignore
/*
추적하려는 각 파일에 대해 다음을 실행합니다 add -f
( -f
매개변수는 in .gitignore
및 out 무시 무시 .git/info/exclude
).
git add -f .gitignore
git add -f .profile
git add -f .zshrc
git add -f .ssh/config
파일이 색인화되면 Git은 파일이 무시되더라도 모든 변경 사항을 추적합니다. 디렉터리에도 동일하게 적용되지만 실제로 존재하는 파일에만 적용됩니다.
git add -f somedirname
전체 디렉토리를 추적하려는 경우모든 새 파일그 안에 나타나는 것은 .gitignore
어떤 식으로든 제외될 수 있습니다.캠의 대답:
!/somedirname
파일 추적을 중지하려면 이 명령을 사용하면 Git 인덱스에서는 파일이 제거되지만 하드 드라이브에서는 변경되지 않은 상태로 유지됩니다.
git rm --cached .ssh/config
답변4
나는 오래된 rcs
것을 사용하고 있습니다.
, ci
및 에 대한 맨페이지를 봅니다 . 다음 웹사이트도 도움이 될 것입니다:co
rcs
- http://www.jodypaul.com/SWE/RCSTutorial/RCSTutorial.html
- http://docstore.mik.ua/orelly/perl/sysadmin/appa_01.htm
- http://tldp.org/HOWTO/RCS.html
예를 들어, 나는 이것을 사용하여 내 도트 파일의 버전을 제어합니다.
ci -u .*vimrc
편집하고 싶은 경우:
co -l .*vimrc
어딘가에 쉽게 백업할 수 있도록 RCS
자신의 이름을 딴 디렉터리를 만드는 것이 좋습니다 .~