Git按文件ID添加

时间:2015-10-03 15:38:26

标签: git

git status提供了修改过的文件列表:

modified : app/controllers/AppController.controller.php
modified : app/controllers/Front.controller.php
modified : app/models/Booking.model.php
modified : app/models/Price.model.php
modified : app/views/AdminBookings/update.php
modified : app/views/Layouts/elements/leftmenu.php
...

每次我必须添加,签出或记录文件时,我发现文件路径“输入”(无论如何)是不方便的。

有没有办法将ID与这些文件相关联,以便我可以更快地单独管理它们?像这样:

[0] modified : app/controllers/AppController.controller.php
[1] modified : app/controllers/Front.controller.php
[2] modified : app/models/Booking.model.php
[3] modified : app/models/Price.model.php
[4] modified : app/views/AdminBookings/update.php
[5] modified : app/views/Layouts/elements/leftmenu.php
...

$ git add --id 3

3 个答案:

答案 0 :(得分:3)

我不太喜欢交互模式-我发现它对于我想要的东西来说太慢了。我编写了一个自定义git命令,名为git-a。此命令必须在您的PATH上,并且必须是可执行文件。它基于命令git status -s的输出,以避免进一步的字符串过滤,greping等。


exclusionList=('M', 'MM', 'MD', 'MMD', 'A', 'AM', 'AD', 'AMD', 'D', 'DR', 'DC',\
'RM','RD', 'RMD', 'C', 'CM', 'CD', 'CMD', 'DD', 'AU', 'UD', 'UA', 'DU', 'AA',\
'UU', '??', '!!', 'R')

allEntries=( $(git status -s) )
relevantEntries=()
previousEntry=""
for currentEntry in "${allEntries[@]}"; do
    if ! echo ${exclusionList[@]} | grep -q -w -- "$currentEntry"
    then
            # if the currenty entry is the '->', that means this is a file
            # rename - therefore, the old name (first after the letter) should
            # be removed from the array, and the new name used instead
            if [ "$currentEntry" == '->' ]
            then
                unset 'relevantEntries[${#relevantEntries[@]}-1]'
            else
                relevantEntries+=("$currentEntry")
            fi
            previousEntry="$currentEntry"
    fi
done
git add ${relevantEntries[$(( $1 - 1 ))]}

我知道这是完全手动的,但是您可以跟踪git docs上所有可能的状态输出。从本质上讲,它是一个列表理解,但是用bash表示。

请注意,此命令可用于任何您喜欢的命令-只需更改最后一行,其工作原理将相同。我目前正在考虑仅获取relevantEntries的方法,使其可用于任何git命令,但是我不确定如何执行此操作。

我当前正在创建名称为git-custom-add的文件,并在我的.gitconfig文件中将其别名为cadd,因此我可以使用我认为合适的所有参数,并且仍然保持命令简短。

答案 1 :(得分:1)

尝试使用git add -i进行互动添加。它会让你进入这样一个屏幕:

           staged     unstaged path
  1:    unchanged       +45/-5 app/controllers/AppController.controller.php
  2:    unchanged        +4/-2 app/controllers/Front.controller.php
  3:    unchanged       +15/-5 app/models/Booking.model.php

*** Commands ***
  1: status       2: update       3: revert       4: add untracked
  5: patch        6: diff         7: quit         8: help
What now>

从那里,您可以选择update(或简称u)进入添加模式

What now> u
           staged     unstaged path
  1:    unchanged       +45/-5 app/controllers/AppController.controller.php
  2:    unchanged        +4/-2 app/controllers/Front.controller.php
  3:    unchanged       +15/-5 app/models/Booking.model.php
Update>>

从更新提示中,您现在可以选择要添加到索引的文件。只需输入要添加的文件的编号即可。如果您有一个彩色输出,您还可以看到文件路径的某些部分是蓝色的,突出显示您可以输入以引用该文件的文本。

您可以暂存多个文件,例如要暂存第一个和第三个,输入1并按回车键,然后输入3并按回车键。注意文件前面的星星表示您已将它们分级。完成后,在空更新提示上按Enter键离开。您将在开始屏幕中返回,您可以通过输入q退出。

答案 2 :(得分:0)

您可以按路径添加

$('#tree').on('select_node.jstree', function (e, data) {
    data.instance.toggle_node(data.node);
});

或所有文件:

git add models/

或通过面具

Recursively add files by pattern