【问题标题】:git format-patch not working from bash scriptgit format-patch 不适用于 bash 脚本
【发布时间】:2013-05-17 04:52:39
【问题描述】:

我在 commits.txt 文件中有一个可用的提交列表,我需要准备这些提交的补丁列表,以便稍后将它们应用到我的分支。我在下面写了 bash 脚本来这样做:-

#!/tools/bin/bash

echo "Enter input file name"
read FILENAME

echo "Enter log file name"
read LOGNAME 

while read line;
do 
    git show -- $line > /dev/null
    if [ $? -eq 0 ] 
    then
        git format-patch -- $line -1
    else
        echo "NOT FOUND, Log commit ID"
        $line >> $LOGNAME
    fi
done < $FILENAME

我将输入文件名输入为“commits.txt”,将日志文件名输入为“mylog.txt”。 我没有从这些提交列表中获取 *.patch 文件。 有什么线索,怎么回事?

谢谢, Prasanna NAVARATNA

【问题讨论】:

  • 与其费力地提示用户输入文件名,不如将它们作为参数传递:script commits.txt mylog.txt。在脚本内部,FILENAME=$1 LOGNAME=$2.

标签: git bash git-bash


【解决方案1】:

至少有这些问题:

  1. 对于git show,请将-- 放在 $line 之后,因为提交ID 是修订版。
  2. 对于git format-patch-1 需要在-- 之前(实际上没有必要)。
  3. 对于日志,请尝试echo $line &gt;&gt;$LOGNAME,否则它将尝试以您的提交 ID 的名称运行程序。

根据您要实现的目标,git cherry-pick $(tr '\n' ' ' commits.txt) 可能已经做到了:将所有列出的提交应用到当前分支。

【讨论】:

  • 如果我在“git show”或“git format-patch”之后没有放--,它会抛出错误并建议放--错误:使用'--'来分隔路径修订即使我使用“echo $line >>$LOGNAME”也没有用。我没有检查你的 cherry-pick 命令,因为我是 git 的新手,不完全知道哪个分支,提交在哪里等等。但是一旦我弄清楚了,我会试一试,并会让你知道。谢谢。现在,我用 short'n'sweet C 代码实现了相同的结果!
  • 正如我所说,git show--,是的,但是 $line 之后:git show $line --
猜你喜欢
  • 2011-06-03
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 2019-08-31
  • 1970-01-01
  • 2018-10-09
  • 2018-07-02
相关资源
最近更新 更多