[unix] ~ 소스 제어에 대한 팁

많은 설정 파일 (.gitconfig, .gitignore, .emacs 등)이 있기 때문에 홈 디렉토리 (~)를 소스 제어 (이 경우 git) 아래에 놓고 싶습니다. Git에 넣으면 검색하기에 좋습니다.

내 주요 컴퓨터는 내 MacBook이고 OS X가 설정되는 방식에는 무시하고 싶은 폴더가 많이 있습니다 (문서, 다운로드, .ssh). 이미 Git (.emacs.d)을 사용하고있는 폴더도 있습니다.

내 생각은이 모든 디렉토리를 내 .gitignore 파일에 추가하는 것이었지만, 다소 번거롭고 예상치 못한 결과를 초래할 수 있습니다. 내 생각은 집에있는 폴더에 저장하려는 파일을 주기적으로 복사 한 다음 해당 폴더를 커밋하는 것입니다. 문제는 커밋하기 전에 이동해야한다는 것입니다.

이것을 할 수있는 깨끗한 방법이 있습니까?



답변

나는 $HOME자식 밑에있다. 내 .gitignore 파일의 첫 번째 줄은

/*

나머지는 !수정자를 사용하여 무시하지 않는 패턴 입니다. 이 첫 번째 줄은 기본값이 내 홈 디렉토리의 모든 파일을 무시한다는 것을 의미합니다. 버전 관리를 원하는 파일은 다음 .gitignore과 같습니다.

!/.gitignore
!/.profile
[...]

내가 가진 까다로운 패턴은 다음과 같습니다.

!/.ssh
/.ssh/*
!/.ssh/config

즉, 나는 버전을 .ssh/config만들고 싶습니다. .ssh의 키와 다른 파일이 git에 들어가는 것을 원하지 않습니다. 위는 내가 그것을 달성하는 방법입니다.

편집 : 모든 경로의 시작에 슬래시를 추가했습니다. 이를 통해 무시 패턴이 리포지토리의 맨 위 ($ HOME)에서 일치하지 않습니다. 예를 들어 !lib/패턴 인 경우 (lib 디렉토리의 모든 것을 무시하지 마십시오) 파일을 추가하면 .gitignore이전에 패턴 ( !.gitignore)이 해당 패턴과 일치했습니다. 슬래시 ( !/.gitignore) .gitignore를 사용하면 하위 디렉토리가 아닌 내 홈 디렉토리 에서만 일치 합니다.

이것이 무시 목록과 실질적인 차이를 만드는 경우를 보지 못했지만 기술적으로 더 정확한 것으로 보입니다.


답변

내가 동일한 작업을 수행하는 것은 구성 파일을 하위 디렉토리에 넣고 ~/lib홈 디렉토리에 기호 링크를 갖는 것입니다 (예 🙂 .emacs -> lib/emacs/dot.emacs. 명시 적으로 작성한 구성 파일 만 버전 제어하에 유지합니다. 내 홈 디렉토리에는 버전 제어가없는 많은 자동 생성 도트 파일이 포함되어 있습니다. 따라서 ~/lib버전 제어하에 있으며 내 홈 디렉토리가 없습니다.

의 파일에서 심볼릭 링크를 만드는 스크립트가 있습니다 ~/lib. 새 컴퓨터에서 계정을 만들 때 ~/lib해당 스크립트를 체크 아웃 하고 실행 하여 계정을 채 웁니다 .

내 경험은 자식이 아닌 CVS에 관한 것이므로 100 % 양도 할 수는 없습니다. CVS에 직접 홈 디렉토리를 두지 않은 이유 중 하나는 홈 디렉토리 ~/.cvsignore뿐만 아니라 모든 CVS 체크 아웃에 적용되기 때문 입니다. 자식은이 문제가 없습니다. 버전 제어하에 홈 디렉토리를 갖는 것과 비교하여 그 접근법의 단점 git status은 명시 적으로 무시하기로 결정한 파일 (무시 파일에 나열되어 표시되지 않음)과 파일을 구별 하는 데 사용할 수 없다는 것입니다 에 대한 의견이없는 파일 (로 표시됨 ?).

일부 파일은 시스템마다 달라야합니다. 이 파일을 디렉토리에 넣고 ~/Local/SITENAME/lib심볼릭 링크를 만들거나 (지원하는 파일 형식의 경우) 아래에 파일에 include 지시문이 있습니다 ~/lib. 또한 심볼릭 링크가 ~/Here -> ~/Local/SITENAME있습니다. CVS와 달리 git은 대부분 유사하지만 동일하지 않은 리포지토리를 지원하도록 설계되었으므로 머신 별 파일을 관리하는 더 좋은 방법이있을 수 있습니다. 내 도트 파일 중 일부는 실제로 심볼릭 링크가 아니라 ~/lib및의 콘텐츠에서 자동으로 생성됩니다 ~/Here.


답변

Git의 기능을 사용하여 파일이 목록에 있더라도 계속 추적 할 수 있습니다 .gitignore. 따라서 이것은 충분합니다 .gitignore.

$ cat .gitignore
/*

추적하려는 각 파일에 대해 다음을 실행하십시오 add -f( -f매개 변수는 in .gitignore및을 무시 함 .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하려면 camh답변에 설명 된 방식으로 해당 디렉토리를 제외 할 수 있습니다 .

!/somedirname

파일 추적을 중지하려는 경우이 명령은 파일을 Git의 색인에서 제거하지만 하드 드라이브에서 그대로 유지합니다.

git rm --cached .ssh/config


답변

나는 그것을 위해 오래된 것을 사용합니다 rcs.

맨 페이지에서보세요 ci, co하고 rcs. 이 사이트들도 도움이 될 것입니다 :

예를 들어 도트 파일을 제어하는 ​​버전에 사용합니다.

ci -u .*vimrc

그리고 내가 편집하고 싶다면 :

co -l .*vimrc

나는라는 이름의 디렉토리를 만드는 것이 좋습니다 RCS당신에를 ~어딘가에 다음, 쉽게 백업 디렉토리를 할 수 있습니다.


답변

$HOME/.conf/BitBucket Mercurial 저장소에서 구성 파일을 확인했습니다 . GitHub 리포지토리도 마찬가지로 작동합니다.

~/.conf체크 아웃은 설정 파일에 심볼릭 링크를 채우는 쉘 스크립트가 포함되어 $HOME있는 각 파일을 ~/.conf. (포함을 지원하는 구성 형식의 경우 .bashrc, .inputrc, .vimrc, 등) 나는 포함 ~/.conf나는 지역 재정의를 할 수 있도록, 그것에 파일이 아닌 링크를.

일부 구성 파일의 경우 Dropbox 폴더의 파일에 심볼릭 링크하고 dropbox를 통해 공유합니다.

몇 달 동안 나는 $HOME버전 제어를 유지하려고 노력했지만 대규모 무시 목록을 관리하는 데 지 쳤고 앱을 실행하여 구성 변경 사항을 확인하는 데 지쳤으며 결과는 다른 컴퓨터에서 확인하고 싶지 않은 결과였습니다. 또는 서로 다른 버전의 데스크톱 앱에서 충돌을 해결 ~/.gconf하거나 ~/.config/monitors.xml다른 곳에서 제공하는 것을 상상할 수 있습니까 ?

개인적으로 사용자 정의하고 전역 기본값으로 여러 시스템에서 공유하려는 구성 파일 목록을 심볼릭 링크하거나 포함하는 것이 더 쉽다는 것을 알았습니다.


답변

방금 다음 Python Dotfiles 스크립트를 사용하기 시작했습니다.이 스크립트는 파일을 자동으로 연결하는 편리한 도구입니다. https://pypi.python.org/pypi/dotfiles


답변

소스 제어하에 관련없는 폴더가있는 두 번째 직감이 좋다고 생각합니다.

여기에 2 개의 쉘 스크립트를 추가하십시오. 하나는 제어하에 파일을 복사 ~하고 다른 하나 ~는 소스 제어 폴더 에서 파일을 수집 하고 다시 복사하여 커밋합니다.