将文件夹与 git 存储库的子文件夹进行比较

将文件夹与 git 存储库的子文件夹进行比较

我有一个从 git 存储库导出的文件夹now,以及 git 存储库本身:

/
/now/
/repository.git/

我想将 中的文件now与存储库的当前状态进行比较。虽然使用--git-dir=/repository.git和可以轻松完成此操作--work-tree=/now,但

git --git-dir=/repository.git --work-tree=/now status

对我来说,这不是很明显,什么now时候子文件夹git 存储库中的内容。

除了再次检查存储库并diff查看内容之外,还有其他方法可以git比较文件夹和存储库中相应的子文件夹吗?(我知道,git 并不以单个文件更改的想法为中心,因此我实际上期望一个消息灵通的人

答案1

您可以仅使用存储库子目录的内容填充临时索引文件,然后将现有文件与其进行比较。

diff-sub() { : usage: diff-sub repo treeish-in-repo external-dir
  (
    GIT_DIR="$1" GIT_WORK_TREE="$3"
    GIT_INDEX_FILE=/tmp/.git-index--now-sub.tmp
    if test -e "$GIT_INDEX_FILE"; then
      echo "already exists: $GIT_INDEX_FILE"
      exit 1
    fi
    export GIT_DIR GIT_INDEX_FILE GIT_WORK_TREE
    git read-tree "$2" &&
    git diff
    ec=$?
    rm -f "$GIT_INDEX_FILE"
    exit "$ec"
  )
}
: diff sub from master in /repository.git against /now
diff-sub /repository.git master:sub /now

注意:如果您运行其他 Git 命令与正常的完整树进行比较(例如,git statusgit diff --cached而不是git diff),那么您将看到奇怪的结果,因为索引和工作树都只包含正常完整树的一部分。

答案2

您可以重新创建通向子文件夹的目录结构,并利用--relative诸如difflog(但不是status)等命令的选项。例如,如果您签出sub/dir

mkdir -p sub
mv now sub/dir
git --git-dir=/repository.git diff --relative=sub/dir

相关内容