【问题标题】:Create automated git commits into a branch created only for them, in parallel to the usual manual commits与通常的手动提交并行,将自动 git 提交创建到仅为他们创建的分支中
【发布时间】:2020-05-24 05:30:58
【问题描述】:

除了我在项目中进行的常规手动 git 提交之外,我还想开始添加自动提交,例如每 30 分钟一次。

这些自动提交应与正常提交明确分开。我在考虑两种方法:

  • 将除任何与 git 相关的文件和目录之外的所有文件同步到另一个目录,并让该目录拥有自己的存储库,从而在 master 分支上创建自动提交。

  • 创建一个标记为“自动”的新分支并提交到该分支。

第一种方法很简单,但我想测试第二种方法是否不是更好的选择,但我不知道该怎么做。

我怎样才能一步一步地提交到那个“自动”分支,然后确保如果我创建一个手动提交,它的行为就像一个正常的提交一样,就好像那个“自动”分支不存在一样。

甚至应该使手动提交不仅包含上次自动提交之间的差异,还包含自上次手动提交以来的全部更改。

自动提交应该只包含自上次提交以来的更改,无论是手动提交还是自动提交(但如果忽略最后一次手动提交也可以)。

只有在自上次提交后发生更改时才应创建自动提交,无论是手动提交还是自动提交。

还是第二种方法不好,以至于我什至不应该考虑它?我可能会使用 Python 和 dulwich 来实现这种自动化。

【问题讨论】:

  • 这个自动化过程会在手动提交中添加什么样的额外更改?

标签: git automation


【解决方案1】:

您可以使用边带索引并直接构建提交,(手指到文本框警告......)

#!/bin/sh
base=`git rev-parse 2>&- timed-commits || git rev-parse @`
GIT_INDEX_FILE=`git rev-parse --git-dir`/timed-index || { echo couldn\'t get git dir; exit; }
export GIT_INDEX_FILE
while sleep $((30*60)); do
        git add .
        git update-ref -m 'automatic timed commit' refs/heads/timed-commits $(
                git commit-tree -p $base -m 'timed commit' `git write-tree`
        )
done & 

git add . 将添加在您运行它的任何工作树中未被忽略的所有内容。要仅添加已跟踪的内容,请切换到 git add -a

【讨论】:

    【解决方案2】:

    这里有两种合理的方法:一种是在工作树中签出您的 automated 分支,另一种是使用未签出的分支。

    对于前者,您可以创建工作树,复制文件(使用rsync 或类似方法),然后定期提交。 Git 仅存储更改的完整快照,因此您所做的任何提交(随时随地)都将包含更改的完整快照。

    或者,您可以使用 libgit2(或可能是 Dulwich)之类的库将提交添加到 automated 分支,而无需检查它。您将创建一个临时索引并添加当前位于现有索引中的文件(或将索引克隆到内存副本),然后在 automated 分支上创建一个新提交。从技术上讲,您也可以使用命令行 Git 执行此操作,方法是将索引文件复制到其他位置,将 GIT_INDEX_FILE 设置为指向新的索引文件,使用 git commit-tree 编写提交,然后使用 git update-ref 更新automated分支。

    通过不签出automated 分支(或使用单独的工作树),您将提交到您在手动提交时始终拥有的同一个分支(签出的那个)。

    这两者都需要大量的脚本。我个人的建议是调查未签出的分支方法,看看在你的场景中是否可行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 2013-09-21
      • 2010-11-21
      • 2018-02-01
      • 1970-01-01
      相关资源
      最近更新 更多