在提交

时间:2016-02-04 12:32:42

标签: git

动机:我花了相当多的时间跳过篮球,让我的git存储库保持干净小巧。这意味着避免二进制文件和图像,更喜欢下载/生成脚本而不是原始数据等。在我应用它之前,有一个工具可以帮助我弄清楚提交的实际影响,这对我非常有用。

我的问题有两个部分:大小和整合。

  1. 大小:如何在提交之前确定git提交的影响?我已经找到了大量的解决方案" size"问题并不能真正回答我的问题。

    1. Solution 1 - 最佳答案并不提供实际命令或脚本,而是专注于网络带宽。第二种解决方案无效。
    2. Solution 2 - 在接受的答案中链接的脚本只会查看新的文件。如果我改变现有文件怎么办?
    3. Solution 3 - 脚本不起作用。例如,我最近的提交是使用此脚本的0字节。这不可能是因为我修改了一个文件,因此我的git历史记录中有一些记录非零大小,说明文件的确切修改方式。
    4. 我真正想要的是一个脚本,它告诉我以下内容:如果我在添加,提交和推送之前我的存储库在git服务器上的大小是S1,那么S2在我添加,提交和推送之后,如何在添加,提交和推送之前找出值X = S2 - S1

    5. 集成:如何才能将此大小计算最佳地集成到我的标准git流程中?理想情况下,每当我运行X时,我都希望向我显示此提交大小git status。例如(参见"影响"):

      $ git status
      On branch master
      Your branch is up-to-date with 'origin/master'.
      Changes to be committed:
      Impact: 1234 bytes
      (use "git reset HEAD ..." to unstage)

      new file: new_file_1.png new file: new_file_2.sh new file: new_file_3.cpp
    6. 我可以看到如果不编辑二进制文件,这可能是不可能的 - 如果是这样的话,那么只需手动运行脚本即可。

1 个答案:

答案 0 :(得分:1)

写一个脚本。 (批处理,shell,python等)

  1. git stash

  2. 计算本地仓库的总大小(递归检查所有目录中的所有文件,使用操作系统的API获取文件大小)并将其分配给变量。 请记得跳过.git文件夹。

  3. git stash pop --index

  4. 按早期变量减去新文件大小并打印差异。

  5. git status。如果您使用编程语言,则可以将git status(在Java中,ProcessBuilder.getInputStream())的输出转换为字符串,然后使用步骤4中的数据将字符串格式化为您想要的内容。

  6. 然后你必须在推送之前运行该程序/脚本。

    修改

    要获得压缩大小,看起来更简单,更可靠的方法是只检查服务器大小git push,再次检查服务器大小,然后git reset --soft HEAD~。如果您使用的是Github,则可以使用API​​获得大小。例如。 https://api.github.com/repos/git/git,查找"size"