1
0
mirror of https://github.com/git/git.git synced 2024-09-30 17:11:23 +02:00
Commit Graph

21 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
8572aa85a7 Fix fetching of tags.
"git fetch tag <tag>" stored a tag after dereferencing.  Bad.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-24 22:46:07 -07:00
Junio C Hamano
efe9bf0f3b [PATCH] Allow "+remote:local" refspec to cause --force when fetching.
With this we could say:

    Pull: master:ko-master +pu:ko-pu

to mean "fast forward ko-master with master, overwrite ko-pu with pu",
and the latter one does not require the remote "pu" to be descendant
of local "ko-pu".

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-24 16:50:53 -07:00
Junio C Hamano
ae2da40690 [PATCH] "git fetch --force".
Just like "git push" can forcibly update a ref to a value that is not
a fast-forward, teach "git fetch" to do so as well.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-24 16:50:52 -07:00
Junio C Hamano
92c533ef0e [PATCH] Make "git pull" and "git fetch" default to origin
Amos Waterland sent in a patch for the pre-multi-head aware
version of "git pull" to do this, but the code changed quite a
bit since then.  If there is no argument given to pull from, and
if "origin" makes sense, default to fetch/pull from "origin"
instead of barfing.

[jc: besides, the patch by Amos broke the non-default case where
explicit refspecs are specified, and did not make sure we know
what "origin" means before defaulting to it.]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-24 16:50:51 -07:00
Junio C Hamano
853a3697dc [PATCH] Multi-head fetch.
Traditionally, fetch takes these forms:

    $ git fetch <remote>
    $ git fetch <remote> <head>
    $ git fetch <remote> tag <tag>

This patch updates it to take

    $ git fetch <remote> <refspec>...

where:

    - A <refspec> of form "<src>:<dst>" is to fetch the objects
      needed for the remote ref that matches <src>, and if <dst>
      is not empty, store it as a local <dst>.

    - "tag" followed by <next> is just an old way of saying
      "refs/tags/<next>:refs/tags/<next>"; this mimics the
      current behaviour of the third form above and means "fetch
      that tag and store it under the same name".

    - A single token <refspec> without colon is a shorthand for
      "<refspec>:"  That is, "fetch that ref but do not store
      anywhere".

    - when there is no <refspec> specified

      - if <remote> is the name of a file under $GIT_DIR/remotes/
	(i.e. a new-style shorthand), then it is the same as giving
	the <refspec>s listed on Pull: line in that file.

      - if <remote> is the name of a file under $GIT_DIR/branches/
	(i.e. an old-style shorthand, without trailing path), then it
	is the same as giving a single <refspec>
	"<remote-name>:refs/heads/<remote>" on the command line, where
	<remote-name> is the remote branch name (defaults to HEAD, but
	can be overridden by .git/branches/<remote> file having the
	URL fragment notation).  That is, "fetch that branch head and
	store it in refs/heads/<remote>".

      - otherwise, it is the same as giving a single <refspec>
        that is "HEAD:".

The SHA1 object names of fetched refs are stored in FETCH_HEAD,
one name per line, with a comment to describe where it came from.
This is later used by "git resolve" and "git octopus".

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-24 16:50:50 -07:00
Junio C Hamano
33b8303466 fetch-pack: start multi-head pulling.
This is a beginning of resurrecting the multi-head pulling support
for git-fetch-pack command.  The git-fetch-script wrapper still
only knows about fetching a single head, without renaming, so it is
not very useful unless you directly call git-fetch-pack itself yet.

It also fixes a longstanding obsolete description of how the command
discovers the list of local commits.
2005-08-12 10:38:21 -07:00
Catalin Marinas
affa40d2f8 [PATCH] Make curl fail on server error
Some http servers return an HTML error page and git reads it as normal
data. Adding -f option makes curl fail silently.

Signed-off-by: Catalin Marinas <catalin.marinas@gmail.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-08 22:51:44 -07:00
Junio C Hamano
0f2b4c4654 Retire git-fetch-dumb-http and missing-revs
Now git-http-pull knows how to do packed repo, retire scripted
hacks I placed as a stop-gap measure.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-08-01 00:41:49 -07:00
Junio C Hamano
96155e55e1 Fetch from a packed repository on dumb servers.
Implement fetching from a packed repository over http/https
using the dumb server support files.

I consider some parts of the logic should be in a separate C
program, but it appears to work with my simple tests.  I have
backburnered it for a bit too long for my liking, so let's throw
it out in the open and see what happens.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-07-31 11:56:44 -07:00
Darrin Thompson
3dcb90f526 [PATCH] Support more http features: https no cert, .netrc -> auth
Cause setting environment variable GIT_SSL_NO_VERIFY to turn off
curl's ssl peer verification.

Only use curl for http transfers, instead of curl and wget.

Make curl check ~/.netrc for credentials.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-07-22 17:48:45 -07:00
Linus Torvalds
9c2b1c0cd8 git-fetch-script: fix http:// breakage
We were trying to fetch using the merge-head name rather than the
merge-head SHA1 that we just got.

Now, http:// is broken anyway right now for packing, but this should
make it work for nonpacked repositories again.
2005-07-16 10:31:38 -07:00
Linus Torvalds
60ea0fdd7d Fix git-fetch-script breakage
It had the test for the destination reversed.
2005-07-16 10:27:19 -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
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
f03f2ba0a5 Work around git-http-pull breakage in git-fetch-script
Need to add a final slash.  And make it verbose by default, since it's
so slow that otherwise people will think it's died.
2005-07-05 12:02:10 -07:00
Linus Torvalds
0a623e7ce8 git-fetch-script: use git-fetch-pack for local and ssh fetches.
Also, clean it up a lot.
2005-07-05 11:38:37 -07:00
Linus Torvalds
5fca669f19 Make "git fetch" able to fetch a named tag
Use "git fetch <repo> tag <tagname>" to get the named tag and everything
it points to.
2005-06-23 08:59:00 -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
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
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