繁体   English   中英

如何“git ls”文件被git标记为“由我们删除”

[英]Howto "git ls" files marked by git as "deleted by us"

我开始使用 git cherrypick; 因此,我现在(经常)面临这样的情况,这些情况给了我很多标记为“被我们删除”的文件。

我看到了另一个问题,其中提到了如何使用git ls-files --deleted来获取平面文件列表; 然后可以通过管道传输到 xargs rm。

问题是:--deleted 没有列出那些“被我们删除”的文件。

所以,长话短说:删除“被我们删除”文件的最简单/直接的方法是什么?

(我真的很喜欢 git ls-files 方法;因为它不需要 sed/awk 魔法;所以也不必担心正确使用引号......)

更新; 只是为了解释为什么这不是一些“XY 问题”的情况:

  • 实际上我正在使用 git svn; 连接到一些后端 SVN 服务器
  • SVN 主干包含目录 A、B、C
  • 我正在对影响所有三个目录的主干进行更改
  • 但是:我运行cherry-pick的git ...实际上类似于在SVN服务器上创建的“产品分支”。 这些“产品”分支只包含子集(所以一个有 A 和 B;另一个有 B 和 C)。
  • 我努力了; 但我真的无法同时创建一个包含 SVN 主干和 SVN 产品分支的 git svn clone

我不知道像这样的“简单”命令,但你可以使用git status本身。

while read -d '' status file; do
    case "$status" in
        (D?)
            echo "Removing $file that was deleted by us."
            #rm "./$file"
            ;;
    esac
    #printf 'status: %q\nfilename: %q\n' "$status" "$file"
done < <(git status -sz)

只匹配DU而不匹配D? (D 单字符) 适当更改大小写模式。

要仅运行rm一次,请在if块中使用files+=("$file") ,然后在最后使用rm "${files[@]}"

要列出标记为“由我们删除”的未合并文件,可以使用以下命令:

git status --porcelain --untracked-files=no | sed --silent 's/^DU //p'

或稍短的变体:

git status --porcelain -uno | sed -n 's/^DU //p'

在命令git status --porcelain的输出中, git status --porcelain合并的“被我们删除”文件用DU标记。

sed ,除非明确要求,否则选项-n禁止打印,命令s/X/Y/s/X/Y/替换 X(正则表达式),并且由于标志p会打印修改后的行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM