Commit Graph

27 Commits

Author SHA1 Message Date
Junio C Hamano
b10ac50f1e Fix pulling into the same branch.
When the "git pull" command updates the branch head you are
currently on, before doing anything else, first update your
index file and the working tree contents to that of the new
branch head.  Otherwise, the later resolving steps would think
your index file is attempting to revert the change between the
original head commit and the updated head commit.

It uses two-tree fast-forward form of "read-tree -m -u" to
prevent losing whatever local changes you may have in the
working tree to do this update.  I think this would at least
make things safer (a lot safer), and prevent mistakes.

Also "git fetch" command is forbidden from fetching and fast
forwarding the current branch head unless --update-head-ok flag
is given.  "git pull" passes the flag when it internally calls
"git fetch".

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-26 22:06:17 -07:00
Junio C Hamano
521003ff52 [PATCH] Use git-octopus when pulling more than one heads.
With this, you can finally say "git pull jgarzik sil24 pdc2027x".

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-24 16:50:52 -07:00
Junio C Hamano
e0bfc81e05 [PATCH] Retire git-parse-remote.
Update git-pull to match updated git-fetch and allow pull to
fetch from multiple remote references.  There is no support for
resolving more than two heads, which will be done with "git
octopus".

Update "git ls-remote" to use git-parse-remote-script.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-24 16:50:50 -07:00
Junio C Hamano
f170e4b39d [PATCH] fetch/pull: short-hand notation for remote repositories.
Since pull and fetch are done often against the same remote
repository repeatedly, keeping the URL to pull from along with
the name of the head to use in $GIT_DIR/branches/$name makes a
lot of sense.  Adopt that convention from Cogito, and try to be
compatible when possible; storing a partial URL and completing
it with a trailing path may not be understood by Cogito.

While we are at it, fix pulling a tag.  Earlier, we updated only
refs/tags/$tag without updating FETCH_HEAD, and called
resolve-script using a stale (or absent) FETCH_HEAD.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-07-16 09:23:06 -07:00
Linus Torvalds
3ba513c32e Make "git resolve" take the merge message in $3
It used to do "Merge $3" as the message, but that ends up being
inconvenient, and much more easily done inside git-pull-script instead.

This makes the third argument to "git resolve" much easier to explain.
2005-07-08 17:38:44 -07:00
Linus Torvalds
b33e966608 Add "git-sh-setup-script" for common git shell script setup
It sets up the normal git environment variables and a few helper
functions (currently just "die()"), and returns ok if it all looks like
a git archive.  So use it something like

	. git-sh-setup-script || die "Not a git archive"

to make the rest of the git scripts more careful and readable.
2005-07-08 10:57:21 -07:00
Linus Torvalds
5571be75eb Duh. Fix transposed characters in git-pull-script
I'd stupidly only tested the non-branch-name version.
2005-06-28 10:15:10 -07:00
Linus Torvalds
635f67f943 Teach git-pull-script about pulling tags 2005-06-27 20:10:32 -07:00
Linus Torvalds
6b38a402e9 Clean up different special *HEAD handling
We codify the following different heads (in addition to the main "HEAD",
which points to the current branch, of course):

 - FETCH_HEAD

   Populated by "git fetch"

 - ORIG_HEAD

   The old HEAD before a "git pull/resolve" (successful or not)

 - LAST_MERGE

   The HEAD we're currently merging in "git pull/resolve"

 - MERGE_HEAD

   The previous head of a unresolved "git pull", which gets committed by
   a "git commit" after manually resolving the result

We used to have "MERGE_HEAD" be populated directly by the fetch, and we
removed ORIG_HEAD and LAST_MERGE too aggressively.
2005-06-21 14:04:13 -07:00
Linus Torvalds
5b1ea09de1 Make default merge messages denser.
In particular, make them readable on one line since that's what all the
tools like git-shortlog and gitk end up showing.
2005-06-08 10:09:41 -07:00
Linus Torvalds
ed37b5b2b9 Make fetch/pull scripts terminate cleanly on errors
Don't continue with a merge if the fetch failed.
2005-06-06 17:40:22 -07:00
Linus Torvalds
c5434dead6 git-pull-script: pretty-print the merge head information
This also drops the common ".git" part from the end of the repo
name, and if a non-default head reference is given, makes a nicer
commit message about it.
2005-05-25 14:05:13 -07:00
Linus Torvalds
7ef76925d9 Split up git-pull-script into separate "fetch" and "merge" phases.
This allows you to just fetch stuff first, inspect it, and then
resolve the merge separately if everything looks good.
2005-05-22 11:03:24 -07:00
Junio C Hamano
8ac069ac0a Introduce GIT_DIR environment variable.
During the mailing list discussion on renaming GIT_ environment
variables, people felt that having one environment that lets the
user (or Porcelain) specify both SHA1_FILE_DIRECTORY (now
GIT_OBJECT_DIRECTORY) and GIT_INDEX_FILE for the default layout
would be handy.  This change introduces GIT_DIR environment
variable, from which the defaults for GIT_INDEX_FILE and
GIT_OBJECT_DIRECTORY are derived.  When GIT_DIR is not defined,
it defaults to ".git".  GIT_INDEX_FILE defaults to
"$GIT_DIR/index" and GIT_OBJECT_DIRECTORY defaults to
"$GIT_DIR/objects".

Special thanks for ideas and discussions go to Petr Baudis and
Daniel Barkalow.  Bugs are mine ;-)

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-05-09 22:57:58 -07:00
Junio C Hamano
cc167ccaeb Add http and local transport support for git-pull-script.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-05-06 01:12:04 -07:00
Linus Torvalds
67cc5c4ef8 Split "git-pull-script" into two parts
Separate out the merge resolve from the actual getting of the
data. Also, update the resolve phase to take advantage of the
fact that we don't need to do the commit->tree object lookup
by hand, since all the actors involved happily just act on a
commit object these days.
2005-05-05 11:43:30 -07:00
Linus Torvalds
4bea3b6926 git-pull-script: do the diffstat also for the fast-forward case
This way you always see what the state change was.
2005-05-05 02:21:42 -07:00
Linus Torvalds
552e2bd12e Teach "git-pull-script" about alternate HEAD's to pull..
People are already starting to use a multi-head model.
2005-05-04 17:02:16 -07:00
Linus Torvalds
705acc5c94 git-pull-script: add a final "diffstat" to show the result of the merge.
This is useful to verify that you got the right thing.
2005-05-04 07:12:18 -07:00
Linus Torvalds
2d280e1c5e Update the merge scripts for the big git rename.
Let's see what else I forgot..
2005-04-29 15:02:43 -07:00
Rene Scharfe
d840b3b285 [PATCH] GIT: Honour SHA1_FILE_DIRECTORY env var in git-pull-script
If you set SHA1_FILE_DIRECTORY to something else than .git/objects
git-pull-script will store the fetched files in a location the rest of
the tools does not expect.

git-prune-script also ignores this setting, but I think this is good,
because pruning a shared tree to fit a single project means throwing
away a lot of useful data. :-)

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-29 12:08:03 -07:00
Linus Torvalds
9831d8f860 git-pull-script: do automatic merges
When the trivial "read-tree" merge fails, fall back on the (equally
trivial) automatic merge script instead of forcing the user to do
it by hand.

When _that_ fails, you get to do a manual merge.
2005-04-26 12:26:46 -07:00
Linus Torvalds
8ccfbf3279 Update "git-pull-script" to use "read-tree -m" for
reading a single tree too. That should speed up a
trivial merge noticeably.

Also, don't bother reading back the tree we just wrote
when we committed a real merge. It had better be the
same one we still have..
2005-04-19 12:56:47 -07:00
Linus Torvalds
4aaef1064a Make git-pull-script do the right thing for symlinked HEAD's.
Also exit gracefully if the HEAD pull failed, rather than use
a possibly stale MERGE_HEAD.
2005-04-19 09:53:58 -07:00
Junio C Hamano
0ffb0bcaf6 [PATCH] Do not let rsync obliterate .git/object symbolic link.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-04-18 16:49:21 -07:00
Linus Torvalds
00829b5def Add "update-cache --refresh" to git-pull-script to make sure
out index is all ready to go after a pull.

Noted by Russell King
2005-04-18 15:01:48 -07:00
Linus Torvalds
839a7a06f3 Add the simple scripts I used to do a merge with content conflicts.
They sure as hell aren't perfect, but they allow you to do:

	./git-pull-script {other-git-directory}

to do the initial merge, and if that had content clashes, you do

	merge-cache ./git-merge-one-file-script -a

which tries to auto-merge. When/if the auto-merge fails, it will
leave the last file in your working directory, and you can edit
it and then when you're happy you can do "update-cache filename"
on it. Re-do the merge-cache thing until there are no files left
to be merged, and now you can write the tree and commit:

	write-tree
	commit-tree .... -p $(cat .git/HEAD) -p $(cat .git/MERGE_HEAD)

and you're done.
2005-04-18 12:15:10 -07:00