我希望两个分支 src 文件夹下的文件各自开发,test 文件夹下的文件在一个分支更新时另一个分支也自动更新,git 能否实现这种功能。如果 git 不能实现,有什么其他的工具能够实现么?
chatgpt 的回答感觉都不太方便。
使用子模块( Git Submodules ) 一个可能的解决方案是将 test 文件夹作为一个独立的 Git 仓库(子模块),然后在你的主仓库中以子模块的形式引入它。这样,不管是在哪个分支上对 test 子模块进行更新,只要提交了更新并推送到远程仓库,其他分支就可以通过更新子模块来获取这些更改。
创建 test 的独立仓库:首先,你需要将 test 文件夹提取出来,使其成为一个独立的 Git 仓库。 在主仓库中添加子模块:然后,在你的主仓库中,使用 git submodule add <repository-url> <path>命令添加这个 test 仓库作为子模块。 更新子模块:当 test 仓库更新后,你需要在主仓库中手动更新子模块引用,通常是通过 git submodule update --remote 命令。 使用 Git Hooks 另一个方案是使用 Git 钩子( hooks ),特别是 pre-commit 钩子,在每次提交前自动检查 test 文件夹的更改,并将这些更改复制到另一个分支。这种方法需要编写自定义脚本,并且可能会复杂且难以管理。
使用外部同步工具 如果这些 Git 内置的解决方案不满足需求,你可以考虑使用外部的文件同步工具,比如 rsync (适用于 Unix-like 系统),或者开发一个自定义的脚本,用来监控 test 文件夹的更改,并自动将这些更改同步到其他分支或仓库。这可能涉及到复杂的逻辑,特别是在处理并发更改和冲突解决时。
考虑工作流调整 最后,值得考虑的是,如果你经常需要在分支之间同步特定文件夹的更改,可能需要重新考虑你的开发工作流。可能的调整包括重新组织项目结构,使得需要同步的文件夹更容易管理,或者调整团队的分支策略,以减少需要这种类型同步的场景。
总的来说,虽然 Git 不直接支持你描述的自动同步功能,但通过一些创造性的工作流管理和外部工具的辅助,可以实现类似的效果。每种方法都有其优缺点,选择哪一种取决于你的具体需求和团队工作流。
1
huangsijun17 266 天前
要么把 test 放到第三个分支,要么用 CI/CD 工具去手动同步。
|
2
kera0a 266 天前 via iPhone
子模块应该可以吧
或者 test 文件夹从 git 中排除,让 git 不要管理,这样每个分支的代码都访问同一份 test 。 然后 test 传到你用的语言的包管理工具,有更新自动拉取,或你自己写个自动脚本。 |
3
hello2090 266 天前
clearcase 可以😁
|
4
nulIptr 266 天前
可以参考算法做微调的时候的做法吗,test 文件夹是 nas 之类的远程文件系统。所有人都操作这个玩意
|
5
jgh004 266 天前
不能
|
6
zhtyytg 266 天前
需求:两个分支 src 文件夹下的文件各自开发,test 文件夹下的文件在一个分支更新时另一个分支也自动更新。
分析:其实你只是希望 test 独立于 src 管理 src 里面的作为 submodule ,test 还是在根目录 git 上,是否可以满足? |
7
dallaslu 266 天前
submodule
|
8
52icarus 266 天前
这种需求其实是 svn 的强项. 使用 svn 外链来比较方便.如果是使用 git .其实使用 submodule 也不方便.不如直接用 mklink 来做个链接(windows). linux macos 可以直接用软链接
|
9
realJamespond 266 天前
gitignore 加上要共享的文件,然后在 githook 里 pull 时 rsync 或其它方法同步这个文件
|
10
tuutoo 266 天前 via Android
那两个仓库。一个库把 test 在 gitignore 中排除,把 test 目录用另一个仓库去管理。
|
11
ETiV 266 天前 via iPhone
如果你有 remote 的话,在 remote 做 hook 就行:a 分支目录有变更就往 b 分支的相同路径同步内容,反之 b 有变更就往 a 同步
不推荐在本地做 hook:烦在每个人都需要做一次 remote 一般只有一个,GitHub Action 啥的都可以实现 |
12
Xu3Xan89YsA7oP64 266 天前
从两个分支的公共 base 创建一个公共分支 Father 出来,从 Father 上 拉一个开发分支 Child 出来,把你需要同步的文件放到 Child 上,C 合并到 F 之后自动同步到你的两个开发分支
至于怎么自动,自己研究下吧,最次也能写脚本调 openapi 实现。 |
13
MAGA2022 245 天前
我觉得你要的是 git worktree
https://git-scm.com/docs/git-worktree |