如果文件更新,代理 git 提交消息到嵌套 repo
Proxy a git commit message to nested repo if files are updated
我正在寻找 git 中的功能或现有库,以允许执行下面描述的一些非常不正统的行为。
假设您有一个已 git 初始化的当前工作目录。
/project
/.git
添加了一个 subprojects
文件夹,其中包含文件夹 alpha
和 beta
,每个文件夹都有自己的初始化状态。两个文件 alpha.txt
和 beta.txt
添加到根目录。每个都硬链接到各自的子项目文件夹。
这是使用的命令:
project$ touch alpha.txt
project$ touch beta.txt
project$ mkdir ./subprojects/alpha
project$ cd ./subprojects/alpha
subprojects/alpha$ git init
subprojects/alpha$ cd ../../
project$ mkdir ./subprojects/beta
project$ cd ./subprojects/beta
subprojects/beta$ git init
subprojects/beta$ cd ../../
project$ ln alpha.txt ./subprojects/alpha/alpha.txt
project$ ln beta.txt ./subprojects/beta/beta.txt
这是当前工作目录的树:
/project
/.git
/subprojects
/alpha
/.git
/alpha.txt
/beta
/.git
/beta.txt
/alpha.txt
/beta.txt
使用这些命令在根目录上进行提交:
project$ git add -A
project$ git commit -m "init root"
根 alpha.txt
的内容已更改 git status
是 运行 你看这个。
modified: alpha.txt
modified: subprojects/alpha/alpha.txt
你可以看到,因为两个文件是链接的,所以当一个文件被更改时,两个文件都会被修改,这很好。
这就是我想要的功能发挥作用的地方。我希望这样,当进行根提交以及修改子项目的内容时,子项目会在其本地 git 实例中使用该提交。
所以如果我在初始化后修改 alpha.txt
,我 运行 如下:
project$ git add -A
project$ git commit -m "edited alpha"
现在当我 运行 根目录中的以下 git log
。
project$ git log --pretty=oneline
50144ab7da5466327038357bbc4f5adec85ed1d2 edited alpha
6f3f77763653f37e089fc0fe4c3ae6846f807855 init root
目前尚未提交子包alpha
和beta
。因此,当 git log
为 运行 时,它的响应如下:
project/subproject/alpha$ git log --pretty=oneline
fatal: bad default revision 'HEAD'
我在时间线中此时的行为是 alphas
日志显示为:
project/subproject/alpha$ git log --pretty=oneline
50144ab7da5466327038357bbc4f5adec85ed1d2 edited alpha
6f3f77763653f37e089fc0fe4c3ae6846f807855 init root
并且 beta
阅读了这篇文章:
project/subproject/beta$ git log --pretty=oneline
6f3f77763653f37e089fc0fe4c3ae6846f807855 init root
这背后的逻辑是因为在父 project
存储库提交时 subproject
中的文件被编辑了,并且因为我们正在使用链接我们可以将其归因于与父级相同的 commit
消息。
关于如何做到这一点有什么想法吗?看清楚了吗?
gitslave
神奇地做到了这一点。 https://github.com/joelpurra/gitslave
brew tap joelpurra/joelpurra && brew install --devel joelpurra/joelpurra/gitslave
我正在寻找 git 中的功能或现有库,以允许执行下面描述的一些非常不正统的行为。
假设您有一个已 git 初始化的当前工作目录。
/project
/.git
添加了一个 subprojects
文件夹,其中包含文件夹 alpha
和 beta
,每个文件夹都有自己的初始化状态。两个文件 alpha.txt
和 beta.txt
添加到根目录。每个都硬链接到各自的子项目文件夹。
这是使用的命令:
project$ touch alpha.txt
project$ touch beta.txt
project$ mkdir ./subprojects/alpha
project$ cd ./subprojects/alpha
subprojects/alpha$ git init
subprojects/alpha$ cd ../../
project$ mkdir ./subprojects/beta
project$ cd ./subprojects/beta
subprojects/beta$ git init
subprojects/beta$ cd ../../
project$ ln alpha.txt ./subprojects/alpha/alpha.txt
project$ ln beta.txt ./subprojects/beta/beta.txt
这是当前工作目录的树:
/project
/.git
/subprojects
/alpha
/.git
/alpha.txt
/beta
/.git
/beta.txt
/alpha.txt
/beta.txt
使用这些命令在根目录上进行提交:
project$ git add -A
project$ git commit -m "init root"
根 alpha.txt
的内容已更改 git status
是 运行 你看这个。
modified: alpha.txt
modified: subprojects/alpha/alpha.txt
你可以看到,因为两个文件是链接的,所以当一个文件被更改时,两个文件都会被修改,这很好。
这就是我想要的功能发挥作用的地方。我希望这样,当进行根提交以及修改子项目的内容时,子项目会在其本地 git 实例中使用该提交。
所以如果我在初始化后修改 alpha.txt
,我 运行 如下:
project$ git add -A
project$ git commit -m "edited alpha"
现在当我 运行 根目录中的以下 git log
。
project$ git log --pretty=oneline
50144ab7da5466327038357bbc4f5adec85ed1d2 edited alpha
6f3f77763653f37e089fc0fe4c3ae6846f807855 init root
目前尚未提交子包alpha
和beta
。因此,当 git log
为 运行 时,它的响应如下:
project/subproject/alpha$ git log --pretty=oneline
fatal: bad default revision 'HEAD'
我在时间线中此时的行为是 alphas
日志显示为:
project/subproject/alpha$ git log --pretty=oneline
50144ab7da5466327038357bbc4f5adec85ed1d2 edited alpha
6f3f77763653f37e089fc0fe4c3ae6846f807855 init root
并且 beta
阅读了这篇文章:
project/subproject/beta$ git log --pretty=oneline
6f3f77763653f37e089fc0fe4c3ae6846f807855 init root
这背后的逻辑是因为在父 project
存储库提交时 subproject
中的文件被编辑了,并且因为我们正在使用链接我们可以将其归因于与父级相同的 commit
消息。
关于如何做到这一点有什么想法吗?看清楚了吗?
gitslave
神奇地做到了这一点。 https://github.com/joelpurra/gitslave
brew tap joelpurra/joelpurra && brew install --devel joelpurra/joelpurra/gitslave