我正在与merge.conflictStyle
set进行合并diff3
.通常,这会插入由四(4)组字符分隔的三(3)个部分.
合并的Git文档清楚地解释了这些符号对于简单案例的含义(如下所述).
常规diff3:
Here are lines that are either unchanged from the common ancestor, or cleanly resolved because only one side changed.
<<<<<<< yours:sample.txt
Conflict resolution is hard;
let's go shopping.
|||||||
Conflict resolution is hard.
=======
Git makes conflict resolution easy.
>>>>>>> theirs:sample.txt
And here is another line that is cleanly resolved or unmodified.
Run Code Online (Sandbox Code Playgroud)
但是,我得到了一个更复杂的结果,有许多额外的行(见下文).我有一种感觉,这与我正在合并的提交的祖先中进行了大量合并这一事实有关,但我无法弄清楚额外的行是什么意思.我似乎也找不到这种行为的任何文档.
这是我得到的(编辑当然,以保护代码的身份).
(我试图合并的任何提交的代码中都没有冲突标记,所以这不是答案.)
<<<<<<< ours
||||||| base
<<<<<<< Temporary merge branch 1
||||||| merged common ancestors
if (sendRedirect(result)) …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个 Spring Boot 应用程序。对于我的常规服务类单元测试,我可以使用 扩展我的测试类MockitoExtension
,并且模拟很严格,这就是我想要的。
interface MyDependency {
Integer execute(String param);
}
class MyService {
@Autowired MyDependency myDependency;
Integer execute(String param) {
return myDependency.execute(param);
}
}
@ExtendWith(MockitoExtension.class)
class MyServiceTest {
@Mock
MyDependency myDependency;
@InjectMocks
MyService myService;
@Test
void execute() {
given(myDependency.execute("arg0")).willReturn(4);
myService.execute("arg1"); //will throw exception
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,将引发异常并显示以下消息(已编辑):
org.mockito.exceptions.misusing.PotentialStubbingProblem:
Strict stubbing argument mismatch. Please check:
- this invocation of 'execute' method:
myDependency.execute(arg1);
- has following stubbing(s) with different arguments:
1. myDependency.execute(arg0);
Run Code Online (Sandbox Code Playgroud)
此外,如果从未使用过存根,则会出现以下内容(已编辑):
org.mockito.exceptions.misusing.UnnecessaryStubbingException:
Unnecessary stubbings detected. …
Run Code Online (Sandbox Code Playgroud) 我想知道:Git什么时候进行垃圾收集?我知道在过去必须调用git gc
手动启动垃圾收集,但现在它是自动完成的,何时?
另外,是否需要在最新的Git版本中手动调用它?
我想git diff
将常规逐行diff与结合在一起git diff --word-diff
。逐行比较的问题在于,如果我更改一个或两个单词并使该行基本保持原样,则它们是不必要的-分块过于粗糙。另一方面,如果我改变整行并使用--word-diff
,有时diff算法将变得混乱并吐出令人难以置信的diff,插入和删除了大量单词以将一行“变形”为另一行。
是否有一种方法可以指定git
应该对此明智的方法,并且仅--word-diff
在这样做确实有意义时(当然,逐行)?
有没有办法自动对大量合并提交进行变基?另一个问题Rebase a Git merge commit 的答案建议使用--preserve-merges
,但这也会对非合并提交进行 rebase。
当将功能分支合并到主分支或集成分支,然后发现其他人刚刚推送了更改时,这种行为是不需要的。此外,能够将开发分支重新建立到新的主提交上,或者从开发中删除不会使用的修复也很有用。
例如,考虑到以下情况:
* 7909b1a (origin/master) Merge bug/456
|\
| * f9d43b6 (origin/bug/456) 456 - Change color
|/
| * 32666f3 (HEAD, master) Merge branch 'bug/123'
| |\
|/ /
| * 0939652 (origin/bug/123, bug/123) 123 - Fix Spelling
|/
o 96c9aa9 (tag: v1.1.1)
Run Code Online (Sandbox Code Playgroud)
如果我运行git rebase --preserve-merges origin/master
,将产生以下结果:
* (HEAD, master) Merge branch 'bug/123'
|\
| * 8e6ccbe 123 - Fix Spelling
|/
* 7909b1a (origin/master) …
Run Code Online (Sandbox Code Playgroud) 我一直在尝试对 使用相对较新的--atomic
选项git push
,但它对我不起作用,即,即使其他引用失败,它仍然允许某些引用更改。
从这里的差异看来,远程服务器上也需要一些东西来接受原子标志。虽然这是有道理的,但似乎默认是使用它。
我正在使用 http 协议推送到 BitBucket 服务器实例。服务器上当前的 Git 版本是“git version 2.8.1”。
是否需要在服务器上配置某些内容才能使其正常工作?
编辑:
下面是一个可以复制的例子。
服务器上的配置:
$ git --version
git version 2.8.1
$ git config --get-all --show-origin receive.advertiseatomic
file:/home/bitbucket/.gitconfig 1
Run Code Online (Sandbox Code Playgroud)
在客户端:
$ git --version
git version 2.8.2.windows.1
$ git push <local-path>/.git HEAD:refs/heads/wwww HEAD:refs/heads/zzz --force-with-lease=zzz --atomic
error: atomic push failed for ref refs/heads/zzz. status: 7
fatal: The remote end hung up unexpectedly
To <local-path>/.git
! [rejected] HEAD -> wwww (atomic push failed)
! [rejected] …
Run Code Online (Sandbox Code Playgroud) 我有一个专门用于在运行时设置字段的测试框架。目的是设置测试用例。期待升级到 Java 14+ 记录,我注意到现有实用程序(例如ReflectionTestUtils.setField
和PropertyAccessorFactory.forDirectFieldAccess
)适用于普通私有最终字段,但不适用于记录字段。
这是 JVM 的限制,还是这些实用程序的限制?
git ×5
git-merge ×2
java ×2
diff ×1
diff3 ×1
git-gc ×1
git-push ×1
git-rebase ×1
java-record ×1
line-by-line ×1
merge ×1
mockito ×1
reflection ×1
regex ×1
spring-boot ×1
testing ×1
word-diff ×1