我有一个用例,我在几个文件中复制相同的代码,所以我想做的是用基本代码创建一个公共文件,而所有其他文件都从基本文件继承相同的代码。
- 无论我在派生文件中覆盖了什么,都应该在基本文件上覆盖
- 应包括基础文件的添加
- 还应包括派生文件的添加
编辑:This might be one of the ways to do merging of two files但这并没有多大帮助,我仍然需要手动删除并保留我想要的内容,我想自动化这个过程。我想使用diff
或sdiff
会有帮助吗?但是这些都是交互式的,那么我们如何将其自动化呢?
例如:
- base. py**
def basefunc1(a, b):
c = a + b
return c
def basefunc2(a):
b = a**2
return b
- 派生. py**
def derivedfunc(a, b):
c = a + b
return c
def basefunc2(a, b):
c = a**b
return c
- output. py**
def basefunc1(a, b):
c = a + b
return c
def basefunc2(a, b):
c = a**b
return c
def derivedfunc(a, b):
c = a + b
return c
这里basefunc1(a, b)
和derivedfunc(a, b)
是唯一的,应该包含在输出中,但是basefunc2(a, b)
在派生文件中被编辑,因此应该写入输出。基本上在diff
中,当derived
与base
进行比较时,base中的删除(wrt derived)和derived中的添加(wrt base)应该是输出中的添加,但derived中的更改(wrt base)应该被覆盖。
我的方法:
我觉得可行的是:
git diff --no-index file1.py file2.py | grep '^+' | sed 's/^+//' | sed '/^++/d'
使用这个我会找到改变的部分,但是我必须这样做两次,因为这只给出了派生文件的添加和更改,第二次将比较这个和基本文件以获得第一个文件的唯一元素。
我也试过
git merge-file file1.py file2.py file3.py
合并到file1的file2 wrt空file3,但我不知道如何删除所有的行从<<<<<<<<
到========
,因为这些将是当前的变化,我想用传入的更改替换,但我也想保持当前文件的唯一的当前更改,同时也保持唯一的传入更改。
1条答案
按热度按时间b0zn9rqh1#
我写了这个python脚本来做你需要的事情。根据您的示例文件,它可以工作。
使用方法:
./script.py base.py derived.py output.py
它的作用:
声明:
try: catch:
脚本,它可能会在某些情况下失败。eval
,这在某些圈子里是不受欢迎的。这是我发现的将对象名称存储在函数getsource
的变量中的唯一方法。print
语句,我使用这些来处理代码。