Git .o文件或生成版本控制的最佳实践是什么?

Git .o文件或生成版本控制的最佳实践是什么?,git,makefile,build,version-control,Git,Makefile,Build,Version Control,在本例中,我有一个C项目源Linux内核和Makefile 我觉得这很痛苦,因为我做了修改,在两个分支之间切换,然后忘记了这些对象文件与哪个提交相关 我可以在构建过程中自动执行版本控制吗 例如,我认为这可能是一个很好的工作流程,也许它很愚蠢: 强迫我在制作前确保git工作区清洁 自动保留生成版本。将一个生成与目标文件和源文件关联 我可以签出任何版本 与源代码工作空间相比,我可以知道哪些.o文件是最新的。比如git状态 但最重要的是,源代码git树不能被干扰。由于.o文件是由C编译器生成的对象文件

在本例中,我有一个C项目源Linux内核和Makefile

我觉得这很痛苦,因为我做了修改,在两个分支之间切换,然后忘记了这些对象文件与哪个提交相关

我可以在构建过程中自动执行版本控制吗

例如,我认为这可能是一个很好的工作流程,也许它很愚蠢:

强迫我在制作前确保git工作区清洁

自动保留生成版本。将一个生成与目标文件和源文件关联

我可以签出任何版本

与源代码工作空间相比,我可以知道哪些.o文件是最新的。比如git状态

但最重要的是,源代码git树不能被干扰。

由于.o文件是由C编译器生成的对象文件,是C项目的输出文件,因此在git repo中不需要对.o文件进行版本控制

您只需要管理git repo中的源代码,例如C项目和Makefile

对于输出文件,应在.gitignore中忽略它们:

由于.o文件是C编译器生成的对象文件,是C项目的输出文件,因此在git repo中不需要对.o文件进行版本控制

您只需要管理git repo中的源代码,例如C项目和Makefile

对于输出文件,应在.gitignore中忽略它们:


一个常见的解决方案是在人工制品中嵌入信息来识别它

例如,如果有许多-D parameter=value设置控制编译器,请将它们放入字符串中

const volatile static char build[] = "parameter PARAMETER has value " PARAMETER;
然后,您可以使用代码将该字符串返回给调用者,也可以只使用字符串或更少的字符串检查二进制文件,以查看嵌入其中的信息


有关更多信息,请参见

常见的解决方案是将信息嵌入到人工制品中以识别它

例如,如果有许多-D parameter=value设置控制编译器,请将它们放入字符串中

const volatile static char build[] = "parameter PARAMETER has value " PARAMETER;
然后,您可以使用代码将该字符串返回给调用者,也可以只使用字符串或更少的字符串检查二进制文件,以查看嵌入其中的信息


有关详细信息,请参见

有关对象文件的最佳做法是git忽略它们:

echo *.o >> .gitignore
使用分支构建流程的最佳实践是为不同的分支创建单独的长期运行的工作树:

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

不要在这些工作树中切换分支。

关于对象文件的最佳实践是git忽略它们:

echo *.o >> .gitignore
使用分支构建流程的最佳实践是为不同的分支创建单独的长期运行的工作树:

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

不要在这些工作树中切换分支。

这些可以在Makefile中完成。清洁是一个非常常见的目标。您可以添加一个目标来运行git命令,以便在主目标完成后跟踪所有文件。我可能错了,但我认为当git修改您的一个源文件时,它的修改日期会更改,因此,如果Makefile编写正确,make将重新生成它。您得到了有助于解决问题的答案吗?如果是,您可以将其标记为答案。这也将有利于其他有类似问题的人。这些问题可以在你的Makefile中完成。清洁是一个非常常见的目标。您可以添加一个目标来运行git命令,以便在主目标完成后跟踪所有文件。我可能错了,但我认为当git修改您的一个源文件时,它的修改日期会更改,因此,如果Makefile编写正确,make将重新生成它。您得到了有助于解决问题的答案吗?如果是,您可以将其标记为答案。这也将有利于其他有类似问题的人。