非递归git log和diff

时间:2015-09-12 15:58:42

标签: git depth git-diff git-log non-recursive

[].forEach.call(document.getElementById("checkboxes").children, function(element) {
    element.onclick = function () {
        document.getElementById("answer").innerHTML = element.id + " " + element.checked;
    }
});

仅在当前目录中但不在子目录中

等效

git log -p .

有可能吗?

3 个答案:

答案 0 :(得分:2)

怎么样:

apply plugin: 'com.android.application'

android {
compileSdkVersion 22
buildToolsVersion "22.0.1"

defaultConfig {
    applicationId "com.example.exampleApp"
    minSdkVersion 14
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.+'
compile 'com.github.navasmdc:MaterialDesign:1.5@aar'
compile 'com.balysv:material-ripple:1.0.2'
}

或者,如果它们太多而无法输入:

$ git log -p file1 file2 ...

答案 1 :(得分:0)

在Linux等上,您只能列出当前目录中的文件:

layout_weight

这样:

ls -p | grep -v /

是一种方法。

答案 2 :(得分:0)

类似的事情会起作用:

git log --all --pretty=format: --name-only --relative="$(git rev-parse --show-prefix)" -- . | sed '/\//d ; /^[[:space:]]*$/d' | sort | uniq | xargs git log -p --
  • 第一个git命令列出曾经的每个文件,包括已删除的文件。每个文件每次更改都会列出一次。 --relative将从该目录中删除文件,还将从文件名中删除子目录前缀。
  • Sed删除不在当前目录中(即不包含斜杠)的文件。之所以有效,是因为我们在上一步中删除了subdir前缀。它还会删除空行。
  • 排序和uniq删除重复项。
  • 现在我们有了我们感兴趣的文件列表,xargs会将它们传递给git log -p--是必需的,否则它将不知道如何处理已删除的文件。

这似乎是完成任务的一种低效方式,但我不认为git具有“每个文件”的概念,它只是具有当前文件集和差异列表。因此,您必须仔细检查所有变更集,以获取完整列表。