Follow the Oxford style, which says to use "up-to-date" before the noun, but "up to date" after it. Don't change plumbing (specifically send-pack.c, but transport.c (git push) also has the same string). This was produced by grepping for "up-to-date" and "up to date". It turned out we only had to edit in one direction, removing the hyphens. Fix a typo in Documentation/git-diff-index.txt while we're there. Reported-by: Jeffrey Manian <jeffrey.manian@gmail.com> Reported-by: STEVEN WHITE <stevencharleswhitevoices@gmail.com> Signed-off-by: Martin Ågren <martin.agren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			122 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
Trivial merge rules
 | 
						|
===================
 | 
						|
 | 
						|
This document describes the outcomes of the trivial merge logic in read-tree.
 | 
						|
 | 
						|
One-way merge
 | 
						|
-------------
 | 
						|
 | 
						|
This replaces the index with a different tree, keeping the stat info
 | 
						|
for entries that don't change, and allowing -u to make the minimum
 | 
						|
required changes to the working tree to have it match.
 | 
						|
 | 
						|
Entries marked '+' have stat information. Spaces marked '*' don't
 | 
						|
affect the result.
 | 
						|
 | 
						|
   index   tree    result
 | 
						|
   -----------------------
 | 
						|
   *       (empty) (empty)
 | 
						|
   (empty) tree    tree
 | 
						|
   index+  tree    tree
 | 
						|
   index+  index   index+
 | 
						|
 | 
						|
Two-way merge
 | 
						|
-------------
 | 
						|
 | 
						|
It is permitted for the index to lack an entry; this does not prevent
 | 
						|
any case from applying.
 | 
						|
 | 
						|
If the index exists, it is an error for it not to match either the old
 | 
						|
or the result.
 | 
						|
 | 
						|
If multiple cases apply, the one used is listed first.
 | 
						|
 | 
						|
A result which changes the index is an error if the index is not empty
 | 
						|
and not up to date.
 | 
						|
 | 
						|
Entries marked '+' have stat information. Spaces marked '*' don't
 | 
						|
affect the result.
 | 
						|
 | 
						|
 case  index   old     new     result
 | 
						|
 -------------------------------------
 | 
						|
 0/2   (empty) *       (empty) (empty)
 | 
						|
 1/3   (empty) *       new     new
 | 
						|
 4/5   index+  (empty) (empty) index+
 | 
						|
 6/7   index+  (empty) index   index+
 | 
						|
 10    index+  index   (empty) (empty)
 | 
						|
 14/15 index+  old     old     index+
 | 
						|
 18/19 index+  old     index   index+
 | 
						|
 20    index+  index   new     new
 | 
						|
 | 
						|
Three-way merge
 | 
						|
---------------
 | 
						|
 | 
						|
It is permitted for the index to lack an entry; this does not prevent
 | 
						|
any case from applying.
 | 
						|
 | 
						|
If the index exists, it is an error for it not to match either the
 | 
						|
head or (if the merge is trivial) the result.
 | 
						|
 | 
						|
If multiple cases apply, the one used is listed first.
 | 
						|
 | 
						|
A result of "no merge" means that index is left in stage 0, ancest in
 | 
						|
stage 1, head in stage 2, and remote in stage 3 (if any of these are
 | 
						|
empty, no entry is left for that stage). Otherwise, the given entry is
 | 
						|
left in stage 0, and there are no other entries.
 | 
						|
 | 
						|
A result of "no merge" is an error if the index is not empty and not
 | 
						|
up to date.
 | 
						|
 | 
						|
*empty* means that the tree must not have a directory-file conflict
 | 
						|
 with the entry.
 | 
						|
 | 
						|
For multiple ancestors, a '+' means that this case applies even if
 | 
						|
only one ancestor or remote fits; a '^' means all of the ancestors
 | 
						|
must be the same.
 | 
						|
 | 
						|
 case  ancest    head    remote    result
 | 
						|
 ----------------------------------------
 | 
						|
 1     (empty)+  (empty) (empty)   (empty)
 | 
						|
 2ALT  (empty)+  *empty* remote    remote
 | 
						|
 2     (empty)^  (empty) remote    no merge
 | 
						|
 3ALT  (empty)+  head    *empty*   head
 | 
						|
 3     (empty)^  head    (empty)   no merge
 | 
						|
 4     (empty)^  head    remote    no merge
 | 
						|
 5ALT  *         head    head      head
 | 
						|
 6     ancest+   (empty) (empty)   no merge
 | 
						|
 8     ancest^   (empty) ancest    no merge
 | 
						|
 7     ancest+   (empty) remote    no merge
 | 
						|
 10    ancest^   ancest  (empty)   no merge
 | 
						|
 9     ancest+   head    (empty)   no merge
 | 
						|
 16    anc1/anc2 anc1    anc2      no merge
 | 
						|
 13    ancest+   head    ancest    head
 | 
						|
 14    ancest+   ancest  remote    remote
 | 
						|
 11    ancest+   head    remote    no merge
 | 
						|
 | 
						|
Only #2ALT and #3ALT use *empty*, because these are the only cases
 | 
						|
where there can be conflicts that didn't exist before. Note that we
 | 
						|
allow directory-file conflicts between things in different stages
 | 
						|
after the trivial merge.
 | 
						|
 | 
						|
A possible alternative for #6 is (empty), which would make it like
 | 
						|
#1. This is not used, due to the likelihood that it arises due to
 | 
						|
moving the file to multiple different locations or moving and deleting
 | 
						|
it in different branches.
 | 
						|
 | 
						|
Case #1 is included for completeness, and also in case we decide to
 | 
						|
put on '+' markings; any path that is never mentioned at all isn't
 | 
						|
handled.
 | 
						|
 | 
						|
Note that #16 is when both #13 and #14 apply; in this case, we refuse
 | 
						|
the trivial merge, because we can't tell from this data which is
 | 
						|
right. This is a case of a reverted patch (in some direction, maybe
 | 
						|
multiple times), and the right answer depends on looking at crossings
 | 
						|
of history or common ancestors of the ancestors.
 | 
						|
 | 
						|
Note that, between #6, #7, #9, and #11, all cases not otherwise
 | 
						|
covered are handled in this table.
 | 
						|
 | 
						|
For #8 and #10, there is alternative behavior, not currently
 | 
						|
implemented, where the result is (empty). As currently implemented,
 | 
						|
the automatic merge will generally give this effect.
 |