2012-05-17 4 views
1

git에서는 무시하는 것을 다루는 많은 질문이 있지만 특정 상황에서는 아무 것도 작동하지 않는 것 같습니다. I는 다음과 같습니다 프로젝트가 :Git ignore 및 버전 화되지 않은 로컬 파일

proj 
|-foo/ 
|--project-file.txt 
|-bar/ 
|--project-file2.txt 
|-temp/ 
|--machine-specific-file.txt 
|--machine-specific-file2.txt 

(편집 : 명확성을 위해 추가) 내 .gitignore 파일 :

temp/ 

내 프로젝트는 다른 시스템 관련 파일이 모두 몇 가지를 가지고 그들 안에. 내 문제는 이것입니다 : 컴퓨터 관련 파일 (여기서는 유용하기 때문에 체크인 할 이유가 없습니다)을 추적하지 않기 때문에 분기를 전환하고 프로젝트를 열 때마다 컴퓨터 관련 파일 덮어 쓴다. 문제는 소프트웨어를 생성하는 데 약 10 분이 걸리기 때문에 문제입니다. 하루에 5 번이나 6 번에 지점을 전환 할 때 짜증이납니다. 서버에 파일을 저장하지 않고 각 브랜치의 시스템 별 파일을 어떻게 든 추적 할 수있는 방법이 있습니까?

  • 이 기계 특정 파일을 저장, 내가에서 일해야하는 각 지점에 대한 새 로컬 브랜치를 만들고, 나는 내 작품을 병합해야하는 경우, 병합 :

    것들 나는 시도했다 처음에는 원래 브랜치 (단순한, 빨리 감기이기 때문에)를 사용한 다음 다른 모든 것들과 병합하려고합니다. 문제 : 그것은 작동하지만 지저분하고, 때로는 .gitignore의 차이로 인해 첫 번째 병합을 수행하는 데 시간이 걸립니다. 어쩌면 이것이 올바른 방법일까요? 더 나은 해결책이있는 것처럼 보입니다.

  • 하위 모듈 만들기 - 내가 원하는 방식으로 작동하지 못하기 때문에이 프로세스를 이해할 수 없다고 생각합니다. 파일의 이름이 똑같은 이름이어야하기 때문에 각 폴더에서 내가 원하는 리포지토리가 어디에 있는지 정확하게 지정하지 못했다고 생각합니다.

어떤 조언이 있다면 알려주세요! 감사.

답변

2

완전히 무시 된 컴퓨터 특정 디렉토리의 파일을 가리키는 심볼릭 링크를 확인하는 것은 어떻습니까? 각 지사는 서로 다른 대상을 가리키는 동일한 이름의 심볼릭 링크를 사용합니다. 각 기계는 기계 관련 디렉토리에 필요한 내용을 채우는 일을 담당합니다.

 
branch a: 
temp/machine-specific-1 => ../local-files/machine-specific-1-branch-a 

branch b: 
temp/machine-specific-1 => ../local-files/machine-specific-1-branch-b 

선택적으로 로컬 파일을 직접 참조하지 템플릿 파일과 디렉토리에 확인하고있는 부트 스트랩 스크립트를 추가하는 신선한 체크 아웃에 템플릿 디렉토리에있는 파일을 통해 수동으로 복사합니다.

+0

나는이 두 가지 제안을 좋아한다. 나는 그들을 시험해 보도록하자. 그리고 나는 그들이 어떻게 일했는지에 대해 다시보고 할 것이다. 감사! – gailbear

+0

추가 생각 : 심 링크 솔루션은 내 프로젝트에 참여한 모든 사람이 컴퓨터를 이해하고 작동하도록 만들었거나 컴퓨터를 설치할 수있는 권한이 있다면 완벽하게 작동합니다. Git을 설치하려면 사람이 "git"명령을 이해하지 못하기 때문에 손으로 쓴 2 페이지의 매우 특정한 문서가 필요합니다. * 한숨 * 대부분은 가지를 바꾸지 않으므로 나의 문제는 나에게 독특하다. 체크 아웃시 다른 로컬 git repo에서 해당 체크 아웃을 가져 오는 부트 스트랩 스크립트를 작성해 보겠습니다. – gailbear

+0

심포니 링크를 부트 스트랩 스크립트와 함께 로컬로 사용하는 것으로 끝났습니다. 합리적으로 우아한, 그리고 훨씬 적은 양의 일! – gailbear

0

.gitignoretemp/을 추가하십시오.

이렇게하면이 디렉토리의 모든 파일을 무시합니다. 다른 컴퓨터로 복제 할 때 (당신이 git add . 또는 git commit을 수행 할 때 나 저장), 아무것도는 submodulethis link을 수행하려면


을이 디렉토리에 넣어되지 않습니다. 서브 모듈을 수행하는 트릭은 모든 '원한'파일을 별도의 자식 저장소로 이동해야한다는 것입니다. 이것은 현재의 자식 repo에 하위 디렉토리가 있지만 불가능하지 않은 경우에 까다로울 수 있습니다 (현재 트리를 임시 노드로 복제하고 git filter-branch --subdirectory-filter, 공용 repo에 푸시). 이렇게하면 ' 역사를 잃지 마라!). 별도의 리모콘을 설정하면 git add submodule <path to repo> <localpath>을 수행 할 수 있으며 모든 것이 세계에서 잘 될 것입니다.

+0

'컴퓨터에서만 사용할 수있는 파일을 추적하고 있지는 않습니다. 왜냐하면 여기서는 유용하기 때문에 검사 ​​할 이유가 없습니다.'라는 말은 사용자가 전혀 추적하지 않을 것을 의미합니다. – g19fanatic

+0

예, 이것은 사실입니다. 저는 이미 그렇게하고 있습니다. 그러나 브랜치를 변경하면이 파일들이 덮어 쓰여지기 때문에 브랜치를 전환 할 때마다 어떻게해야 할지를 파악할 수 있습니다. – gailbear

+0

브랜치를 변경할 때 덮어 쓰게된다면 저장소에 실제로 있음을 알 수 있습니다. 먼저 repo'git rm temp/* '에서 제거하고 적절한 필터가'.gitignore'에 있는지 확인하십시오. 다른 브랜치에서이 작업을 수행하면 겹쳐 쓰여지는 것에 대해 걱정할 필요가 없습니다. 단지이 디렉토리를 무시할 것입니다 ... 로컬에서는 추적하지만 전역 적으로는 서브 모듈을 수행하는 것입니다. – g19fanatic

관련 문제