2017-01-25 8 views
0

git-repos (C/C++)에서 작업 할 때 정기적으로 분기를 전환하고 때로는 특정 분기 나 태그를 make (make)를 사용하여 빌드하려고합니다. 현재 주로 포커스가있는 지점으로 다시 전환하면 make를 실행하면 빌드 시간이 매우 길어집니다. git을 구성하거나 빌드 시스템 (예 : make)과 관련하여 일부 git-checkout 특정 인수를 사용하여 저장소의 상태를 복원하는 방법이 있습니까? 이 빌드 시스템 닌자가 더 좋습니까?make/ninja와 유사한 도구로 git checkout을 효율적으로 사용하기

이렇게하는 방법이 없다면 그 이유는 무엇입니까? 그것을 수행하는 방법이 있다면, 왜 기본적으로 구현되지 않는 것입니까?

답변

1

주된 질문은 빌드 도구가 그만큼 더 오래 필요하다는 것입니다. 브랜치간에 다른 파일이 다시 빌드되어야하기 때문에 빌드 도구 또는 Git이이를 방지해야합니까? git worktree을 사용하여 다른 브랜치에 대해 여러 작업 트리를 추가 할 수 있습니다 (문제가있는 경우).

+0

들어 본 적이없는 작업 트리를 확인합니다. 의심 할 여지없이 그들은 git stash에 더 가깝게 보일 때 언뜻보기에는 해결책입니다. 나는 나의 질문이 아마도 더 기초적이라고 생각한다. 나는 아직도 이것에 대해 아주 새로운 것이다. –

+0

그것은 은신처와 공통점이있다. 단순히 다른 지점에 대해 여러 작업 트리를 가질 수 있습니다. (worktree는 실제 체크 아웃 된 작업 파일입니다.) 따라서 브랜치를 변경하려면 다른 파일 시스템 위치로 가십시오. 빌드 된 파일이 여전히 최신 상태 여야합니다. – Vampire

+0

은 더 나쁜 정보를 제공하기 전에 체크 아웃합니다. 그러면 ... 예를 들어 "그 소리가 복제와 비슷하다"고 말한 것 같습니다 :) –

0

"빌드 시스템에 관한 한 저장소의 상태"가 무슨 뜻인지 잘 모르겠습니다. 당신이 말하는 것은 당신이 다른 브랜치로 변경 한 다음 다시 스위치를 만들지 않는다고 가정하는 것입니다. 그러나 이렇게하면 소스 파일의 타임 스탬프가 변경되어 모든 것을 다시 빌드해야한다고 생각합니다.

가장 간단한 해결책은 IMO 일 것입니다. 두 가지 작업 트리를 사용합니다. 하나는 "일반적으로 포커스가있는 분기"이고 다른 하나는 다른 분기를 탐색하는 것입니다. 이는 repo를 두 번 복제하거나 git worktree 명령을 사용하여 수행 할 수 있습니다.

git이 브랜치를 전환하기 전에 소스 타임 스탬프를 설정하는 방법을 모르겠습니다. 왜 안돼? 문제를 일으키지 않고 일반적으로 유용한 방식으로 구현하는 것은 불가능할 것입니다.

+0

글쎄, 레포의 상태에 관해서는, 빌드 시스템으로 가면 ... 나는 모든 소스 파일의 타임 스탬프가 될 것이라고 생각합니다. 완성 된 바이너리와 중간 객체 파일. 내가 의도적으로 그 파일을 (편집 : 이진 파일과 개체 파일) 넣어.gitignore ... 할 수있는 무언가가있다 : 그 파일에 git tracking을 두는 것인가? 나는 당신이 짐작할 수 있듯이 git을 사용하는 것에 꽤 새로운 것이다. –

+0

@MarkAdelsberger ** 당신이 더 새로운 브랜치를 만들고 나서, 더 오래된 브랜치로 전환한다고 상상해보십시오. 시간 소인이 보존되면 모든 입력 파일이 출력 파일보다 오래되어서 시간 소인을 기반으로하는 최신 점검은 불가능합니다. 이 때문에 실제 파일을 변경하면 타임 스탬프가 ** 지금 **로 업데이트되어야합니다. 상황이 설명한 것처럼 Gradle과 같은보다 나은 빌드 도구로 전환하면 타임 스탬프에 의존하지 않고 입력 및 출력 파일의 체크섬에 대한 해결책이됩니다. – Vampire

+0

완성 된 바이너리와 중간 파일을 .gitignore에 저장하는 것이 옳습니다. 자식을 추적하면 문제가 발생할 것입니다. 시간 소인이 소스 파일과 바이너리 간의 관계를 표시하지 않기 때문에 문제를 해결할 수는 없습니다. 문제는 신선하게 체크 아웃 된 작업 트리를 새로 고쳐야한다는 것입니다. 그래서 가장 좋은 해결책은 IMO가 다른 브랜치를 찾아보기 위해 별도의 작업 트리를 갖는 것입니다. –