我正在运行一个从文本文件(代表树)生成代码(字符串常量)的脚本。
运行脚本会删除代码库中其他地方使用的常量。
我想不提交已删除的行(因为它会破坏其他团队代码),而是将这些常量标记为已弃用。
有没有办法在我生成的文件中只添加“添加”行?
我可以用git add -p
做到这一点,但由于我有几个文件,有很多变化,这有点单调乏味。
输入差异:
const string Namespace1::kProperty1 = "/namespace_1/property_1";
+ const string Namespace1::kProperty2 = "/namespace_1/property_2";
const string Namespace2::kProperty3 = "/namespace_2/property_3";
- const string Namespace2::kProperty2 = "/namespace_2/property_2";
预期提交差异:
const string Namespace1::kProperty1 = "/namespace_1/property_1";
+ const string Namespace1::kProperty2 = "/namespace_1/property_2";
const string Namespace2::kProperty3 = "/namespace_2/property_3";
const string Namespace2::kProperty2 = "/namespace_2/property_2";
答案 0 :(得分:2)
没有一个工具可以做到这一点,但有些工具可以协同工作。
diff
命令更容易使用的输出。git cat-file blob ...
从Git数据库中检索内容,而不修改工作树。<()
进程替换,可以使用subprocess将其移动到Python中,或者使用临时文件。git hash-object -t blob -w
将对象写回Git数据库。git update-index --cacheinfo 100644,...
再次更新索引/阶段,而不会触及工作树。这应该给git add -p
操作提供类似的结果。
git update-index --cacheinfo 100644,$(python -c '
import difflib, sys;
sys.stdout.writelines(
line[2:] for line in difflib.Differ().compare(
open(sys.argv[1]).readlines(), open(sys.argv[2]).readlines())
if line.startswith(" ") or line.startswith("+ "))' \
<(git cat-file blob HEAD:filename) filename \
| git hash-object -t blob -w --stdin --path filename),filename