我有一个从 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 status
或git diff --cached
而不是git diff
),那么您将看到奇怪的结果,因为索引和工作树都只包含正常完整树的一部分。
答案2
您可以重新创建通向子文件夹的目录结构,并利用--relative
诸如diff
和log
(但不是status
)等命令的选项。例如,如果您签出sub/dir
:
mkdir -p sub
mv now sub/dir
git --git-dir=/repository.git diff --relative=sub/dir