我使用多个C++github存储库,它们都共享(作为公司标准(相同的.clang格式文件。为了能够跟踪更改,我们决定将此文件放在一个单独的存储库中。我正在寻找一种将此文件中的修改发布到所有相关存储库的方法。手动操作是不可行的,因为我有很多存储库。
- 我想把这个存储库作为git子模块,但在这个解决方案中,我无法在repo的根目录中克隆子模块
- 我想把它克隆到一个目录中,并有一个到子模块的符号链接,但我可以在Windows中有符号链接吗?repos在Windows、Linux和Mac之间共享
- 将所有repo作为clang格式存储库的子模块,并有一个脚本来更新所有子模块并自动创建拉取请求
- 与3相同,但没有子模块,克隆每个repo并复制新文件你还有其他更好的选择吗
虽然子模块仍然是最好的选择(尤其是有关联的分支,这使得更新其内容像git submodule update --remote
一样容易(,但在构建之前仍然需要预处理步骤。
我通常会编写一个build.bat
脚本(比如这个(,负责设置环境和构建项目。
该脚本还可以检查根文件夹中是否存在.clang-format
,如果不存在,则从子模块中复制它。
由于该存储库的每个用户都必须调用build.bat
来…构建项目,所以他们甚至不必知道预处理步骤。
OP sagi在评论中添加:
但构建阶段可能会有点晚,因为我希望在编码时在IDE中进行格式化。
这就是.gitattributes
文件中声明的内容筛选器驱动程序可以提供帮助的地方。
您仍然需要每个用户首先键入一个命令:
git config --global filter.clang.smudge 'script_install_clang'
您需要验证一个伪文件.clang-format.tpl
,以便将该特定文件与smudge
脚本关联起来。
但是,污迹脚本将在git clone
或git checkout
/git switch
上自动调用,并且可以为您设置任何丢失的文件。
这样,一旦启动IDE,格式化文件就准备好了。