Git命令确定运行commit后目录是否存在于克隆中?

时间:2014-08-07 12:35:47

标签: git githooks pre-commit-hook

我正在编写一个git pre commit hook(用于windows和osx),如果我在提交当前暂存的mod后克隆了repo,我需要知道是否存在目录。由于未跟踪目录,我需要知道在提交后是否存在将在目录或其任何子目录中跟踪的文件。我目前使用以下代码,但感觉非常不稳定:

public bool TrackedAfterCommit(IDirectory directory)
{
    var dirs = new Stack<IDirectory>();
    dirs.Push(directory);

    while (dirs.Count > 0)
    {
        var d = dirs.Pop();

        foreach (var f in d.Files)
        {
            var command = new ConsoleCommand(
                "git",
                "status --porcelain --ignored " + f.Path, directory.Path
            );
            var output = command.Execute();

            if (output.Count == 0)
                return true;

            var status = output[0];

            if (!status.StartsWith("D")
                && !status.StartsWith("??")
                && !status.StartsWith("!"))
            {
                return true;
            }
        }

        foreach (var dir in d.Directories)
            dirs.Push(dir);
    }

    return false;
}

1 个答案:

答案 0 :(得分:1)

您可以使用以下命令获取分支BRANCH上包含git控制文件的所有目录的列表:

git ls-tree -r --name-only --full-tree BRANCH | xargs -n 1 dirname | sort -u