Commit graph

3073 commits

Author SHA1 Message Date
Junio C Hamano 9e9b26751a git-push: avoid falling back on pushing "matching" refs.
The underlying "git send-pack remote.host:path" pushes all the
matching refs that both local and remote have, and "git push"
blindly inherits this property.  Which probably was a mistake.

A typical cloned repository (e.g. a subsystem repository cloned
from Linus repository) has at least two branches, "master" to
keep the subsystem and "origin" that records tip of Linus
"master" when the repository was cloned.  If this is the public
repository for the subsystem, then subsystem developers would
clone it, and then cloned ones have "master" and "origin".  When
developers use this public subsystem repository as a shared
repository, pushing into it via "git push subsys:/path/name"
would try to push the matching refs, "master" and "origin", from
the developers' repositories.  The "origin" in the public shared
repository does not have much relevance, yet pushing into
"origin" would cause "not a fast forward" checks to be
triggered.  Arguably "git push subsys:/path/name master" would
work it around, but having them to say it explicitly to avoid
pushing into "origin" as well is bad.

This commit requires you to give at least one refspec to
git-push.  You could "give" by either:

 (1) Listing the refspec(s) explicitly on the command line.
     E.g. "git push subsys:/path/name master".

 (2) Using --all or --tags on the command line.
     E.g. "git push --tags subsys:/path/name".

 (3) Using a $GIT_DIR/remotes shorthand with 'Push: refspec'
     line in it.

Unlike pull that can happen pretty much promiscuously, people
will push into the same set of a limited number of remote
repositories repeatedly over the life of the project, so it is
reasonable to assume they would want to keep a $GIT_DIR/remotes/
entry for those repositories even only to save typing the URL,
so keeping the default 'Push: refspec' line in such is a
sensible thing to do.

It was suggested to further fall back on pushing the current
branch, but this commit does not implement it.  If developers
adopt topic branch workflow, pushing to public while on a topic
branch by mistake would expose the topic branch to the public
repository.  Not falling back to the current branch prevents
that mistake from happening.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-13 16:53:35 -08:00
Junio C Hamano 1be0659efc checkout: merge local modifications while switching branches.
* Instead of going interactive, introduce a command line switch
   '-m' to allow merging changes when normal two-way merge by
   read-tree prevents branch switching.

 * Leave the unmerged stages intact if automerge fails, but
   reset index entries of cleanly merged paths to that of the
   new branch, so that "git diff" (not "git diff HEAD") would
   show the local modifications.

 * Swap the order of trees in read-tree three-way merge used in
   the fallback, so that `git diff` to show the conflicts become
   more natural.

 * Describe the new option and give more examples in the documentation.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-13 16:52:37 -08:00
Junio C Hamano 19205acfc2 checkout: automerge local changes while switching branches.
When switching branches, if the working tree has a local
modification at paths that are different between current and new
branches, we refused the operation saying "cannot merge."  This
attempts to do an automerge for such paths.

This is still experimental.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-13 16:52:37 -08:00
Junio C Hamano 429608fc36 Merge fixes up to GIT 1.1.2 2006-01-13 16:51:21 -08:00
Junio C Hamano b42934d611 Fix the installation location.
The earlier change to separate $(gitexecdir) from $(bindir) had
the installation location of the git wrapper and the rest of the
commands the wrong way (right now, both of them point at the
same location so there is no real harm).

Also gitk needs to be installed in $(bindir).

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-13 16:49:02 -08:00
Michal Ostrowski 77cb17e940 Exec git programs without using PATH.
The git suite may not be in PATH (and thus programs such as
git-send-pack could not exec git-rev-list).  Thus there is a need for
logic that will locate these programs.  Modifying PATH is not
desirable as it result in behavior differing from the user's
intentions, as we may end up prepending "/usr/bin" to PATH.

- git C programs will use exec*_git_cmd() APIs to exec sub-commands.
- exec*_git_cmd() will execute a git program by searching for it in
  the following directories:
	1. --exec-path (as used by "git")
	2. The GIT_EXEC_PATH environment variable.
	3. $(gitexecdir) as set in Makefile (default value $(bindir)).
- git wrapper will modify PATH as before to enable shell scripts to
  invoke "git-foo" commands.

Ideally, shell scripts should use the git wrapper to become independent
of PATH, and then modifying PATH will not be necessary.

[jc: with minor updates after a brief review.]

Signed-off-by: Michal Ostrowski <mostrows@watson.ibm.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-13 16:49:01 -08:00
Junio C Hamano 59617ebb74 GIT 1.1.2 2006-01-13 16:47:05 -08:00
Junio C Hamano e99c2fbdda GIT 1.0.10 2006-01-13 16:39:17 -08:00
Junio C Hamano a0dfb48af7 Documentation: git-reset - interrupted workflow.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-13 13:17:55 -08:00
Junio C Hamano cb95bf488b Documentation: git-commit -a
A bit more elaboration on what "update all paths" means.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-13 12:59:21 -08:00
Junio C Hamano c884dd9a54 octopus: allow criss-cross and clarify the message when it rejects
We rejected multi-base merge situations even though we used the
same underlying multi-base git-read-tree as the resolve strategy
uses.  This was unneeded and did not add much to ensure the
merge to be truly trivial, so remove this restriction and be
more similar to what resolve does.

Also when the merge did not trivially resolve, we rejected
without stating that octopus strategy does not handle the
situation.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-13 01:40:16 -08:00
J. Bruce Fields c2bc6e404d Documentation: clarify fetch parameter descriptions.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-12 22:03:11 -08:00
Junio C Hamano 4dc00021f7 Makefile: add 'strip' target
This is not invoked by any other target (most notably, "make
install" does not), but is provided as a convenience for people
who are building from the source.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-12 21:51:23 -08:00
Junio C Hamano 87758f975b show-branch: handle [] globs as well.
Earlier only '?' and '*' signalled the command that what the
user has given is a glob pattern.  This prevented us to say:

	$ git show-branch 'v0.99.[0-3]'

Now we notice '[' as well, so the above would work.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-11 15:36:07 -08:00
Junio C Hamano 2c817df25d name-rev: do not omit leading components of ref name.
In a repository with mainto/1.0 (to keep maintaining the 1.0.X
series) and fixo/1.0 (to keep fixes that apply to both 1.0.X
series and upwards) branches, "git-name-rev mainto/1.0" answered
just "1.0" making things ambiguous.  Show refnames unambiguously
like show-branch does.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-11 14:47:20 -08:00
Junio C Hamano 4c34a2c555 git-describe: default to HEAD
This is based on the patch by Andreas Ericsson, but done slightly
differently, preferring to have separate loops -- one for options
and then arguments.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-11 13:58:32 -08:00
Junio C Hamano 8c23b6fae2 describe: do not silently ignore indescribable commits
We silently ignored indescribable commits without complaining.
Complain and die instead.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-11 13:41:25 -08:00
Junio C Hamano a94d9948da update-index: work with c-quoted name
update-index --stdin did not work with c-style quoted names even though
update-index --index-info did.  This fixes the inconsistency.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-11 13:36:45 -08:00
Tom Prince 5a25b4a66e Add git-describe to .gitignore.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-11 00:36:03 -08:00
Tom Prince 0f76f52621 Add --keep option to keep downloaded packs to git-fetch.
Signed-off-by: Tom Prince <tom.prince@ualberta.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-10 22:10:37 -08:00
Junio C Hamano cfa6d70bd4 Merge fixes up to GIT 1.1.1 2006-01-10 16:29:17 -08:00
Junio C Hamano 0de62e5985 GIT 1.0.9 2006-01-10 16:20:22 -08:00
Junio C Hamano 78ff5cf6b5 GIT 1.1.1 2006-01-10 16:19:11 -08:00
Johannes Schindelin d5a6aafc90 glossary: explain "master" and "origin"
If you are a long time git user/developer, you forget that to a new git
user, these words have not the same meaning as to you.

[jc: with updates from J. Bruce Fields.]

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-10 16:02:54 -08:00
Junio C Hamano c2bdd6afe2 show-branch: take default arguments from configuration file.
This lets showbranch.default multivalued configuration item to
be used as the default set of parameters to git-show-branch when
none is given on the command line.

I keep many topic branches (e.g. zzz/pack, net/misc) and
branches used only as a reference under subdirectories
(e.g. hold/{html,man,todo} track the same from git.git, but
clutters the show-branch output when shown along with the main
development; ko/master tracks what I have pushed out already and
refetched from the kernel.org server), and often run:

	$ git show-branch ko/master heads/*

to view only the ko/master head and branches I keep immediately
under $GIT_DIR/refs/heads.  With this change, I can have this in
my $GIT_DIR/config file:

	[showbranch]
		default = ko/master
		default = heads/*

and say

	$ git show-branch

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-09 23:49:46 -08:00
Junio C Hamano eb858c60d7 GIT-VERSION-GEN: detect dirty tree and mark the version accordingly.
If we are building from a working tree with local modifications,
mark the version accordingly.

Deliberately uses '-' to prevent RPM from being built from such
a tree.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-09 22:59:58 -08:00
H. Peter Anvin 181129d24c For release tarballs, include the proper version
When producing a release tarball, include a "version" file, which
GIT-VERSION-GEN can then use to do the right thing when building from a
tarball.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-09 20:22:26 -08:00
Junio C Hamano 5a2282de13 GIT 1.1.0 2006-01-08 14:22:19 -08:00
Yann Dirson e77f489edf Add a test for rebase when a change was picked upstream
This test exercises the standard feature that makes rebase useful.

Signed-off-by: Yann Dirson <ydirson@altern.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-08 12:33:13 -08:00
Yann Dirson b91db2707a Add a minimal test for git-cherry
This test checks that git-cherry finds the expected number of patches
in two simple cases, and then tests the new limit arguments.

[jc: collapsed two patches into one and added sleep to make sure
 the two commits would get different timestamps]

Signed-off-by: Yann Dirson <ydirson@altern.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-08 00:54:31 -08:00
Yann Dirson 77f1055ca7 Add an optional limit to git-cherry
This allows to use another commit than the merge base as a limit for
scanning patches.

[jc: part about t3500 test omitted.]

Signed-off-by: Yann Dirson <ydirson@altern.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-08 00:54:30 -08:00
Petr Baudis b21c31c9a5 git-daemon --base-path
Tommi Virtanen expressed a wish on #git to be able to use short and elegant
git URLs by making git-daemon 'root' in a given directory. This patch
implements this, causing git-daemon to interpret all paths relative to
the given base path if any is given.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-07 21:43:02 -08:00
Junio C Hamano f8f9c73c7d describe: allow more than one revs to be named.
The main loop was prepared to take more than one revs, but the actual
naming logic wad not (it used pop_most_recent_commit while forgetting
that the commit marks stay after it's done).

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-07 21:43:01 -08:00
Junio C Hamano 78c2cff61f ls-files --others --directory: test
Add a test to run with --directory option.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-07 21:34:03 -08:00
Junio C Hamano 9eafb7bad1 git-status: use ls-files --others --directory for untracked list.
This shortens "Untracked files" list by using --directory option
when running ls-files --others.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-07 21:34:03 -08:00
Junio C Hamano 0907fedbee ls-files --others --directory: give trailing slash
This adds a trailing slash to directory names in the output
when "--others --directory" option shows only untracked
directories and not their contents, to make them stand out.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-07 21:34:02 -08:00
Junio C Hamano 657907e76e ls-files --others --directory: fix a bug with index entry ordering
When both howto-index.sh and howto/make-dist.txt exist under
Documentation/ directory, dir_exists() mistakenly checked it
without the trailing slash to see if there was something under
Documentation/howto directory, and did not realize there was,
because '-' sorts earlier than '/' and cache_name_pos() finds
howto-index.sh, which is not under howto/ directory.  This
caused --others --directory to show it which was incorrect.

Check the directory name with the trailing slash, because having
an entry that has such as a prefix is what we are looking for.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-07 21:34:02 -08:00
Linus Torvalds 9518eb2629 ls-files -o: optionally skip showing the contents in "untracked" directories
Darrin Thompson notes that git-ls-files -o reports all the unknown
files it finds in a work area.  Subversion and probably other systems
"simply ignore all the files and directories inside an unknown
directory and just note the directory as unknown."

With --directory option, ls-files --others shows untracked directories
without descending into them.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-07 21:34:02 -08:00
Junio C Hamano 03febf99bc git-fetch: auto-following tags.
I added things to ls-remote so that Cogito can auto-follow tags
easily and correctly a while ago, but git-fetch did not use the
facility.  Recently added git-describe command relies on
repository keeping up-to-date set of tags, which made it much
more attractive to automatically follow tags, so we do that as
well.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-07 21:33:51 -08:00
Junio C Hamano 8fc11b5aa9 GIT 1.0.8 2006-01-07 21:32:48 -08:00
Junio C Hamano 6f2eacfeb2 mailsplit: allow empty input from stdin
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-07 21:26:30 -08:00
Junio C Hamano 013049c985 revert/cherry-pick: handle single quote in author name.
The same fix as aa66c7ec77 is
needed here.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-07 20:45:11 -08:00
Yann Dirson 5f815e5922 Fix git-format-patch usage string wrt output modes.
--stdout was not mentionned, and the description for the case where -o
was not given was thus incomplete.

Signed-off-by: Yann Dirson <ydirson@altern.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-07 18:17:38 -08:00
Yann Dirson 36071af305 Fix typo in debug stanza of t2001
Signed-off-by: Yann Dirson <ydirson@altern.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-07 18:13:44 -08:00
Junio C Hamano 3ac0ebbba4 tar-tree: finish honoring extractor's umask in git-tar-tree.
Earlier commit 38ec15a973 forgot
to apply the same principle of not forcing go-w to the base
directory when specified.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-07 15:11:11 -08:00
Junio C Hamano 8f1d2e6f49 [PATCH] Compilation: zero-length array declaration.
ISO C99 (and GCC 3.x or later) lets you write a flexible array
at the end of a structure, like this:

	struct frotz {
		int xyzzy;
		char nitfol[]; /* more */
	};

GCC 2.95 and 2.96 let you to do this with "char nitfol[0]";
unfortunately this is not allowed by ISO C90.

This declares such construct like this:

	struct frotz {
		int xyzzy;
		char nitfol[FLEX_ARRAY]; /* more */
	};

and git-compat-util.h defines FLEX_ARRAY to 0 for gcc 2.95 and
empty for others.

If you are using a C90 C compiler, you should be able
to override this with CFLAGS=-DFLEX_ARRAY=1 from the
command line of "make".

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-07 10:51:06 -08:00
Junio C Hamano 3be7098ce4 prune: do not show error from pack-redundant when no packs are found.
When there is no pack yet, git-prune leaked an error message
from "git-pack-redundant --all" which complained that there is
no pack.  Squelch the annoying message.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-07 00:29:48 -08:00
Junio C Hamano 7d0e65b892 Retire debian/ directory.
The official maintainer is keeping up-to-date quite well, and now
the older Debian is supported with backports.org, there is no reason
for me to keep debian/ directory around here.

I have not been building and publishing debs since 1.0.4 anyway.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-06 19:18:12 -08:00
Junio C Hamano 476e801111 unpack-objects: default to quiet if stderr is not a tty.
This would help cron/at jobs that run send-pack to mirror
repositories.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-06 18:53:16 -08:00
Joe English 34c99da2a4 Substitute "/" with $opt_s in tag names as well as branch names
In 'git cvsimport' changes "/" to "-" (or $opt_s) in branch names,
but not in tag names, which is inconsistent.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-06 14:27:47 -08:00