您可以简单地添加和提交(和推送)script/mergeScript
(当然,连同.gitattributes
文件一起)
只要:
mergeScript
不知何故在$PATH
执行合并驱动程序的用户中。
mergeScript
是可执行的,chmod +x
mergeScript
没有扩展名,以便您稍后在需要时更改其内容(从 bash shell 到 Perl 脚本再到 C 可执行文件到 ...)。
(谢谢你,MestreLion,最后两点,正如他在评论中提到的那样)
你在本地就是这种情况,因为我怀疑 ' .
' 在你的 ' 中$PATH
,但你不能假设每个人都是这样。
但是,本地配置文件 ( .git/config
) 不会被推送/克隆(正如Alexandr Priymak在评论中指出的那样),因此用户仍然需要复制自定义合并驱动程序的声明。
这是一项基本的安全措施,以便您不会推送潜在的“有害”脚本,该脚本将在下一次合并时自动执行。
另一种方法使用Makefile
另一种选择是保留所有 git 驱动程序和.gitattributes
版本历史记录,还包括可以轻松激活所有驱动程序的内容。例如,使用Makefile
的一个项目具有特殊目标make gitdrivers
,该目标激活了 repo 中的所有 git 驱动程序。
这是必需的,因为git
将自定义驱动程序视为潜在的安全漏洞,您需要做一些事情来授予对任何新驱动程序的信任。合并驱动程序和其他钩子是在您的用户凭据上运行的可执行代码,它们会作为 git 操作的副作用自动启动,因此显然在运行该代码之前必须格外小心。
运行更改.git/config
以激活驱动程序的代码是授予信任的 git 样式。
实际上,您可以使用Makefile
它(但您可以使用适合您项目的任何构建系统或脚本)。对于 Ubuntu Linux 主机,您可以简单地执行以下操作(以三个驱动程序为例):
在文件中.gitattributes
:
[attr]POFILE merge=merge-po-files
[attr]IMAGE diff=image
[attr]BINARY diff=binary -merge -text
locale/*.po POFILE
data/*.img BINARY
*.png IMAGE
和 in Makefile
(缩进应该只使用 U+0009 TAB 字符,但 stackoverflow.com 不支持它):
developer-dependencies:
sudo apt install required-package1 required-package2
submodules:
@echo "Overwriting submodules with committed versions..."
git submodule sync
git submodule update --init
gitdrivers: developer-dependencies submodules
@echo "Overwriting git drivers with current version..."
git config merge.merge-po-files.driver "./bin/merge-po-files %A %O %B"
# show rough thumbnails in text mode for images
git config diff.image.textconv "./bin/image-textconv"
git config diff.image.binary "true"
git config diff.image.cachetextconv "true"
# show some extra information about binary files
git config diff.binary.textconv "./bin/binary-textconv"
git config diff.binary.binary "true"
@echo "All git drivers done."
where 文件merge-po-files
,image-textconv
并且binary-textconv
是项目子目录中合适的可执行文件bin
。如果您有一个需要在多个平台上工作的项目,您可能需要额外的依赖来为当前平台构建/链接正确的二进制文件。
示例配置告诉git
在差异中呈现图像的 ASCII 表示,将 gettext .PO 文件与特殊的合并驱动程序合并,并防止合并选定的二进制文件,即使git
启发式将这些文件声明为文本。相反,需要为标记为 的文件选择一个版本或另一个版本BINARY
。BINARY
并显示差异中文件的特殊用户可见摘要。
这样,所有开发人员只需要在make gitdrivers
完成初始克隆后运行一次。当他们稍后合并或重新调整他们的工作副本时,他们会自动获取他们已经安装的驱动程序的更新。如果他们不确定自己是否有最新的驱动程序,他们可以随时重新运行相同的命令。请注意,上面的示例将重置您拥有的所有子模块,这些子模块可能是您真正想要的,也可能不是您真正想要的。
TL;DR: 不包含在存储库中,但您可以包含一个使用命令.git/config
重新创建合适配置的脚本。git config
对于类 UNIX 系统,shell 脚本非常棒。如果您的项目需要构建代码,您可以在需要时安装所需的驱动程序来构建过程。另请注意,使用git config ...
命令而不是尝试直接修改配置文件要安全得多,因为即使将来该配置文件的文件格式发生更改,这些命令也会继续工作。