git快捷方式来从不同的目录中进行更改

时间:2014-11-05 14:19:23

标签: git version-control

考虑目录 my_dir 中的git-repository,我有

  • my_dir / path / to / my / testdata
  • testdata 的子目录
  • my_dir / a / different / path / to / my / sourcecode
  • 源代码的子目录

如果我使用IDE修改源代码,但想通过终端从我的 testdata 目录提交这些更改,我需要提供

git add ../../../a/different/path/to/my/sourcecode/file_with_changes.foo

我的问题:git是否提供了一种更简单的指定已更改文件的方法?

E.g:

git add file_with_changes.foo

编辑: testdata 目录还包含config-files,可能会暂时更改,但应从提交中排除(可能在之后提交)

3 个答案:

答案 0 :(得分:1)

git add .

会将所有已更改的文件添加到暂存区域。

或者您可以直接提交所有已更改的文件,而无需通过运行以下命令来添加到暂存区域

git commit -a -m "<message>"

请注意,如果要提交的文件是新文件,则上述命令不会提交。

我希望这会有所帮助。

答案 1 :(得分:1)

简答:不。

除了git add目录(以递归方式添加目录中包含的文件中的所有更改)之外,没有捷径。

另一方面,许多IDE都有某种git集成,这可以提供帮助。例如,在JetBrains的IDE(IDEA,WebStorm等)中,您可以在变更集之间拖放文件,或者右键单击以显示可以在索引中添加或删除文件的菜单等。 / p>

此外,如果你使用bash,使用git支持bash完成,你可以git add TAB,它应该将标签完成限制为修改过的文件。

你提到想要使用终端...但我想我会提到还有几个可视化git前端,可以更容易地将一些文件添加到索引中。我使用SourceTree,我发现它非常好,但它仅适用于Windows和Mac。不过还有其他人。

答案 2 :(得分:0)

下面的shell脚本将任意字符串(允许使用通配符)作为输入参数。 git-repository中与此子字符串匹配的任何已修改文件(也在其路径中)都将进行提交。

要使用它,请将脚本复制到 git-core 目录(例如 / usr / lib / git-core ),并确保它是可执行的:< / p>

sudo cp my-downloaded-git-script /usr/lib/git-core/git-add-by-substring && chmod 775 /usr/lib/git-core/git-add-by-substring

要概述脚本的效果,您可以选择使用

附加最后一行
git status

脚本:

#!/bin/bash

if [ "$#" -ne 1 ]; then
        echo "Usage: git add-by-substring \"substring to identify files\""
        echo "The script stages modified files, which contain the provided substring."
        exit
fi

substring=$1

list_of_files=$(git status | grep modified | sed 's/.*modified:   //' | grep ${substring})

if [ -z "$list_of_files" ]; then
        echo "No modified files, matching substring \"${substring}\""
        exit
fi

git add ${list_of_files}