【问题标题】:Shell script works fine by itself, but produces unexpected results when run through git filter-branchShell 脚本本身运行良好,但通过 git filter-branch 运行时会产生意外结果
【发布时间】:2012-02-05 22:48:17
【问题描述】:

这是我想使用git filter-branch 运行的脚本:

#!/bin/bash
if test -e src/unlagged.cpp; then
    more +34 src/unlagged.cpp | cat ~/newlic.cpp.txt - > /tmp/unlagged.cpp
    cp /tmp/unlagged.cpp src/unlagged.cpp
fi
if test -e src/unlagged.h; then
    more +34 src/unlagged.h | cat ~/newlic.h.txt - > /tmp/unlagged.h
    cp /tmp/unlagged.h src/unlagged.h
fi

很简单。它将所有内容通过src/unlagged.cppsrc/unlagged.h 的前 34 行,将其与文本文件的内容连接起来,然后将其写入一个临时文件,然后将其复制到我希望修改的文件的顶部。只要我只是在我的源代码树中运行它就可以很好地工作,因为src/unlagged.cpp 的输出看起来像:

(newlic.cpp.txt)
(everything passed line 34 of src/unlagged.cpp)

但是,当我运行git filter-branch '/path/to/script.sh' -- --all 时,文件被这样修改了......

(newlic.cpp.txt)
::::::::::::::
src/unlagged.cpp
::::::::::::::
(entire src/unlagged.cpp)

这些冒号和文件名是从哪里来的?为什么它实际上没有修剪src/unlagged.cpp?我用#!/bin/sh 尝试了脚本并得到了相同的结果。顺便说一句,我正在使用 git 1.7.7.3。

【问题讨论】:

    标签: git bash shell git-filter-branch


    【解决方案1】:

    使用tail -n +34 代替more +34。你被更多的交互性所干扰。例如,运行more +34 src/unlagged.cpp < /dev/null,您将看到 :::::::::: 行。

    【讨论】:

      猜你喜欢
      • 2014-01-02
      • 2011-01-14
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多