Git:每天更改代码行数

时间:2017-12-30 13:16:54

标签: git

我想测量每天更改/添加/删除的代码行数,以便进行更长时间运行的项目。

该项目已经在git上,但我此刻只是不定期地做出承诺。我是否正确理解git主要支持#changed-lines,作为提交之间的区别?在这种情况下,我需要一个每天commit -am的脚本,以防我忘记提交的内容。

据我所知,提交最初被认为是基于变更的,而不是基于时间的。但是,我在这个项目中独自一人,这将导致以下提交结构:

01.01. 05:06 manual commit "foo bar done"
01.01. 23:59 automatic commit -am
01.02. 03:06 manual commit "asdf  done"
01.02. 05:07 manual commit "asdf  done"
01.02. 12:15 manual commit "asdf  done"
01.02. 23:59 automatic commit -am

我愿意承担这些提交所增加的额外噪音,如果它允许我更准确地衡量每天更改的行数。但是,如果这些自动提交在我当前的工作环境之外,那么它会更好,这样他们就不会对我的常规提交感到困惑。

是否有办法为同一个文件夹提供两个git存储库?或者我可以将我的自动提交提交给一个不会与其他部分混淆的独立分支吗?

显然,我需要更加明确:我知道如何计算提交之间的界限,我正在寻找一种方法来创建每日提交,以帮助我计算行数 - 在某种程度上这并不会影响我的常规设置和提交

3 个答案:

答案 0 :(得分:1)

我发现最干净的解决方案是在同一目录中有几个git存储库:标准git功能的默认存储库,以及用于跟踪目的的另一个存储库。当存储库已存在时,以下命令序列会添加一个新的存储库以进行跟踪。

git mv .git .git_backup
git init .
mv .git .gittracking
mv .git_backup .git

然后,标准git命令在旧存储库上运行。出于跟踪目的,请使用--git-dir=.gittracking。以下脚本已准备好由cron job运行,添加所有新的python文件subdir代码,将这些代码与所有其他更改一起提交:

#!/bin/bash
# track to git
git --git-dir=.gittracking add code/\*.py
git --git-dir=.gittracking commit -am "hourly track"
git --git-dir=.gittracking push

答案 1 :(得分:1)

我同意Roland Smith您不应该使用自动提交来污染您的提交历史记录,尤其是使用git commit -a进行的提交时不应该这样做。

那就是说,你可以做到以下几点:

  • 在同一个存储库中维护两个独立的分支。

    第一个分支是您的正常master,您只能明确地手动提交。

    第二个分支是您的自动每日更改分支,您无需手动触摸。

    这两个分支彼此没有链接。没有合并,只记录了两次历史。

  • 每日自动提交的脚本执行以下操作:

    1. 在指向HEAD的{​​{1}}上断言。运行此脚本时,您不希望您的仓库处于意外状态。

    2. 使用master保存当前状态,以便以后可以完美恢复。

    3. 然后检出由stash创建的提交(这会使你的repo处于分离头状态)。这会将索引和工作目录的状态恢复到存储之前的状态。

    4. 它执行git stash以附加到保留当前索引状态的自动提交分支。

    5. 执行git reset --soft automatic-branch。请注意,您不需要git commit -m "$(date <whatever-date-format-options-you-prefer>)",所有内容都已由git addgit checkout的组合暂存。

    6. 它使用git reset --soft切换回master,并使用git branch master恢复索引和工作目录。由于在第一步中声称git stash pop位于HEAD,因此master保证在没有冲突的情况下成功。

当然,这一切都让人觉得有些苛刻,我不愿意为此做出任何保证,以免在特殊情况下丢失数据。但它肯定比将自动git stash pop提交混合到您的正常历史中更好。

答案 2 :(得分:0)

要计算更改的行数,请解析git log --shortstat的输出。

一个例子:

commit 0710693045fb10832d218354966edd979515c794 (tag: refs/tags/3.3.3)
Author: Roland Smith <rsmith@xs4all.nl>
Date:   Sun Aug 20 16:24:11 2017

    Update documentation. Refactor build.py.

 4 files changed, 25 insertions(+), 36 deletions(-)

commit ab73ef004ab55ba76b6a3a305edab3f723454387 (tag: refs/tags/3.3.2)
Author: Roland Smith <rsmith@xs4all.nl>
Date:   Tue Aug 15 15:35:27 2017

    Disable automatic version generation.

 3 files changed, 19 insertions(+), 19 deletions(-)

commit 7ea8788b6e280d05fc93ad370e74a002c7f6f691 (tag: refs/tags/3.3.1)
Author: Roland Smith <rsmith@xs4all.nl>
Date:   Thu Jul 13 00:32:16 2017

    Shorten often used operator in types.

 1 file changed, 50 insertions(+), 50 deletions(-)

执行git log --shortstat并捕获输出。使用您喜欢的编程语言过滤掉以Date开头的行以及包含insertiondeletion的行。从那里解析这些行并收集您想要的信息非常简单

提交时,只应将工作视为已完成。因此,使用自动提交生成更好的行数是一个坏主意。它会毁掉你的历史。 自动化不能代替正确的提交规则。

修改:如果您愿意,还可以使用git diff来检查和计算未提交的更改。