1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-11-07 09:43:00 +01:00
Find a file
Jeff King 5742c82ba7 push: don't guess at qualifying remote refs on deletion
When we try to push a ref and the right-hand side of the
refspec does not find a match, we try to create it. If it is
not fully qualified, we try to guess where it would go in
the refs hierarchy based on the left-hand source side. If
the source side is not a ref, then we give up and give a
long explanatory message.

For deletions, however, this doesn't make any sense. We
would never want to create on the remote side, and if an
unqualified ref can't be matched, it is simply an error. The
current code handles this already because the left-hand side
is empty, and therefore does not give us a hint as to where
the right-hand side should go, and we properly error out.
Unfortunately, the error message is the long "we tried to
qualify this, but the source side didn't let us guess"
message, which is quite confusing.

Instead, we can just be more succinct and say "we can't
delete this because we couldn't find it". So before:

  $ git push origin :bogus
  error: unable to push to unqualified destination: bogus
  The destination refspec neither matches an existing ref on the remote nor
  begins with refs/, and we are unable to guess a prefix based on the source ref.
  error: failed to push some refs to '$URL'

and now:

  $ git push origin :bogus
  error: unable to delete 'bogus': remote ref does not exist
  error: failed to push some refs to '$URL'

It is tempting to also catch a fully-qualified ref like
"refs/heads/bogus" and generate the same error message.
However, that currently does not error out at all, and
instead gets sent to the remote side, which typically
generates a warning:

  $ git push origin:refs/heads/bogus
  remote: warning: Deleting a non-existent ref.
  To $URL
   - [deleted]         bogus

While it would be nice to catch this error early, a
client-side error would mean aborting the push entirely and
changing push's exit code. For example, right now you can
do:

  $ git push origin refs/heads/foo refs/heads/bar

and end up in a state where "foo" and "bar" are deleted,
whether both of them currently exist or not (and see an
error only if we actually failed to contact the server).
Generating an error would cause a regression for this use
case.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-07-03 12:29:42 -07:00
block-sha1
builtin Merge branch 'js/maint-fast-export-mark-error' into maint 2012-06-17 14:00:03 -07:00
compat Merge branch 'jk/run-command-eacces' into maint 2012-04-26 10:51:41 -07:00
contrib osxkeychain: pull make config from top-level directory 2012-05-24 10:35:40 -07:00
Documentation Git 1.7.10.5 2012-06-17 14:04:15 -07:00
git-gui
git_remote_helpers
gitk-git Merge branch 'pt/gitk' 2012-04-02 15:06:25 -07:00
gitweb correct a few doubled-word nits in comments and documentation 2012-03-28 11:18:35 -07:00
mergetools mergetools: add a plug-in to support DeltaWalker 2012-03-05 09:31:47 -08:00
perl correct spelling: an URL -> a URL 2012-03-28 08:47:23 -07:00
po Update Swedish translation (728t0f0u) 2012-05-29 09:28:34 +01:00
ppc
t Merge branch 'ef/maint-rebase-error-message' into maint 2012-06-03 15:52:18 -07:00
templates
vcs-svn
xdiff Merge branch 'jc/diff-algo-cleanup' into maint 2012-05-11 11:19:27 -07:00
.gitattributes
.gitignore
.mailmap .mailmap: unify various old mail addresses of gitster 2012-03-23 14:40:39 -07:00
abspath.c
aclocal.m4
advice.c push: Provide situational hints for non-fast-forward errors 2012-03-19 21:42:06 -07:00
advice.h push: Provide situational hints for non-fast-forward errors 2012-03-19 21:42:06 -07:00
alias.c
alloc.c
archive-tar.c
archive-zip.c
archive.c
archive.h
argv-array.c argv-array: add a new "pushl" method 2012-04-18 16:16:38 -07:00
argv-array.h argv-array: add a new "pushl" method 2012-04-18 16:16:38 -07:00
attr.c
attr.h correct a few doubled-word nits in comments and documentation 2012-03-28 11:18:35 -07:00
base85.c
bisect.c
bisect.h rev-list: fix --verify-objects --quiet becoming --objects 2012-02-28 10:47:30 -08:00
blob.c
blob.h
branch.c
branch.h
builtin.h
bulk-checkin.c
bulk-checkin.h
bundle.c Sync with 1.7.8.6 2012-04-26 10:22:20 -07:00
bundle.h
cache-tree.c
cache-tree.h
cache.h Merge branch 'hv/submodule-alt-odb' into maint 2012-05-25 11:26:38 -07:00
check-builtins.sh
check-racy.c
check_bindir
color.c
color.h
combine-diff.c Merge branch 'rs/combine-diff-zero-context-at-the-beginning' into maint 2012-04-26 10:35:26 -07:00
command-list.txt
commit.c
commit.h Merge branch 'jk/maint-reflog-walk-count-vs-time' into maint 2012-05-14 11:46:16 -07:00
config.c Merge branch 'mm/include-userpath' into maint 2012-05-10 10:33:05 -07:00
config.mak.in
configure.ac configure: allow user to prevent $PATH "sanitization" on Solaris 2012-03-09 11:39:51 -08:00
connect.c
connected.c fetch/receive: remove over-pessimistic connectivity check 2012-03-15 15:23:17 -07:00
connected.h
convert.c Merge branch 'jk/maint-avoid-streaming-filtered-contents' into maint 2012-03-04 22:16:40 -08:00
convert.h
copy.c
COPYING
credential-cache--daemon.c
credential-cache.c
credential-store.c
credential.c
credential.h
csum-file.c
csum-file.h
ctype.c Merge branch 'jc/pickaxe-ignore-case' 2012-03-07 12:12:59 -08:00
daemon.c
date.c
decorate.c
decorate.h
delta.h
diff-delta.c
diff-lib.c
diff-no-index.c diff --no-index: don't leak buffers in queue_diff 2012-05-16 11:18:06 -07:00
diff.c Merge branch 'jc/diff-algo-cleanup' into maint 2012-05-11 11:19:27 -07:00
diff.h Merge branch 'jc/diff-algo-cleanup' into maint 2012-05-11 11:19:27 -07:00
diffcore-break.c
diffcore-delta.c
diffcore-order.c
diffcore-pickaxe.c pickaxe: allow -i to search in patch case-insensitively 2012-02-28 16:15:29 -08:00
diffcore-rename.c teach diffcore-rename to optionally ignore empty content 2012-03-23 13:52:49 -07:00
diffcore.h
dir.c clean: preserve nested git worktree in subdirectories 2012-03-15 11:25:34 -07:00
dir.h remove_dir_recursively(): Add flag for skipping removal of toplevel dir 2012-03-15 11:12:25 -07:00
editor.c
entry.c
environment.c push: Provide situational hints for non-fast-forward errors 2012-03-19 21:42:06 -07:00
exec_cmd.c run-command: treat inaccessible directories as ENOENT 2012-04-05 16:24:13 -07:00
exec_cmd.h
fast-import.c fast-import: tighten parsing of datarefs 2012-04-10 14:34:02 -07:00
fetch-pack.h fetch-pack: new --stdin option to read refs from stdin 2012-04-02 13:47:15 -07:00
fixup-builtins
fmt-merge-msg.h
fsck.c
fsck.h
generate-cmdlist.sh
gettext.c
gettext.h
git-add--interactive.perl add--interactive: ignore unmerged entries in patch mode 2012-04-05 09:01:03 -07:00
git-am.sh am: officially deprecate -b/--binary option 2012-03-13 12:21:04 -07:00
git-archimport.perl
git-bisect.sh
git-compat-util.h Merge branch 'jc/pickaxe-ignore-case' 2012-03-07 12:12:59 -08:00
git-cvsexportcommit.perl
git-cvsimport.perl
git-cvsserver.perl
git-difftool--helper.sh
git-difftool.perl
git-filter-branch.sh
git-instaweb.sh
git-lost-found.sh
git-merge-octopus.sh
git-merge-one-file.sh
git-merge-resolve.sh
git-mergetool--lib.sh
git-mergetool.sh
git-parse-remote.sh Make git-{pull,rebase} message without tracking information friendlier 2012-03-04 23:00:57 -08:00
git-pull.sh Make git-{pull,rebase} message without tracking information friendlier 2012-03-04 23:00:57 -08:00
git-quiltimport.sh
git-rebase--am.sh
git-rebase--interactive.sh Merge branch 'nl/rebase-i-cheat-sheet' into maint 2012-05-10 10:29:14 -07:00
git-rebase--merge.sh
git-rebase.sh Do not autosquash in case of an implied interactive rebase 2012-06-17 14:01:42 -07:00
git-relink.perl Consistently use perl from /usr/bin/ for scripts 2012-05-01 13:32:17 -07:00
git-remote-testgit.py git-remote-testgit: fix race when spawning fast-import 2012-04-24 14:54:24 -07:00
git-repack.sh gc: do not explode objects which will be immediately pruned 2012-04-11 11:09:49 -07:00
git-request-pull.sh
git-send-email.perl
git-sh-i18n.sh i18n: fix auto detection of gettext scheme for shell scripts 2012-03-12 14:41:15 -07:00
git-sh-setup.sh
git-stash.sh stash: use eval_gettextln correctly 2012-04-14 16:31:02 -07:00
git-submodule.sh Avoid bug in Solaris xpg4/sed as used in submodule 2012-04-09 14:49:32 -07:00
git-svn.perl Merge branch 'jk/maint-gitweb-test-use-sane-perl' into maint 2012-05-07 13:17:31 -07:00
GIT-VERSION-GEN Git 1.7.10.5 2012-06-17 14:04:15 -07:00
git-web--browse.sh
git.c
git.spec.in spec: add missing build dependency 2012-04-06 10:15:11 -07:00
gpg-interface.c
gpg-interface.h
graph.c Add output_prefix_length to diff_options 2012-04-16 11:28:30 -07:00
graph.h
grep.c Merge branch 'rs/maint-grep-F' into maint 2012-06-01 13:01:41 -07:00
grep.h Merge branch 'rs/maint-grep-F' into maint 2012-06-01 13:01:41 -07:00
hash.c
hash.h
help.c
help.h
hex.c
http-backend.c http-backend: respect existing GIT_COMMITTER_* variables 2012-03-30 09:13:02 -07:00
http-fetch.c
http-push.c
http-walker.c
http.c http: use newer curl options for setting credentials 2012-04-14 16:04:25 -07:00
http.h correct spelling: an URL -> a URL 2012-03-28 08:47:23 -07:00
ident.c fix off-by-one error in split_ident_line 2012-05-22 11:24:11 -07:00
imap-send.c
INSTALL
kwset.c
kwset.h
levenshtein.c
levenshtein.h
LGPL-2.1
list-objects.c
list-objects.h
ll-merge.c
ll-merge.h
lockfile.c
log-tree.c Merge branch 'jk/maint-reflog-walk-count-vs-time' into maint 2012-05-14 11:46:16 -07:00
log-tree.h
mailmap.c
mailmap.h
Makefile Merge branch 'ef/http-o-depends-on-gvf' into maint 2012-06-01 13:22:44 -07:00
match-trees.c
merge-file.c
merge-file.h
merge-recursive.c Merge branch 'jc/diff-algo-cleanup' into maint 2012-05-11 11:19:27 -07:00
merge-recursive.h
name-hash.c
notes-cache.c
notes-cache.h
notes-merge.c notes-merge: Don't remove .git/NOTES_MERGE_WORKTREE; it may be the user's cwd 2012-03-15 11:13:23 -07:00
notes-merge.h
notes.c
notes.h
object.c
object.h
pack-check.c
pack-refs.c
pack-refs.h
pack-revindex.c
pack-revindex.h
pack-write.c
pack.h
pager.c
parse-options-cb.c
parse-options.c parse-options: typo check for unknown switches 2012-03-04 18:28:59 -08:00
parse-options.h parse-options: remove PARSE_OPT_NEGHELP 2012-02-28 11:48:11 -08:00
patch-delta.c
patch-ids.c
patch-ids.h
path.c
pkt-line.c
pkt-line.h
preload-index.c
pretty.c Merge branch 'jk/pretty-commit-header-incomplete-line' into maint 2012-06-01 13:01:33 -07:00
progress.c
progress.h
prompt.c
prompt.h
quote.c
quote.h
reachable.c
reachable.h
read-cache.c make is_empty_blob_sha1 available everywhere 2012-03-23 13:52:13 -07:00
README
reflog-walk.c Merge branch 'jk/maint-reflog-walk-count-vs-time' into maint 2012-05-14 11:46:16 -07:00
reflog-walk.h Merge branch 'jk/maint-reflog-walk-count-vs-time' into maint 2012-05-14 11:46:16 -07:00
refs.c
refs.h
RelNotes Git 1.7.10.5 2012-06-17 14:04:15 -07:00
remote-curl.c Merge branch 'jk/maint-push-progress' into maint 2012-05-10 10:08:54 -07:00
remote.c push: don't guess at qualifying remote refs on deletion 2012-07-03 12:29:42 -07:00
remote.h
replace_object.c
rerere.c
rerere.h
resolve-undo.c
resolve-undo.h
revision.c cherry-pick: do not expect file arguments 2012-04-15 13:33:31 -07:00
revision.h cherry-pick: do not expect file arguments 2012-04-15 13:33:31 -07:00
run-command.c Merge branch 'jk/run-command-eacces' into maint 2012-04-26 10:51:41 -07:00
run-command.h
send-pack.h
sequencer.c Merge branch 'rt/cherry-revert-conflict-summary' into maint 2012-05-07 13:13:43 -07:00
sequencer.h
server-info.c
setup.c properly keep track of current working directory 2012-04-15 13:28:02 -07:00
sh-i18n--envsubst.c
sha1-array.c
sha1-array.h
sha1-lookup.c
sha1-lookup.h
sha1_file.c teach add_submodule_odb() to look for alternates 2012-05-14 11:56:42 -07:00
sha1_name.c
shallow.c
shell.c
shortlog.h
show-index.c
sideband.c
sideband.h
sigchain.c
sigchain.h
strbuf.c Merge branch 'tr/maint-bundle-long-subject' into maint 2012-03-04 22:16:30 -08:00
strbuf.h Merge branch 'tr/maint-bundle-long-subject' into maint 2012-03-04 22:16:30 -08:00
streaming.c
streaming.h
string-list.c
string-list.h
submodule.c teach add_submodule_odb() to look for alternates 2012-05-14 11:56:42 -07:00
submodule.h submodule: fix prototype of gitmodules_config 2012-04-10 12:27:54 -07:00
symlinks.c Add threaded versions of functions in symlinks.c. 2012-03-02 23:56:28 -08:00
tag.c
tag.h
tar.h
test-chmtime.c
test-credential.c
test-ctype.c
test-date.c
test-delta.c
test-dump-cache-tree.c
test-genrandom.c
test-index-version.c
test-line-buffer.c
test-match-trees.c
test-mktemp.c
test-parse-options.c
test-path-utils.c
test-run-command.c
test-scrap-cache-tree.c
test-sha1.c
test-sha1.sh
test-sigchain.c
test-subprocess.c test-subprocess: fix segfault without arguments 2012-04-10 12:28:20 -07:00
test-svn-fe.c
thread-utils.c
thread-utils.h
trace.c
transport-helper.c Merge branch 'sp/smart-http-failure-to-push' into maint 2012-03-04 22:16:33 -08:00
transport.c Merge branch 'ct/advise-push-default' into maint 2012-05-11 11:18:43 -07:00
transport.h clean up struct ref's nonfastforward field 2012-03-26 12:59:04 -07:00
tree-diff.c
tree-walk.c
tree-walk.h
tree.c
tree.h
unimplemented.sh
unix-socket.c
unix-socket.h
unpack-trees.c Consistently use "superproject" instead of "supermodule" 2012-05-20 14:58:38 -07:00
unpack-trees.h
upload-pack.c
url.c
url.h
usage.c
userdiff.c
userdiff.h
utf8.c
utf8.h
walker.c
walker.h
wrap-for-bin.sh
wrapper.c
write_or_die.c
ws.c
wt-status.c status: respect "-b" for porcelain format 2012-05-08 04:51:08 -04:00
wt-status.h status: respect "-b" for porcelain format 2012-05-08 04:51:08 -04:00
xdiff-interface.c
xdiff-interface.h
zlib.c

////////////////////////////////////////////////////////////////

	GIT - the stupid content tracker

////////////////////////////////////////////////////////////////

"git" can mean anything, depending on your mood.

 - random three-letter combination that is pronounceable, and not
   actually used by any common UNIX command.  The fact that it is a
   mispronunciation of "get" may or may not be relevant.
 - stupid. contemptible and despicable. simple. Take your pick from the
   dictionary of slang.
 - "global information tracker": you're in a good mood, and it actually
   works for you. Angels sing, and a light suddenly fills the room.
 - "goddamn idiotic truckload of sh*t": when it breaks

Git is a fast, scalable, distributed revision control system with an
unusually rich command set that provides both high-level operations
and full access to internals.

Git is an Open Source project covered by the GNU General Public License.
It was originally written by Linus Torvalds with help of a group of
hackers around the net. It is currently maintained by Junio C Hamano.

Please read the file INSTALL for installation instructions.

See Documentation/gittutorial.txt to get started, then see
Documentation/everyday.txt for a useful minimum set of commands, and
Documentation/git-commandname.txt for documentation of each command.
If git has been correctly installed, then the tutorial can also be
read with "man gittutorial" or "git help tutorial", and the
documentation of each command with "man git-commandname" or "git help
commandname".

CVS users may also want to read Documentation/gitcvs-migration.txt
("man gitcvs-migration" or "git help cvs-migration" if git is
installed).

Many Git online resources are accessible from http://git-scm.com/
including full documentation and Git related tools.

The user discussion and development of Git take place on the Git
mailing list -- everyone is welcome to post bug reports, feature
requests, comments and patches to git@vger.kernel.org (read
Documentation/SubmittingPatches for instructions on patch submission).
To subscribe to the list, send an email with just "subscribe git" in
the body to majordomo@vger.kernel.org. The mailing list archives are
available at http://marc.theaimsgroup.com/?l=git and other archival
sites.

The messages titled "A note from the maintainer", "What's in
git.git (stable)" and "What's cooking in git.git (topics)" and
the discussion following them on the mailing list give a good
reference for project status, development direction and
remaining tasks.