我有一个C项目源(本例中是Linux内核)和Makefile。
我发现这很痛苦,因为我做了修改,我在分支之间切换,然后我忘记了这些目标文件与哪些提交有关。
我可以在构建过程中自动进行版本控制吗?
例如(我认为可能是一个很好的工作流程,也许这很愚蠢):
make
文件是最新的(与源代码工作空间相比)。像.o
但最重要的是,源代码git树不能被干扰。
一种常见的解决方案是将信息嵌入到人工制品中以识别它。
例如,如果您有许多控制编译器的git status
设置,请将它们放在一个字符串中。
-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?文件是由C编译器(C项目的输出文件)生成的目标文件,因此不必在git repo中对.o
文件进行版本控制。
您只需要管理git仓库中的源代码(例如C项目和Makefile)。
对于输出文件,您应该在.o
中忽略它们:
.gitignore
关于目标文件的最佳实践是git-ignore它们:
touch .gitignore
echo **/*.o >> .gitignore
git add .
git rm **/*.o --cached
git add .
git commit -m 'ignore .o files'
git push
有关分支的构建过程的最佳实践是为不同的分支分别设置长期运行的工作树:
echo *.o >> .gitignore
并且不要在这些工作树中切换分支。