2017-12-21 73 views
1

나는 C 프로젝트 소스 (이 경우 리눅스 커널)와 Makefile을 가지고있다..o 파일 또는 빌드 버전 관리를위한 가장 좋은 방법은 무엇입니까?

내가 수정을하고 나에게 분기점을 바꾼다는 것을 알게되면이 아픈 것을 알게된다. 그런 다음이 객체 파일들이 어떤 커밋인지를 잊어 버린다.

건물 프로세스에서 버전 제어를 자동으로 수행 할 수 있습니까? 예를 들어

(그냥 생각 좋은 흐름이 될 수도, 어쩌면 바보) :

  1. 포스 나 자동 빌드 버전을 유지 make

  2. 전에 자식 작업 spcace가 깨끗한 지 확인 . 하나의 빌드를 오브젝트 파일과 소스 파일에 연관시킵니다.

  3. 나는 최신 (소스 코드를 작업 공간에 비해)있는 .o 파일을 알 수있는 빌드

  4. 을 체크 아웃 할 수 있습니다. 마찬가지로 git status

그러나 무엇보다도 소스 코드 자식 트리는 간섭받을 수 없습니다.

+0

이것은 Makefile에서 수행 할 수 있습니다. '깨끗한'것은 매우 일반적인 목표입니다.주 대상이 완료된 후 모든 파일을 추적하기 위해 git 명령을 실행하는 대상을 추가 할 수 있습니다. – ElpieKay

+0

내가 틀릴 수도 있지만 git이 소스 파일 중 하나를 수정하면 수정 날짜가 변경되므로 Makefile이 올바르게 작성되면 make가 다시 빌드하게됩니다. – Tim

+0

문제를 해결하는 데 도움이되는 대답을 얻었습니까? 그렇다면 답변으로 표시 할 수 있습니다. 또한 비슷한 질문을하는 사람들에게도 도움이 될 것입니다. –

답변

1

.o 파일 C 컴파일러 (C 프로젝트로부터의 출력 파일)이 버전 제어 자식 REPO에서 .o 파일 불필요 제조 오브젝트 파일이기 때문에.

git repo에서 소스 코드를 관리하기 만하면됩니다 (예 : C 프로젝트 및 Makefile).

출력 파일의 경우 .gitignore에서 그들을 무시해야합니다

touch .gitignore 
echo **/*.o >> .gitignore 
git add . 
git rm **/*.o --cached 
git add . 
git commit -m 'ignore .o files' 
git push 
1

일반적인 솔루션을 식별 할 유물의 정보를 포함하는 것입니다.

예를 들어 컴파일러를 제어하는 ​​숫자가 -D parameter=value 인 경우이를 문자열에 넣으십시오.

const volatile static char build[] = "parameter PARAMETER has value " PARAMETER; 

귀하의 캔은 호출자에게이 문자열을 반환 코드가, 또는 당신은 단지 당신이 그것을에 포함 된 정보를 볼 수 strings 또는 less으로 바이너리를 검사 할 수 있습니다. 자세한 내용은

는, 오브젝트 파일에 대한 Does gcc have any options to add version info in ELF binary file?

1

가장 좋은 방법은하는 것입니다 볼을 자식-무시 :

echo *.o >> .gitignore 

지사와 함께 빌드 프로세스에 대한 가장 좋은 방법은 별도의 장기 실행 worktrees을하는 것입니다 다른 지점의 경우 :

git clone -b branch1 master-repo project-b1 
git clone -b branch2 master-repo project-b2 
cd project-b1 
make 
cd ../project-b2 
make 

그리고 이러한 작업 트리에서 분기를 전환하지 마십시오.