如何处理从git diff迭代结果时文件名中的空格--仅限名称 [英] How to cope with spaces in file names when iterating results from git diff --name-only

查看:25
本文介绍了如何处理从git diff迭代结果时文件名中的空格--仅限名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在处理的一个脚本需要仔细检查git diff中的每个文件。但是,我不知道如何处理文件名中的空格。任何包含空格的文件都会被拆分成"2个文件"。我知道它们需要包装在" "中,但在进入@参数之前,我不知道如何实现这一点。

当文件名中有空格时,我应该如何迭代

中的文件
git diff --name-only  $1

下面是一个复制错误的简单测试:

copyfiles()
{
    echo "Copying added files"
    for file in $@; do

        new_file=$(echo ${file##*/})

        directory=$(echo ${file%/*})
        echo "Full Path is is  $file"
        echo "File is  $new_file"
        echo "Directory is  $directory"
        cp $file $COPY_TO
    done    
}

COPY_TO="testDir"
DIFF_FILES=$( git diff --name-only  $1) 
copyfiles $DIFF_FILES 

该脚本当前的运行方式如下:

test.sh <git commit id>

推荐答案

使用-z使git-diff使用空终止符。例如:

export COPY_TO
git diff -z --name-only | xargs -0 sh -c 'for file; do
    new_file=$(echo ${file##*/})
    directory=$(echo ${file%/*})
    echo "Full Path is is  $file"
    echo "File is  $new_file"
    echo "Directory is  $directory"
    cp "$file" "$COPY_TO"
done' sh

请注意,更合理的解决方案是拒绝名称中带有空格的文件创建者的拉取请求。

这篇关于如何处理从git diff迭代结果时文件名中的空格--仅限名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆