V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
ming2281
V2EX  ›  git

git 中如何同时为多个文件写 commit 信息

  •  
  •   ming2281 · 2015-04-01 16:49:38 +08:00 · 6272 次点击
    这是一个创建于 3549 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ####问题1:
    假设我add了一系列文件, 我希望在写commit注释的时候,分别为每个文件写commit信息.
    另外由于我经常使用Sublime,我可能希望写commit信息时弹出Sublime的窗口

    我在Google时组织的关键词为git commit message for many files, 但是没有得到理想的结果.

    ####衍生问题1: 如何设置sublime为git的默认editor

    我的关键字为 "git default editor sublime Windows7",但是得到的结果非常繁琐,在自己机器上试验也未能成功 这是一个坑吗?

    ####环境=>Windows7_64+git1.9.5+Sublime3
    第 1 条附言  ·  2015-04-01 20:56:04 +08:00
    第一个问题:
    done,
    总结:主要是对提交粒度的控制,如果粒度太小,每个文件都add和commit,会累死人的; 如果粒度过大,那么别人根本不知道某些文件是什么鬼;
    所以粒度适中最好,属于同一类的文件则同时commit,统一写commit信息; 另外文件命名做到见名知意; 不要有强迫症,要对自己写的代码和代码注释有信心,自己能看懂,别人也能看懂

    第二个问题:
    一直在尝试,本来我一直使用2,在Windows平台如果命令行调用sublime,那么很自然地就会加一个path变量,然后core.editor "subl"并且我也这么做了,但是一直以来死活都是"没有这个命令",那时我很奇怪,为什么大家敲subl就好,我就不行了?
    但是我一直没有深究,毕竟不是一个非常重要的问题.
    今天从一个回答中才知道,原来3可以直接命令行subl,2则要使用sublime_text这个命令.=>wtf
    不过切换到3就是好,实用功能很多,各种包也都支持

    Thanks
    第 2 条附言  ·  2015-04-02 13:45:13 +08:00
    某一次修一个bug/增添一个feature, 修改涉及到若干个文件, 难道大家是针对每个被修改的文件都add和commit? =>如下, 不累?
    git add A
    git ci -m"xxx"
    git add B
    git ci -m"xxx"
    ===
    我觉得把它们并成一次add和commit比较好吧? 改动可以使用diff
    git add A B C
    git ci -m"xxx"
    15 条回复    2015-04-02 15:31:30 +08:00
    batman2010
        1
    batman2010  
       2015-04-01 16:59:39 +08:00   ❤️ 1
    celadevra
        2
    celadevra  
       2015-04-01 17:04:46 +08:00   ❤️ 1
    http://stackoverflow.com/questions/5171022/git-commit-multiple-files-but-add-messages

    Cygwin 或者 MSys 的 bash 应该也可以设置 $EDITOR 变量吧,其他版本的 git 可以设置 core.editor。
    learnshare
        3
    learnshare  
       2015-04-01 17:04:48 +08:00   ❤️ 3
    commit 是一次提交动作,一个动作只能有一个注释信息,跟 commit 的文件数量无关。

    你的需求建立在一个错误的 Git 用法上:

    Git 是用来保存代码的版本管理工具,**版本管理**才是主要功能;
    你想要给不同的文件写不同的注释信息,是因为一次提交了多处改动,这是一个错误的用法;
    最好的用法是,每次只提交一处改动(改了一个 Bug,加了一个功能,重构了一个类,升级了一个 API 接口)。

    每次只提交一处改动,才能保证 Git 收录了不同版本代码间最细微的差异,才有可能追溯任何改动。
    你也可以写完整个项目,然后 commit 一下。这和 zip 打个包有何区别呢?
    dofine
        4
    dofine  
       2015-04-01 17:07:09 +08:00   ❤️ 1
    使用 ST3 的话直接用它的 Git 插件吧,比较方便。。
    gangsta
        5
    gangsta  
       2015-04-01 17:08:20 +08:00   ❤️ 1
    表达不地道啊... many files > multi-file/multiple files
    重新Google下吧...
    engHacker
        6
    engHacker  
       2015-04-01 17:10:07 +08:00   ❤️ 1
    到底是同时为多个文件写commit信息,还是分别为多个写信息?
    标题和描述不符啊。
    finian
        7
    finian  
       2015-04-01 17:39:18 +08:00   ❤️ 1
    用 stage 来组织,要 commit 的就先 stage 到一块,然后 commit。如果你是一个文件一个 commit(不建议这么搞,除非你每个文件的改动是一个逻辑上的改动),那就每次 stage 一个文件,然后 commit
    lululau
        8
    lululau  
       2015-04-01 17:43:00 +08:00   ❤️ 1
    git add -i
    akira
        9
    akira  
       2015-04-01 18:29:23 +08:00   ❤️ 1
    改一个文件提交一次。
    ming2281
        10
    ming2281  
    OP
       2015-04-01 20:45:43 +08:00
    @gangsta 囧, thanks
    sumhat
        11
    sumhat  
       2015-04-01 21:23:03 +08:00
    对于问题一,一次 commit 应该是一个原子的功能上的改动,如果你的改动可以拆成独立的互不影响的两部分,就不要并成一个 commit。一个原子的改动只需要写一份 comment 即可。
    julyclyde
        12
    julyclyde  
       2015-04-02 10:13:03 +08:00
    lz补充的“一次提交一类”还是不对的。需要打回重学

    一次commit的粒度要掌握在能干干净净revert而不引起其它副作用
    ming2281
        13
    ming2281  
    OP
       2015-04-02 13:41:11 +08:00
    @julyclyde 比如修一个bug,涉及到若干个文件,那么就可以把这些文件并成一次add和commit, 每个都写=>不累?
    ming2281
        14
    ming2281  
    OP
       2015-04-02 13:47:31 +08:00
    @dofine 是的, 今天试了,方便太多
    julyclyde
        15
    julyclyde  
       2015-04-02 15:31:30 +08:00
    @ming2281 修一个bug,合并为一次commit,显然只写一个comment啊,为什么要给每个文件都写?每个都写就暗示这些多个修改的耦合没那么紧密,也就是说可以进一步拆分成多个commit。我之前说过,每一个commit的粒度要能干干净净revert而不引起副作用。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1006 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:13 · PVG 04:13 · LAX 12:13 · JFK 15:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.