diff options
316 files changed, 32061 insertions, 10547 deletions
diff --git a/.gitignore b/.gitignore index efa8db0035..6b1fd1bfb0 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ /git-cat-file /git-check-attr /git-check-ignore +/git-check-mailmap /git-check-ref-format /git-checkout /git-checkout-index @@ -5,99 +5,242 @@ # same person appearing not to be so. # +<nico@fluxnic.net> <nico@cam.org> +Alejandro R. Sedeño <asedeno@MIT.EDU> <asedeno@mit.edu> Alex Bennée <kernel-hacker@bennee.com> +Alex Riesen <raa.lkml@gmail.com> <fork0@t-online.de> +Alex Riesen <raa.lkml@gmail.com> <raa@limbo.localdomain> +Alex Riesen <raa.lkml@gmail.com> <raa@steel.home> +Alex Vandiver <alex@chmrr.net> <alexmv@MIT.EDU> Alexander Gavrilov <angavrilov@gmail.com> +Alexey Shumkin <alex.crezoff@gmail.com> <zapped@mail.ru> +Alexey Shumkin <alex.crezoff@gmail.com> <Alex.Crezoff@gmail.com> +Anders Kaseorg <andersk@MIT.EDU> <andersk@ksplice.com> +Anders Kaseorg <andersk@MIT.EDU> <andersk@mit.edu> Aneesh Kumar K.V <aneesh.kumar@gmail.com> -Brian M. Carlson <sandals@crustytoothpaste.ath.cx> +Amos Waterland <apw@debian.org> <apw@rossby.metr.ou.edu> +Amos Waterland <apw@debian.org> <apw@us.ibm.com> +Ben Walton <bdwalton@gmail.com> <bwalton@artsci.utoronto.ca> +Benoit Sigoure <tsunanet@gmail.com> <tsuna@lrde.epita.fr> +Bernt Hansen <bernt@norang.ca> <bernt@alumni.uwaterloo.ca> +Brandon Casey <drafnel@gmail.com> <casey@nrlssc.navy.mil> +brian m. carlson <sandals@crustytoothpaste.ath.cx> Brian M. Carlson <sandals@crustytoothpaste.ath.cx> +brian m. carlson <sandals@crustytoothpaste.ath.cx> <sandals@crustytoothpaste.net> +Bryan Larsen <bryan@larsen.st> <bryan.larsen@gmail.com> +Bryan Larsen <bryan@larsen.st> <bryanlarsen@yahoo.com> Cheng Renquan <crquan@gmail.com> Chris Shoemaker <c.shoemaker@cox.net> +Chris Wright <chrisw@sous-sol.org> <chrisw@osdl.org> +Cord Seele <cowose@gmail.com> <cowose@googlemail.com> +Christian Stimming <stimming@tuhh.de> <chs@ckiste.goetheallee> +Csaba Henk <csaba@gluster.com> <csaba@lowlife.hu> Dan Johnson <computerdruid@gmail.com> -Dana L. How <danahow@gmail.com> -Dana L. How <how@deathvalley.cswitch.com> +Dana L. How <danahow@gmail.com> <how@deathvalley.cswitch.com> +Dana L. How <danahow@gmail.com> Dana How Daniel Barkalow <barkalow@iabervon.org> +Daniel Trstenjak <daniel.trstenjak@gmail.com> <daniel.trstenjak@online.de> +Daniel Trstenjak <daniel.trstenjak@gmail.com> <trsten@science-computing.de> +David Brown <git@davidb.org> <davidb@quicinc.com> David D. Kilzer <ddkilzer@kilzer.net> David KÃ¥gedal <davidk@lysator.liu.se> +David Reiss <dreiss@facebook.com> <dreiss@dreiss-vmware.(none)> David S. Miller <davem@davemloft.net> Deskin Miller <deskinm@umich.edu> Dirk Süsserott <newsletter@dirk.my1.cc> +Eric Blake <eblake@redhat.com> <ebb9@byu.net> +Eric Hanchrow <eric.hanchrow@gmail.com> <offby1@blarg.net> Eric S. Raymond <esr@thyrsus.com> Erik Faye-Lund <kusmabite@gmail.com> <kusmabite@googlemail.com> -Fredrik Kuivinen <freku045@student.liu.se> +Eyvind Bernhardsen <eyvind.bernhardsen@gmail.com> <eyvind-git@orakel.ntnu.no> +Florian Achleitner <florian.achleitner.2.6.31@gmail.com> <florian.achleitner2.6.31@gmail.com> +Franck Bui-Huu <vagabon.xyz@gmail.com> <fbuihuu@gmail.com> +Frank Lichtenheld <frank@lichtenheld.de> <djpig@debian.org> +Frank Lichtenheld <frank@lichtenheld.de> <flichtenheld@astaro.com> +Fredrik Kuivinen <frekui@gmail.com> <freku045@student.liu.se> Frédéric Heitzmann <frederic.heitzmann@gmail.com> +Garry Dolley <gdolley@ucla.edu> <gdolley@arpnetworks.com> +Greg Price <price@mit.edu> <price@MIT.EDU> +Greg Price <price@mit.edu> <price@ksplice.com> +Heiko Voigt <hvoigt@hvoigt.net> <git-list@hvoigt.net> H. Merijn Brand <h.m.brand@xs4all.nl> H.Merijn Brand <h.m.brand@xs4all.nl> -H. Peter Anvin <hpa@bonde.sc.orionmulti.com> -H. Peter Anvin <hpa@tazenda.sc.orionmulti.com> -H. Peter Anvin <hpa@trantor.hos.anvin.org> +H. Peter Anvin <hpa@zytor.com> <hpa@bonde.sc.orionmulti.com> +H. Peter Anvin <hpa@zytor.com> <hpa@smyrno.hos.anvin.org> +H. Peter Anvin <hpa@zytor.com> <hpa@tazenda.sc.orionmulti.com> +H. Peter Anvin <hpa@zytor.com> <hpa@trantor.hos.anvin.org> +Han-Wen Nienhuys <hanwen@google.com> Han-Wen Nienhuys <hanwen@xs4all.nl> Horst H. von Brand <vonbrand@inf.utfsm.cl> -Ä°smail Dönmez <ismail@pardus.org.tr> +J. Bruce Fields <bfields@citi.umich.edu> <bfields@fieldses.org> +J. Bruce Fields <bfields@citi.umich.edu> <bfields@pig.linuxdev.us.dell.com> +J. Bruce Fields <bfields@citi.umich.edu> <bfields@puzzle.fieldses.org> Jakub NarÄ™bski <jnareb@gmail.com> -Jay Soffian <jaysoffian+git@gmail.com> +James Y Knight <jknight@itasoftware.com> <foom@fuhm.net> +# The 2 following authors are probably the same person, +# but both emails bounce. +Jason McMullan <jason.mcmullan@timesys.com> +Jason McMullan <mcmullan@netapp.com> +Jason Riedy <ejr@eecs.berkeley.edu> <ejr@EECS.Berkeley.EDU> +Jason Riedy <ejr@eecs.berkeley.edu> <ejr@cs.berkeley.edu> +Jay Soffian <jaysoffian@gmail.com> <jaysoffian+git@gmail.com> Jeff King <peff@peff.net> <peff@github.com> +Jeff Muizelaar <jmuizelaar@mozilla.com> <jeff@infidigm.net> +Jens Axboe <axboe@kernel.dk> <axboe@suse.de> +Jens Axboe <axboe@kernel.dk> <jens.axboe@oracle.com> +Jim Meyering <jim@meyering.net> <meyering@redhat.com> Joachim Berdal Haga <cjhaga@fys.uio.no> -Johannes Sixt <j6t@kdbg.org> <johannes.sixt@telecom.at> -Johannes Sixt <j6t@kdbg.org> <j.sixt@viscovery.net> +Johannes Schindelin <Johannes.Schindelin@gmx.de> <johannes.schindelin@gmx.de> Johannes Sixt <j6t@kdbg.org> <J.Sixt@eudaptics.com> -Jon Loeliger <jdl@freescale.com> -Jon Seymour <jon@blackcubes.dyndns.org> -Jonathan Nieder <jrnieder@uchicago.edu> +Johannes Sixt <j6t@kdbg.org> <j.sixt@viscovery.net> +Johannes Sixt <j6t@kdbg.org> <johannes.sixt@telecom.at> +John 'Warthog9' Hawley <warthog9@kernel.org> <warthog9@eaglescrag.net> +Jon Loeliger <jdl@jdl.com> <jdl@freescale.com> +Jon Loeliger <jdl@jdl.com> <jdl@freescale.org> +Jon Seymour <jon.seymour@gmail.com> <jon@blackcubes.dyndns.org> +Jonathan Nieder <jrnieder@gmail.com> <jrnieder@uchicago.edu> +Jonathan del Strother <jon.delStrother@bestbefore.tv> <maillist@steelskies.com> +Josh Triplett <josh@joshtriplett.org> <josh@freedesktop.org> +Josh Triplett <josh@joshtriplett.org> <josht@us.ibm.com> +Julian Phillips <julian@quantumfyre.co.uk> <jp3@quantumfyre.co.uk> Junio C Hamano <gitster@pobox.com> <gitster@pobox.com> -Junio C Hamano <gitster@pobox.com> <junio@pobox.com> -Junio C Hamano <gitster@pobox.com> <junio@twinsun.com> -Junio C Hamano <gitster@pobox.com> <junkio@twinsun.com> Junio C Hamano <gitster@pobox.com> <junio@hera.kernel.org> Junio C Hamano <gitster@pobox.com> <junio@kernel.org> +Junio C Hamano <gitster@pobox.com> <junio@pobox.com> +Junio C Hamano <gitster@pobox.com> <junio@twinsun.com> Junio C Hamano <gitster@pobox.com> <junkio@cox.net> -Karl Hasselström <kha@treskal.com> -Kevin Leung <kevinlsk@gmail.com> +Junio C Hamano <gitster@pobox.com> <junkio@twinsun.com> +Karl Wiberg <kha@treskal.com> Karl Hasselström +Karl Wiberg <kha@treskal.com> <kha@yoghurt.hemma.treskal.com> +Karsten Blees <blees@dcon.de> <karsten.blees@dcon.de> +Karsten Blees <blees@dcon.de> <karsten.blees@gmail.com> +Kay Sievers <kay.sievers@vrfy.org> <kay.sievers@suse.de> +Kay Sievers <kay.sievers@vrfy.org> <kay@mam.(none)> +Keith Cascio <keith@CS.UCLA.EDU> <keith@cs.ucla.edu> Kent Engstrom <kent@lysator.liu.se> +Kevin Leung <kevinlsk@gmail.com> +Kirill Smelkov <kirr@navytux.spb.ru> <kirr@landau.phys.spbu.ru> +Kirill Smelkov <kirr@navytux.spb.ru> <kirr@mns.spb.ru> +Knut Franke <Knut.Franke@gmx.de> <k.franke@science-computing.de> Lars Doelle <lars.doelle@on-line ! de> Lars Doelle <lars.doelle@on-line.de> +Lars Noschinski <lars@public.noschinski.de> <lars.noschinski@rwth-aachen.de> Li Hong <leehong@pku.edu.cn> -Linus Torvalds <torvalds@linux-foundation.org> <torvalds@woody.linux-foundation.org> -Linus Torvalds <torvalds@linux-foundation.org> <torvalds@osdl.org> -Linus Torvalds <torvalds@linux-foundation.org> <torvalds@g5.osdl.org> Linus Torvalds <torvalds@linux-foundation.org> <torvalds@evo.osdl.org> -Linus Torvalds <torvalds@linux-foundation.org> <torvalds@ppc970.osdl.org> +Linus Torvalds <torvalds@linux-foundation.org> <torvalds@g5.osdl.org> +Linus Torvalds <torvalds@linux-foundation.org> <torvalds@osdl.org> Linus Torvalds <torvalds@linux-foundation.org> <torvalds@ppc970.osdl.org.(none)> -Lukas Sandström <lukass@etek.chalmers.se> +Linus Torvalds <torvalds@linux-foundation.org> <torvalds@ppc970.osdl.org> +Linus Torvalds <torvalds@linux-foundation.org> <torvalds@woody.linux-foundation.org> +Lukas Sandström <luksan@gmail.com> <lukass@etek.chalmers.se> +Marc Khouzam <marc.khouzam@ericsson.com> <marc.khouzam@gmail.com> Marc-André Lureau <marcandre.lureau@gmail.com> +Marco Costalba <mcostalba@gmail.com> <mcostalba@yahoo.it> +Mark Levedahl <mdl123@verizon.net> <mlevedahl@gmail.com> Mark Rada <marada@uwaterloo.ca> Martin Langhoff <martin@laptop.org> <martin@catalyst.net.nz> Martin von Zweigbergk <martinvonz@gmail.com> <martin.von.zweigbergk@gmail.com> +Matt Draisey <matt@draisey.ca> <mattdraisey@sympatico.ca> +Matt Kraai <kraai@ftbfs.org> <matt.kraai@amo.abbott.com> +Matt McCutchen <matt@mattmccutchen.net> <hashproduct@gmail.com> +Matthias Kestenholz <matthias@spinlock.ch> <mk@spinlock.ch> +Matthias Urlichs <matthias@urlichs.de> <smurf@kiste.(none)> +Matthias Urlichs <matthias@urlichs.de> <smurf@smurf.noris.de> Michael Coleman <tutufan@gmail.com> Michael J Gruber <git@drmicha.warpmail.net> <michaeljgruber+gmane@fastmail.fm> +Michael S. Tsirkin <mst@kernel.org> <mst@redhat.com> +Michael S. Tsirkin <mst@kernel.org> <mst@mellanox.co.il> +Michael S. Tsirkin <mst@kernel.org> <mst@dev.mellanox.co.il> Michael W. Olson <mwolson@gnu.org> +Michael Witten <mfwitten@gmail.com> <mfwitten@MIT.EDU> +Michael Witten <mfwitten@gmail.com> <mfwitten@mit.edu> +Michal Rokos <michal.rokos@nextsoft.cz> <rokos@nextsoft.cz> Michele Ballabio <barra_cuda@katamail.com> -Nanako Shiraishi <nanako3@bluebottle.com> +Miklos Vajna <vmiklos@frugalware.org> <vmiklos@suse.cz> +Namhyung Kim <namhyung@gmail.com> <namhyung.kim@lge.com> +Namhyung Kim <namhyung@gmail.com> <namhyung@kernel.org> +Nanako Shiraishi <nanako3@lavabit.com> <nanako3@bluebottle.com> Nanako Shiraishi <nanako3@lavabit.com> +Nelson Elhage <nelhage@mit.edu> <nelhage@MIT.EDU> +Nelson Elhage <nelhage@mit.edu> <nelhage@ksplice.com> Nguyá»…n Thái Ngá»c Duy <pclouds@gmail.com> -<nico@fluxnic.net> <nico@cam.org> -Peter Krefting <peter@softwolves.pp.se> <peter@svarten.intern.softwolves.pp.se> +Nick Stokoe <nick@noodlefactory.co.uk> Nick Woolley <nick@noodlefactory.co.uk> +Nick Stokoe <nick@noodlefactory.co.uk> Nick Woolley <nickwoolley@yahoo.co.uk> +Nicolas Morey-Chaisemartin <devel-git@morey-chaisemartin.com> <nicolas.morey@free.fr> +Nicolas Morey-Chaisemartin <devel-git@morey-chaisemartin.com> <nmorey@kalray.eu> +Nicolas Sebrecht <nicolas.s.dev@gmx.fr> <ni.s@laposte.net> +Paolo Bonzini <bonzini@gnu.org> <paolo.bonzini@lu.unisi.ch> +Pascal Obry <pascal@obry.net> <pascal.obry@gmail.com> +Pascal Obry <pascal@obry.net> <pascal.obry@wanadoo.fr> +Pat Notz <patnotz@gmail.com> <pknotz@sandia.gov> +Paul Mackerras <paulus@samba.org> <paulus@dorrigo.(none)> +Paul Mackerras <paulus@samba.org> <paulus@pogo.(none)> +Peter Baumann <waste.manager@gmx.de> <Peter.B.Baumann@stud.informatik.uni-erlangen.de> +Peter Baumann <waste.manager@gmx.de> <siprbaum@stud.informatik.uni-erlangen.de> Peter Krefting <peter@softwolves.pp.se> <peter@softwolves.pp.se> +Peter Krefting <peter@softwolves.pp.se> <peter@svarten.intern.softwolves.pp.se> Petr Baudis <pasky@ucw.cz> <pasky@suse.cz> +Petr Baudis <pasky@ucw.cz> <xpasky@machine> +Phil Hord <hordp@cisco.com> <phil.hord@gmail.com> +Philip Jägenstedt <philip@foolip.org> <philip.jagenstedt@gmail.com> +Philipp A. Hartmann <pah@qo.cx> <ph@sorgh.de> Philippe Bruhat <book@cpan.org> Ralf Thielow <ralf.thielow@gmail.com> <ralf.thielow@googlemail.com> Ramsay Allan Jones <ramsay@ramsay1.demon.co.uk> -René Scharfe <rene.scharfe@lsrfire.ath.cx> +René Scharfe <l.s.r@web.de> <rene.scharfe@lsrfire.ath.cx> Robert Fitzsimons <robfitz@273k.net> +Robert Shearman <robertshearman@gmail.com> <rob@codeweavers.com> Robert Zeh <robert.a.zeh@gmail.com> -Sam Vilain <sam@vilain.net> -Santi Béjar <sbejar@gmail.com> +Robin Rosenberg <robin.rosenberg@dewire.com> <robin.rosenberg.lists@dewire.com> +Rutger Nijlunsing <rutger.nijlunsing@gmail.com> <rutger@nospam.com> +Rutger Nijlunsing <rutger.nijlunsing@gmail.com> <git@tux.tmfweb.nl> +Ryan Anderson <ryan@michonline.com> <rda@google.com> +Salikh Zakirov <salikh.zakirov@gmail.com> <Salikh.Zakirov@Intel.com> +Sam Vilain <sam@vilain.net> <sam.vilain@catalyst.net.nz> +Sam Vilain <sam@vilain.net> sam@vilain.net +Santi Béjar <santi@agolina.net> <sbejar@gmail.com> Sean Estabrooks <seanlkml@sympatico.ca> +Sebastian Schuberth <sschuberth@gmail.com> <sschuberth@visageimaging.com> +Seth Falcon <seth@userprimary.net> <sfalcon@fhcrc.org> Shawn O. Pearce <spearce@spearce.org> -Steven Grimm <koreth@midwinter.com> +Simon Hausmann <hausmann@kde.org> <simon@lst.de> +Simon Hausmann <hausmann@kde.org> <shausman@trolltech.com> +Stefan Naewe <stefan.naewe@gmail.com> <stefan.naewe@atlas-elektronik.com> +Stefan Naewe <stefan.naewe@gmail.com> <stefan.naewe@googlemail.com> +Stefan Sperling <stsp@elego.de> <stsp@stsp.name> +Å tÄ›pán NÄ›mec <stepnem@gmail.com> <stepan.nemec@gmail.com> +Stephen Boyd <bebarino@gmail.com> <sboyd@codeaurora.org> +Steven Drake <sdrake@xnet.co.nz> <sdrake@ihug.co.nz> +Steven Grimm <koreth@midwinter.com> <sgrimm@sgrimm-mbp.local> +Steven Grimm <koreth@midwinter.com> koreth@midwinter.com +Steven Walter <stevenrwalter@gmail.com> <swalter@lexmark.com> +Steven Walter <stevenrwalter@gmail.com> <swalter@lpdev.prtdev.lexmark.com> +Sven Verdoolaege <skimo@kotnet.org> <Sven.Verdoolaege@cs.kuleuven.ac.be> +Sven Verdoolaege <skimo@kotnet.org> <skimo@liacs.nl> Tay Ray Chuan <rctay89@gmail.com> +Ted Percival <ted@midg3t.net> <ted.percival@quest.com> Theodore Ts'o <tytso@mit.edu> +Thomas Ackermann <th.acker@arcor.de> <th.acker66@arcor.de> Thomas Rast <trast@inf.ethz.ch> <trast@student.ethz.ch> +Timo Hirvonen <tihirvon@gmail.com> <tihirvon@ee.oulu.fi> +Toby Allsopp <Toby.Allsopp@navman.co.nz> <toby.allsopp@navman.co.nz> +Tom Grennan <tmgrennan@gmail.com> <tgrennan@redback.com> +Tommi Virtanen <tv@debian.org> <tv@eagain.net> +Tommi Virtanen <tv@debian.org> <tv@inoi.fi> +Tommy Thorn <tommy-git@thorn.ws> <tt1729@yahoo.com> Tony Luck <tony.luck@intel.com> -Uwe Kleine-König <Uwe_Zeisberger@digi.com> -Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com> -Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de> -Uwe Kleine-König <uzeisberger@io.fsforth.de> -Uwe Kleine-König <zeisberg@informatik.uni-freiburg.de> -Ville Skyttä <scop@xemacs.org> +Tor Arne Vestbø <torarnv@gmail.com> <tavestbo@trolltech.com> +Trent Piepho <tpiepho@gmail.com> <tpiepho@freescale.com> +Trent Piepho <tpiepho@gmail.com> <xyzzy@speakeasy.org> +Uwe Kleine-König <u.kleine-koenig@pengutronix.de> <Uwe.Kleine-Koenig@digi.com> +Uwe Kleine-König <u.kleine-koenig@pengutronix.de> <ukleinek@informatik.uni-freiburg.de> +Uwe Kleine-König <u.kleine-koenig@pengutronix.de> <uzeisberger@io.fsforth.de> +Uwe Kleine-König <u.kleine-koenig@pengutronix.de> <zeisberg@informatik.uni-freiburg.de> +Ville Skyttä <ville.skytta@iki.fi> <scop@xemacs.org> Vitaly "_Vi" Shukela <public_vi@tut.by> +W. Trevor King <wking@tremily.us> <wking@drexel.edu> William Pursell <bill.pursell@gmail.com> +YONETANI Tomokazu <y0n3t4n1@gmail.com> <qhwt+git@les.ath.cx> +YONETANI Tomokazu <y0n3t4n1@gmail.com> <y0netan1@dragonflybsd.org> YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> +# the two anonymous contributors are different persons: anonymous <linux@horizon.com> anonymous <linux@horizon.net> +Ä°smail Dönmez <ismail@pardus.org.tr> diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines index 559d5f9ebf..e5ca3b75d3 100644 --- a/Documentation/CodingGuidelines +++ b/Documentation/CodingGuidelines @@ -242,6 +242,14 @@ Writing Documentation: processed into HTML and manpages (e.g. git.html and git.1 in the same directory). + The documentation liberally mixes US and UK English (en_US/UK) + norms for spelling and grammar, which is somewhat unfortunate. + In an ideal world, it would have been better if it consistently + used only one and not the other, and we would have picked en_US + (if you wish to correct the English of some of the existing + documentation, please see the documentation-related advice in the + Documentation/SubmittingPatches file). + Every user-visible change should be reflected in the documentation. The same general rule as for code applies -- imitate the existing conventions. A few commented examples follow to provide reference diff --git a/Documentation/RelNotes/1.7.10.1.txt b/Documentation/RelNotes/1.7.10.1.txt index 806a965a1b..be68524cff 100644 --- a/Documentation/RelNotes/1.7.10.1.txt +++ b/Documentation/RelNotes/1.7.10.1.txt @@ -14,7 +14,7 @@ Fixes since v1.7.10 not exclude them and tried to apply funny patches only to fail. * "git blame" started missing quite a few changes from the origin - since we stopped using the diff minimalization by default in v1.7.2 + since we stopped using the diff minimization by default in v1.7.2 era. * When PATH contains an unreadable directory, alias expansion code diff --git a/Documentation/RelNotes/1.7.5.4.txt b/Documentation/RelNotes/1.7.5.4.txt index cf3f455ced..7796df3fe4 100644 --- a/Documentation/RelNotes/1.7.5.4.txt +++ b/Documentation/RelNotes/1.7.5.4.txt @@ -5,7 +5,7 @@ Fixes since v1.7.5.3 -------------------- * The single-key mode of "git add -p" was easily fooled into thinking - that it was told to add everthing ('a') when up-arrow was pressed by + that it was told to add everything ('a') when up-arrow was pressed by mistake. * Setting a git command that uses custom configuration via "-c var=val" diff --git a/Documentation/RelNotes/1.7.8.2.txt b/Documentation/RelNotes/1.7.8.2.txt index e74f4ef1ef..b9c66aa1b7 100644 --- a/Documentation/RelNotes/1.7.8.2.txt +++ b/Documentation/RelNotes/1.7.8.2.txt @@ -12,11 +12,11 @@ Fixes since v1.7.8.1 * The configuration file parser used for sizes (e.g. bigFileThreshold) did not correctly interpret 'g' suffix. - * The replacement implemention for snprintf used on platforms with + * The replacement implementation for snprintf used on platforms with native snprintf that is broken did not use va_copy correctly. * LF-to-CRLF streaming filter replaced all LF with CRLF, which might - be techinically correct but not friendly to people who are trying + be technically correct but not friendly to people who are trying to recover from earlier mistakes of using CRLF in the repository data in the first place. It now refrains from doing so for LF that follows a CR. diff --git a/Documentation/RelNotes/1.7.8.txt b/Documentation/RelNotes/1.7.8.txt index b4d90bba0f..249311361e 100644 --- a/Documentation/RelNotes/1.7.8.txt +++ b/Documentation/RelNotes/1.7.8.txt @@ -9,7 +9,7 @@ Updates since v1.7.7 * Updates to bash completion scripts. * The build procedure has been taught to take advantage of computed - dependency automatically when the complier supports it. + dependency automatically when the compiler supports it. * The date parser now accepts timezone designators that lack minutes part and also has a colon between "hh:mm". @@ -31,7 +31,7 @@ Updates since v1.7.7 * Variants of "git cherry-pick" and "git revert" that take multiple commits learned to "--continue" and "--abort". - * "git daemon" gives more human readble error messages to clients + * "git daemon" gives more human readable error messages to clients using ERR packets when appropriate. * Errors at the network layer is logged by "git daemon". diff --git a/Documentation/RelNotes/1.8.2.1.txt b/Documentation/RelNotes/1.8.2.1.txt index 1354ad03f5..769a6fc06c 100644 --- a/Documentation/RelNotes/1.8.2.1.txt +++ b/Documentation/RelNotes/1.8.2.1.txt @@ -49,7 +49,7 @@ Fixes since v1.8.2 common prefix and suffix between the two filenames overlapped. * "git submodule update", when recursed into sub-submodules, did not - acccumulate the prefix paths. + accumulate the prefix paths. * "git am $maildir/" applied messages in an unexpected order; sort filenames read from the maildir/ in a way that is more likely to diff --git a/Documentation/RelNotes/1.8.2.2.txt b/Documentation/RelNotes/1.8.2.2.txt index dab4831ca0..708df1ae19 100644 --- a/Documentation/RelNotes/1.8.2.2.txt +++ b/Documentation/RelNotes/1.8.2.2.txt @@ -58,4 +58,4 @@ Fixes since v1.8.2.1 conflicts have been applied. * "git bundle" did not like a bundle created using a commit without - any message as its one of the prerequistes. + any message as its one of the prerequisites. diff --git a/Documentation/RelNotes/1.8.3.3.txt b/Documentation/RelNotes/1.8.3.3.txt index 04289e793c..9ba4f4da0f 100644 --- a/Documentation/RelNotes/1.8.3.3.txt +++ b/Documentation/RelNotes/1.8.3.3.txt @@ -4,6 +4,27 @@ Git v1.8.3.3 Release Notes Fixes since v1.8.3.2 -------------------- + * "git apply" parsed patches that add new files, generated by programs + other than Git, incorrectly. This is an old breakage in v1.7.11. + + * Older cURL wanted piece of memory we call it with to be stable, but + we updated the auth material after handing it to a call. + + * "git pull" into nothing trashed "local changes" that were in the + index. + + * Many "git submodule" operations did not work on a submodule at a + path whose name is not in ASCII. + + * "cherry-pick" had a small leak in its error codepath. + + * Logic used by git-send-email to suppress cc mishandled names like + "A U. Thor" <author@example.xz>, where the human readable part + needs to be quoted (the user input may not have the double quotes + around the name, and comparison was done between quoted and + unquoted strings). It also mishandled names that need RFC2047 + quoting. + * "gitweb" forgot to clear a global variable $search_regexp upon each request, mistakenly carrying over the previous search to a new one when used as a persistent CGI. diff --git a/Documentation/RelNotes/1.8.3.4.txt b/Documentation/RelNotes/1.8.3.4.txt new file mode 100644 index 0000000000..56f106e262 --- /dev/null +++ b/Documentation/RelNotes/1.8.3.4.txt @@ -0,0 +1,20 @@ +Git v1.8.3.4 Release Notes +========================== + +This update is mostly to propagate documentation fixes and test +updates from the master front back to the maintenance track. + +Fixes since v1.8.3.3 +-------------------- + + * The bisect log listed incorrect commits when bisection ends with + only skipped ones. + + * The test coverage framework was left broken for some time. + + * The test suite for HTTP transport did not run with Apache 2.4. + + * "git diff" used to fail when core.safecrlf is set and the working + tree contents had mixed CRLF/LF line endings. Committing such a + content must be prohibited, but "git diff" should help the user to + locate and fix such problems without failing. diff --git a/Documentation/RelNotes/1.8.4.txt b/Documentation/RelNotes/1.8.4.txt index 4250e5a3a9..02f681b710 100644 --- a/Documentation/RelNotes/1.8.4.txt +++ b/Documentation/RelNotes/1.8.4.txt @@ -48,6 +48,8 @@ Updates since v1.8.3 Foreign interfaces, subsystems and ports. + * Cygwin port has been updated for more recent Cygwin 1.7. + * "git rebase -i" now honors --strategy and -X options. * Git-gui has been updated to its 0.18.0 version. @@ -76,9 +78,70 @@ Foreign interfaces, subsystems and ports. * git-remote-mw (in contrib/) hints users to check the certificate, when https:// connection failed. + * git-remote-mw (in contrib/) adds a command to allow previewing the + contents locally before pushing it out, when working with a + MediaWiki remote. + UI, Workflows & Features + * Sample "post-receive-email" hook script got an enhanced replacement + "multimail" (in contrib/). + + * Also in contrib/ is a new "contacts" script that runs "git blame" + to find out the people who may be interested in a set of changes. + + * "git clean" command learned an interactive mode. + + * The "--head" option to "git show-ref" was only to add "HEAD" to the + list of candidate refs to be filtered by the usual rules + (e.g. "--heads" that only show refs under refs/heads). The meaning + of the option has been changed to always show "HEAD" regardless of + what filtering will be applied to any other ref. + + This is a backward incompatible change and might cause breakages to + people's existing scripts. + + * "git show -s" was less discoverable than it should have been. It + now has a natural synonym "git show --no-patch". + + * "git check-mailmap" is a new command that lets you map usernames + and e-mail addresses through the mailmap mechanism, just like many + built-in commands do. + + * "git name-rev" learned to name an annotated tag object back to its + tagname; "git name-rev $(git rev-parse v1.0.0)" gives "tags/v1.0.0", + for example. + + * "git cat-file --batch-check=<format>" is added, primarily to allow + on-disk footprint of objects in packfiles (often they are a lot + smaller than their true size, when expressed as deltas) to be + reported. + + * "git rebase [-i]" used to leave just "rebase" as its reflog messages + for some operations. They have been reworded to be more informative. + + * In addition to the choice from "rebase, merge, or checkout-detach", + "submodule update" can allow a custom command to be used in to + update the working tree of submodules via the "submodule.*.update" + configuration variable. + + * "git submodule update" can optionally clone the submodule + repositories shallowly. + + * "git format-patch" learned "--from[=whom]" option, which sets the + "From: " header to the specified person (or the person who runs the + command, if "=whom" part is missing) and move the original author + information to an in-body From: header as necessary. + + * The configuration variable "merge.ff" was cleary a tri-state to + choose one from "favor fast-forward when possible", "always create + a merge even when the history could fast-forward" and "do not + create any merge, only update when the history fast-forwards", but + the command line parser did not implement the usual convention of + "last one wins, and command line overrides the configuration" + correctly. + * "gitweb" learned to optionally place extra links that point at the levels higher than the Gitweb pages themselves in the breadcrumbs, so that it can be used as part of a larger installation. @@ -127,7 +190,7 @@ UI, Workflows & Features directly uses the 40-hex string as an object name, even if a ref "refs/<some hierarchy>/<name>" exists. This disambiguation order is unlikely to change, but we should warn about the ambiguity just - like we warn when more than one refs/ hierachies share the same + like we warn when more than one refs/ hierarchies share the same name. * "git rebase" learned "--[no-]autostash" option to save local @@ -135,9 +198,6 @@ UI, Workflows & Features response was to stash them and re-run). This introduced a corner case breakage to "git am --abort" but it has been fixed. - * Instead of typing four capital letters "HEAD", you can say "@" now, - e.g. "git log @". - * "check-ignore" (new feature since 1.8.2) has been updated to work more like "check-attr" over bidi-pipes. @@ -179,6 +239,24 @@ UI, Workflows & Features Performance, Internal Implementation, etc. + * On Cygwin, we used to use our own lstat(2) emulation that is + allegedly faster than the platform one in codepaths where some of + the information it returns did not matter, but it started to bite + us in a few codepaths where the trick it uses to cheat does show + breakages. This emulation has been removed and we use the native + lstat(2) emulation supplied by Cygwin now. + + * The function attributes extensions are used to catch mistakes in + use of our own variadic functions that use NULL sentinel at the end + (i.e. like execl(3)) and format strings (i.e. like printf(3)). + + * The code to allow configuration data to be read from in-tree blob + objects is in. This may help working in a bare repository and + submodule updates. + + * Fetching between repositories with many refs employed O(n^2) + algorithm to match up the common objects, which has been corrected. + * The original way to specify remote repository using .git/branches/ used to have a nifty feature. The code to support the feature was still in a function but the caller was changed not to call it 5 @@ -189,7 +267,7 @@ Performance, Internal Implementation, etc. been susceptible to lossage of refs under right conditions, which has been tightened up. - * We read loose and packed rerferences in two steps, but after + * We read loose and packed references in two steps, but after deciding to read a loose ref but before actually opening it to read it, another process racing with us can unlink it, which would cause us to barf. The codepath has been updated to retry when such a @@ -244,6 +322,35 @@ Unless otherwise noted, all the fixes since v1.8.3 in the maintenance track are contained in this release (see release notes to them for details). + * Newer Net::SMTP::SSL module does not want the user programs to use + the default behaviour to let server certificate go without + verification, so by default enable the verification with a + mechanism to turn it off if needed. + (merge 35035bb rr/send-email-ssl-verify later to maint). + + * When "git" is spawned in such a way that any of the low 3 file + descriptors is closed, our first open() may yield file descriptor 2, + and writing error message to it would screw things up in a big way. + (merge a11c396 tr/protect-low-3-fds later to maint). + + * The mailmap mechanism unnecessarily downcased the e-mail addresses + in the output, and also ignored the human name when it is a single + character name. + (merge bd23794 jc/mailmap-case-insensitivity later to maint). + + * In two places we did not check return value (expected to be a file + descriptor) correctly. + (merge a77f106 tr/fd-gotcha-fixes later to maint). + + * Logic to auto-detect character encodings in the commit log message + did not reject overlong and invalid UTF-8 characters. + (merge 81050ac bc/commit-invalid-utf8 later to maint). + + * Pass port number as a separate argument when "send-email" initializes + Net::SMTP, instead of as a part of the hostname, i.e. host:port. + This allows GSSAPI codepath to match with the hostname given. + (merge 1a741bf bc/send-email-use-port-as-separate-param later to maint). + * "git diff" refused to even show difference when core.safecrlf is set to true (i.e. error out) and there are offending lines in the working tree files. @@ -262,12 +369,6 @@ details). the user to an unexpected place. (merge 3bed291 rr/rebase-checkout-reflog later to maint). - * "git stash save", when your local change turns a tracked file into - a directory, has to remove files in that directory in order to - revert your working tree to a pristine state. This will lose - untracked files in such a directory, and the command now requires - you to "--force" it. - * The configuration variable column.ui was poorly documented. (merge 5e62cc1 rr/column-doc later to maint). @@ -278,23 +379,18 @@ details). * "git apply" parsed patches that add new files, generated by programs other than Git, incorrectly. This is an old breakage in - v1.7.11 and will need to be merged down to the maintanance tracks. - (merge 212eb96 tr/maint-apply-non-git-patch-parsefix later to maint). + v1.7.11 and will need to be merged down to the maintenance tracks. * Older cURL wanted piece of memory we call it with to be stable, but we updated the auth material after handing it to a call. - (merge a94cf2c bc/http-keep-memory-given-to-curl later to maint). * "git pull" into nothing trashed "local changes" that were in the index, and this avoids it. - (merge b4dc085 jk/pull-into-dirty-unborn later to maint). * Many "git submodule" operations do not work on a submodule at a path whose name is not in ASCII. - (merge bed9470 fg/submodule-non-ascii-path later to maint). * "cherry-pick" had a small leak in an error codepath. - (merge 706728a fc/sequencer-plug-leak later to maint). * Logic used by git-send-email to suppress cc mishandled names like "A U. Thor" <author@example.xz>, where the human readable part @@ -302,7 +398,6 @@ details). around the name, and comparison was done between quoted and unquoted strings). It also mishandled names that need RFC2047 quoting. - (merge 1495266 mt/send-email-cc-match-fix later to maint). * Call to discard_cache/discard_index (used when we use different contents of the index in-core, in many operations like commit, @@ -313,102 +408,79 @@ details). * "gitweb" forgot to clear a global variable $search_regexp upon each request, mistakenly carrying over the previous search to a new one when used as a persistent CGI. - (merge ca7a5dc cm/gitweb-project-list-persistent-cgi-fix later to maint). * The wildmatch engine did not honor WM_CASEFOLD option correctly. - (merge b79c0c3 ar/wildmatch-foldcase later to maint). * "git log -c --follow $path" segfaulted upon hitting the commit that renamed the $path being followed. - (merge 46ec510 cb/log-follow-with-combined later to maint). * When a reflog notation is used for implicit "current branch", we did not say which branch and worse said "branch ''". - (merge 305ebea rr/die-on-missing-upstream later to maint). * "difftool --dir-diff" did not copy back changes made by the end-user in the diff tool backend to the working tree in some cases. - (merge 32eaf1d ks/difftool-dir-diff-copy-fix later to maint). * "git push $there HEAD:branch" did not resolve HEAD early enough, so it was easy to flip it around while push is still going on and push out a branch that the user did not originally intended when the command was started. - (merge 0f075b2 rr/push-head later to maint). * The bash prompt code (in contrib/) displayed the name of the branch being rebased when "rebase -i/-m/-p" modes are in use, but not the plain vanilla "rebase". - (merge 1306321 fc/show-branch-in-rebase-am later to maint). * Handling of negative exclude pattern for directories "!dir" was broken in the update to v1.8.3. - (merge c3c327d kb/status-ignored-optim-2 later to maint). * zsh prompt script that borrowed from bash prompt script did not work due to slight differences in array variable notation between these two shells. - (merge d0583da tg/maint-zsh-svn-remote-prompt later to maint). * An entry for "file://" scheme in the enumeration of URL types Git can take in the HTML documentation was made into a clickable link by mistake. - (merge 4c32e36 nd/urls-doc-no-file-hyperlink-fix later to maint). * "git push --[no-]verify" was not documented. - (merge 90d32d1 tr/push-no-verify-doc later to maint). * Stop installing the git-remote-testpy script that is only used for testing. - (merge 416fda6 fc/makefile later to maint). * "git commit --allow-empty-message -m ''" should not start an editor. - (merge 2520677 rs/commit-m-no-edit later to maint). * "git merge @{-1}~22" was rewritten to "git merge frotz@{1}~22" incorrectly when your previous branch was "frotz" (it should be rewritten to "git merge frotz~22" instead). - (merge 84cf246 jc/strbuf-branchname-fix later to maint). * "git diff -c -p" was not showing a deleted line from a hunk when another hunk immediately begins where the earlier one ends. - (merge aac3857 mk/combine-diff-context-horizon-fix later to maint). * "git log --ancestry-path A...B" did not work as expected, as it did not pay attention to the fact that the merge base between A and B was the bottom of the range being specified. - (merge a765499 kb/ancestry-path-threedots later to maint). * Mac OS X does not like to write(2) more than INT_MAX number of bytes; work it around by chopping write(2) into smaller pieces. - (merge 6c642a8 fc/macos-x-clipped-write later to maint). * Newer MacOS X encourages the programs to compile and link with their CommonCrypto, not with OpenSSL. - (merge be4c828 da/darwin later to maint). * "git clone foo/bar:baz" cannot be a request to clone from a remote over git-over-ssh specified in the scp style. This case is now detected and clones from a local repository at "foo/bar:baz". - (merge 6000334 nd/clone-local-with-colon later to maint). * When $HOME is misconfigured to point at an unreadable directory, we used to complain and die. Loosen the check. - (merge 4698c8f jn/config-ignore-inaccessible later to maint). * "git subtree" (in contrib/) had one codepath with loose error checks to lose data at the remote side. - (merge 3212d56 jk/subtree-do-not-push-if-split-fails later to maint). * "git fetch" into a shallow repository from a repository that does not know about the shallow boundary commits (e.g. a different fork from the repository the current shallow repository was cloned from) did not work correctly. - (merge 71d5f93 mh/fetch-into-shallow later to maint). * "git checkout foo" DWIMs the intended "upstream" and turns it into "git checkout -t -b foo remotes/origin/foo". This codepath has been updated to correctly take existing remote definitions into account. - (merge 229177a jh/checkout-auto-tracking later to maint). diff --git a/Documentation/RelNotes/1.8.5.txt b/Documentation/RelNotes/1.8.5.txt new file mode 100644 index 0000000000..3b43a61d85 --- /dev/null +++ b/Documentation/RelNotes/1.8.5.txt @@ -0,0 +1,130 @@ +Git v1.8.5 Release Notes +======================== + +Backward compatibility notes (for Git 2.0) +------------------------------------------ + +When "git push [$there]" does not say what to push, we have used the +traditional "matching" semantics so far (all your branches were sent +to the remote as long as there already are branches of the same name +over there). In Git 2.0, the default will change to the "simple" +semantics that pushes: + + - only the current branch to the branch with the same name, and only + when the current branch is set to integrate with that remote + branch, if you are pushing to the same remote as you fetch from; or + + - only the current branch to the branch with the same name, if you + are pushing to a remote that is not where you usually fetch from. + +Use the user preference configuration variable "push.default" to +change this. If you are an old-timer who is used to the "matching" +semantics, you can set the variable to "matching" to keep the +traditional behaviour. If you want to live in the future early, you +can set it to "simple" today without waiting for Git 2.0. + +When "git add -u" (and "git add -A") is run inside a subdirectory and +does not specify which paths to add on the command line, it +will operate on the entire tree in Git 2.0 for consistency +with "git commit -a" and other commands. There will be no +mechanism to make plain "git add -u" behave like "git add -u .". +Current users of "git add -u" (without a pathspec) should start +training their fingers to explicitly say "git add -u ." +before Git 2.0 comes. A warning is issued when these commands are +run without a pathspec and when you have local changes outside the +current directory, because the behaviour in Git 2.0 will be different +from today's version in such a situation. + +In Git 2.0, "git add <path>" will behave as "git add -A <path>", so +that "git add dir/" will notice paths you removed from the directory +and record the removal. Versions before Git 2.0, including this +release, will keep ignoring removals, but the users who rely on this +behaviour are encouraged to start using "git add --ignore-removal <path>" +now before 2.0 is released. + + +Updates since v1.8.4 +-------------------- + +Foreign interfaces, subsystems and ports. + + * remote-hg remote helper misbehaved when interacting with a local Hg + repository relative to the home directory, e.g. "clone hg::~/there". + + * imap-send ported to OS X uses Apple's security framework instead of + OpenSSL one. + + * Subversion 1.8.0 that was recently released breaks older subversion + clients coming over http/https in various ways. + + * "git fast-import" treats an empty path given to "ls" as the root of + the tree. + + +UI, Workflows & Features + + * "git check-ignore -z" applied the NUL termination to both its input + (with --stdin) and its output, but "git check-attr -z" ignored the + option on the output side. Make both honor -z on the input and + output side the same way. + + * "git whatchanged" may still be used by old timers, but mention of + it in documents meant for new users will only waste readers' time + wonderig what the difference is between it and "git log". Make it + less prominent in the general part of the documentation and explain + that it is merely a "git log" with different default behaviour in + its own document. + + +Performance, Internal Implementation, etc. + + * Many commands use --dashed-option as a operation mode selector + (e.g. "git tag --delete") that the user can use at most one + (e.g. "git tag --delete --verify" is a nonsense) and you cannot + negate (e.g. "git tag --no-delete" is a nonsense). parse-options + API learned a new OPT_CMDMODE macro to make it easier to implement + such a set of options. + + * OPT_BOOLEAN() in parse-options API was misdesigned to be "counting + up" but many subcommands expect it to behave as "on/off". Update + them to use OPT_BOOL() which is a proper boolean. + + * "git gc" exits early without doing a double-work when it detects + that another instance of itself is already running. + + * Under memory pressure and/or file descriptor pressure, we used to + close pack windows that are not used and also closed filehandle to + an open but unused packfiles. These are now controlled separately + to better cope with the load. + +Also contains various documentation updates and code clean-ups. + + +Fixes since v1.8.4 +------------------ + +Unless otherwise noted, all the fixes since v1.8.4 in the maintenance +track are contained in this release (see release notes to them for +details). + + * Setting submodule.*.path configuration variable to true (without + giving "= value") caused Git to segfault. + (merge 4b05440 jl/some-submodule-config-are-not-boolean later to maint). + + * "git rebase -i" (there could be others, as the root cause is pretty + generic) fed a random, data dependeant string to 'echo' and + expects it to come out literally, corrupting its error message. + (merge 89b0230 mm/no-shell-escape-in-die-message later to maint). + + * Some people still use rather old versions of bash, which cannot + grok some constructs like 'printf -v varname' the prompt and + completion code started to use recently. + (merge a44aa69 bc/completion-for-bash-3.0 later to maint). + + * Code to read configuration from a blob object did not compile on + platforms with fgetc() etc. implemented as macros. + (merge 49d6cfa hv/config-from-blob later to maint-1.8.3). + + * The recent "short-cut clone connectivity check" topic broke a + shallow repository when a fetch operation tries to auto-follow tags. + (merge 6da8bdc nd/fetch-pack-shallow-fix later to maint-1.8.3). diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches index d0a4733e45..705557689d 100644 --- a/Documentation/SubmittingPatches +++ b/Documentation/SubmittingPatches @@ -65,7 +65,20 @@ feature does not trigger when it shouldn't. Also make sure that the test suite passes after your commit. Do not forget to update the documentation to describe the updated behaviour. -Oh, another thing. I am picky about whitespaces. Make sure your +Speaking of the documentation, it is currently a liberal mixture of US +and UK English norms for spelling and grammar, which is somewhat +unfortunate. A huge patch that touches the files all over the place +only to correct the inconsistency is not welcome, though. Potential +clashes with other changes that can result from such a patch are not +worth it. We prefer to gradually reconcile the inconsistencies in +favor of US English, with small and easily digestible patches, as a +side effect of doing some other real work in the vicinity (e.g. +rewriting a paragraph for clarity, while turning en_UK spelling to +en_US). Obvious typographical fixes are much more welcomed ("teh -> +"the"), preferably submitted as independent patches separate from +other documentation changes. + +Oh, another thing. We are picky about whitespaces. Make sure your changes do not trigger errors with the sample pre-commit hook shipped in templates/hooks--pre-commit. To help ensure this does not happen, run git diff --check on your changes before you commit. diff --git a/Documentation/blame-options.txt b/Documentation/blame-options.txt index e9f984ba01..0cebc4f692 100644 --- a/Documentation/blame-options.txt +++ b/Documentation/blame-options.txt @@ -9,10 +9,14 @@ --show-stats:: Include additional statistics at the end of blame output. --L <start>,<end>, -L :<regex>:: - Annotate only the given line range. <start> and <end> can take - one of these forms: - +-L <start>,<end>:: +-L :<regex>:: + Annotate only the given line range. May be specified multiple times. + Overlapping ranges are allowed. ++ +<start> and <end> are optional. ``-L <start>'' or ``-L <start>,'' spans from +<start> to end of file. ``-L ,<end>'' spans from start of file to <end>. ++ include::line-range-format.txt[] -l:: diff --git a/Documentation/config.txt b/Documentation/config.txt index 81856dd5a2..e8eadde305 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -213,17 +213,6 @@ The default is true, except linkgit:git-clone[1] or linkgit:git-init[1] will probe and set core.fileMode false if appropriate when the repository is created. -core.ignoreCygwinFSTricks:: - This option is only used by Cygwin implementation of Git. If false, - the Cygwin stat() and lstat() functions are used. This may be useful - if your repository consists of a few separate directories joined in - one hierarchy using Cygwin mount. If true, Git uses native Win32 API - whenever it is possible and falls back to Cygwin functions only to - handle symbol links. The native mode is more than twice faster than - normal Cygwin l/stat() functions. True by default, unless core.filemode - is true, in which case ignoreCygwinFSTricks is ignored as Cygwin's - POSIX emulation is required to support core.filemode. - core.ignorecase:: If true, this option enables various workarounds to enable Git to work better on filesystems that are not case sensitive, @@ -879,16 +868,17 @@ The values of these variables may be specified as in color.branch.<slot>. color.interactive:: When set to `always`, always use colors for interactive prompts - and displays (such as those used by "git-add --interactive"). - When false (or `never`), never. When set to `true` or `auto`, use - colors only when the output is to the terminal. Defaults to false. + and displays (such as those used by "git-add --interactive" and + "git-clean --interactive"). When false (or `never`), never. + When set to `true` or `auto`, use colors only when the output is + to the terminal. Defaults to false. color.interactive.<slot>:: - Use customized color for 'git add --interactive' - output. `<slot>` may be `prompt`, `header`, `help` or `error`, for - four distinct types of normal output from interactive - commands. The values of these variables may be specified as - in color.branch.<slot>. + Use customized color for 'git add --interactive' and 'git clean + --interactive' output. `<slot>` may be `prompt`, `header`, `help` + or `error`, for four distinct types of normal output from + interactive commands. The values of these variables may be + specified as in color.branch.<slot>. color.pager:: A boolean to enable/disable colored output when the pager is in @@ -973,6 +963,10 @@ column.branch:: Specify whether to output branch listing in `git branch` in columns. See `column.ui` for details. +column.clean:: + Specify the layout when list items in `git clean -i`, which always + shows files and directories in columns. See `column.ui` for details. + column.status:: Specify whether to output untracked files in `git status` in columns. See `column.ui` for details. @@ -1067,6 +1061,10 @@ fetch.unpackLimit:: especially on slow filesystems. If not set, the value of `transfer.unpackLimit` is used instead. +fetch.prune:: + If true, fetch will automatically behave as if the `--prune` + option was given on the command line. See also `remote.<name>.prune`. + format.attach:: Enable multipart/mixed attachments as the default for 'format-patch'. The value can also be a double quoted string @@ -1451,7 +1449,11 @@ http.cookiefile:: of the file to read cookies from should be plain HTTP headers or the Netscape/Mozilla cookie file format (see linkgit:curl[1]). NOTE that the file specified with http.cookiefile is only used as - input. No cookies will be stored in the file. + input unless http.saveCookies is set. + +http.savecookies:: + If set, store cookies received during requests to the file specified by + http.cookiefile. Has no effect if http.cookiefile is unset. http.sslVerify:: Whether to verify the SSL certificate when fetching or pushing @@ -2030,6 +2032,12 @@ remote.<name>.vcs:: Setting this to a value <vcs> will cause Git to interact with the remote with the git-remote-<vcs> helper. +remote.<name>.prune:: + When set to true, fetching from this remote by default will also + remove any remote-tracking branches which no longer exist on the + remote (as if the `--prune` option was give on the command line). + Overrides `fetch.prune` settings, if any. + remotes.<group>:: The list of remotes which are fetched by "git remote update <group>". See linkgit:git-remote[1]. @@ -2068,6 +2076,10 @@ sendemail.smtpencryption:: sendemail.smtpssl:: Deprecated alias for 'sendemail.smtpencryption = ssl'. +sendemail.smtpsslcertpath:: + Path to ca-certificates (either a directory or a single file). + Set it to an empty string to disable certificate verification. + sendemail.<identity>.*:: Identity-specific versions of the 'sendemail.*' parameters found below, taking precedence over those when the this diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt index 87e92d6537..bbed2cd79c 100644 --- a/Documentation/diff-options.txt +++ b/Documentation/diff-options.txt @@ -26,6 +26,11 @@ ifndef::git-format-patch[] {git-diff? This is the default.} endif::git-format-patch[] +-s:: +--no-patch:: + Suppress diff output. Useful for commands like `git show` that + show the patch by default, or to cancel the effect of `--patch`. + -U<n>:: --unified=<n>:: Generate diffs with <n> lines of context instead of diff --git a/Documentation/git-bisect-lk2009.txt b/Documentation/git-bisect-lk2009.txt index 0eed3e3f29..afeb86c6cd 100644 --- a/Documentation/git-bisect-lk2009.txt +++ b/Documentation/git-bisect-lk2009.txt @@ -1320,7 +1320,7 @@ So git bisect is unconditional goodness - and feel free to quote that ;-) _____________ -Acknowledgements +Acknowledgments ---------------- Many thanks to Junio Hamano for his help in reviewing this paper, for diff --git a/Documentation/git-blame.txt b/Documentation/git-blame.txt index 6cea7f1ce1..f2c85cc633 100644 --- a/Documentation/git-blame.txt +++ b/Documentation/git-blame.txt @@ -9,7 +9,7 @@ SYNOPSIS -------- [verse] 'git blame' [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental] - [-L n,m | -L :fn] [-S <revs-file>] [-M] [-C] [-C] [-C] [--since=<date>] + [-L <range>] [-S <revs-file>] [-M] [-C] [-C] [-C] [--since=<date>] [--abbrev=<n>] [<rev> | --contents <file> | --reverse <rev>] [--] <file> DESCRIPTION @@ -18,7 +18,8 @@ DESCRIPTION Annotates each line in the given file with information from the revision which last modified the line. Optionally, start annotating from the given revision. -The command can also limit the range of lines annotated. +When specified one or more times, `-L` restricts annotation to the requested +lines. The origin of lines is automatically followed across whole-file renames (currently there is no option to turn the rename-following @@ -130,7 +131,10 @@ SPECIFYING RANGES Unlike 'git blame' and 'git annotate' in older versions of git, the extent of the annotation can be limited to both line ranges and revision -ranges. When you are interested in finding the origin for +ranges. The `-L` option, which limits annotation to a range of lines, may be +specified multiple times. + +When you are interested in finding the origin for lines 40-60 for file `foo`, you can use the `-L` option like so (they mean the same thing -- both ask for 21 lines starting at line 40): diff --git a/Documentation/git-cat-file.txt b/Documentation/git-cat-file.txt index 30d585af5d..21cffe2bcd 100644 --- a/Documentation/git-cat-file.txt +++ b/Documentation/git-cat-file.txt @@ -58,12 +58,16 @@ OPTIONS to apply the filter to the content recorded in the index at <path>. --batch:: - Print the SHA-1, type, size, and contents of each object provided on - stdin. May not be combined with any other options or arguments. +--batch=<format>:: + Print object information and contents for each object provided + on stdin. May not be combined with any other options or arguments. + See the section `BATCH OUTPUT` below for details. --batch-check:: - Print the SHA-1, type, and size of each object provided on stdin. May not - be combined with any other options or arguments. +--batch-check=<format>:: + Print object information for each object provided on stdin. May + not be combined with any other options or arguments. See the + section `BATCH OUTPUT` below for details. OUTPUT ------ @@ -78,28 +82,81 @@ If '-p' is specified, the contents of <object> are pretty-printed. If <type> is specified, the raw (though uncompressed) contents of the <object> will be returned. -If '--batch' is specified, output of the following form is printed for each -object specified on stdin: +BATCH OUTPUT +------------ + +If `--batch` or `--batch-check` is given, `cat-file` will read objects +from stdin, one per line, and print information about them. By default, +the whole line is considered as an object, as if it were fed to +linkgit:git-rev-parse[1]. + +You can specify the information shown for each object by using a custom +`<format>`. The `<format>` is copied literally to stdout for each +object, with placeholders of the form `%(atom)` expanded, followed by a +newline. The available atoms are: + +`objectname`:: + The 40-hex object name of the object. + +`objecttype`:: + The type of of the object (the same as `cat-file -t` reports). + +`objectsize`:: + The size, in bytes, of the object (the same as `cat-file -s` + reports). + +`objectsize:disk`:: + The size, in bytes, that the object takes up on disk. See the + note about on-disk sizes in the `CAVEATS` section below. + +`rest`:: + If this atom is used in the output string, input lines are split + at the first whitespace boundary. All characters before that + whitespace are considered to be the object name; characters + after that first run of whitespace (i.e., the "rest" of the + line) are output in place of the `%(rest)` atom. + +If no format is specified, the default format is `%(objectname) +%(objecttype) %(objectsize)`. + +If `--batch` is specified, the object information is followed by the +object contents (consisting of `%(objectsize)` bytes), followed by a +newline. + +For example, `--batch` without a custom format would produce: ------------ <sha1> SP <type> SP <size> LF <contents> LF ------------ -If '--batch-check' is specified, output of the following form is printed for -each object specified on stdin: +Whereas `--batch-check='%(objectname) %(objecttype)'` would produce: ------------ -<sha1> SP <type> SP <size> LF +<sha1> SP <type> LF ------------ -For both '--batch' and '--batch-check', output of the following form is printed -for each object specified on stdin that does not exist in the repository: +If a name is specified on stdin that cannot be resolved to an object in +the repository, then `cat-file` will ignore any custom format and print: ------------ <object> SP missing LF ------------ + +CAVEATS +------- + +Note that the sizes of objects on disk are reported accurately, but care +should be taken in drawing conclusions about which refs or objects are +responsible for disk usage. The size of a packed non-delta object may be +much larger than the size of objects which delta against it, but the +choice of which object is the base and which is the delta is arbitrary +and is subject to change during a repack. Note also that multiple copies +of an object may be present in the object database; in this case, it is +undefined which copy's size will be reported. + + GIT --- Part of the linkgit:git[1] suite diff --git a/Documentation/git-check-attr.txt b/Documentation/git-check-attr.txt index a7be80d48b..00e2aa2df2 100644 --- a/Documentation/git-check-attr.txt +++ b/Documentation/git-check-attr.txt @@ -31,8 +31,9 @@ OPTIONS Read file names from stdin instead of from the command-line. -z:: - Only meaningful with `--stdin`; paths are separated with a - NUL character instead of a linefeed character. + The output format is modified to be machine-parseable. + If `--stdin` is also given, input paths are separated + with a NUL character instead of a linefeed character. \--:: Interpret all preceding arguments as attributes and all following @@ -48,6 +49,10 @@ OUTPUT The output is of the form: <path> COLON SP <attribute> COLON SP <info> LF +unless `-z` is in effect, in which case NUL is used as delimiter: +<path> NUL <attribute> NUL <info> NUL + + <path> is the path of a file being queried, <attribute> is an attribute being queried and <info> can be either: diff --git a/Documentation/git-check-mailmap.txt b/Documentation/git-check-mailmap.txt new file mode 100644 index 0000000000..39028ee1a3 --- /dev/null +++ b/Documentation/git-check-mailmap.txt @@ -0,0 +1,47 @@ +git-check-mailmap(1) +==================== + +NAME +---- +git-check-mailmap - Show canonical names and email addresses of contacts + + +SYNOPSIS +-------- +[verse] +'git check-mailmap' [options] <contact>... + + +DESCRIPTION +----------- + +For each ``Name $$<user@host>$$'' or ``$$<user@host>$$'' from the command-line +or standard input (when using `--stdin`), look up the person's canonical name +and email address (see "Mapping Authors" below). If found, print them; +otherwise print the input as-is. + + +OPTIONS +------- +--stdin:: + Read contacts, one per line, from the standard input after exhausting + contacts provided on the command-line. + + +OUTPUT +------ + +For each contact, a single line is output, terminated by a newline. If the +name is provided or known to the 'mailmap', ``Name $$<user@host>$$'' is +printed; otherwise only ``$$<user@host>$$'' is printed. + + +MAPPING AUTHORS +--------------- + +include::mailmap.txt[] + + +GIT +--- +Part of the linkgit:git[1] suite diff --git a/Documentation/git-check-ref-format.txt b/Documentation/git-check-ref-format.txt index fc02959ba4..a49be1bab4 100644 --- a/Documentation/git-check-ref-format.txt +++ b/Documentation/git-check-ref-format.txt @@ -54,8 +54,6 @@ Git imposes the following rules on how references are named: . They cannot contain a sequence `@{`. -. They cannot be the single character `@`. - . They cannot contain a `\`. These rules make it easy for shell script based tools to parse diff --git a/Documentation/git-clean.txt b/Documentation/git-clean.txt index bdc3ab80c7..89979228b1 100644 --- a/Documentation/git-clean.txt +++ b/Documentation/git-clean.txt @@ -8,7 +8,7 @@ git-clean - Remove untracked files from the working tree SYNOPSIS -------- [verse] -'git clean' [-d] [-f] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>... +'git clean' [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>... DESCRIPTION ----------- @@ -34,7 +34,13 @@ OPTIONS -f:: --force:: If the Git configuration variable clean.requireForce is not set - to false, 'git clean' will refuse to run unless given -f or -n. + to false, 'git clean' will refuse to run unless given -f, -n or + -i. + +-i:: +--interactive:: + Show what would be done and clean files interactively. See + ``Interactive mode'' for details. -n:: --dry-run:: @@ -63,6 +69,67 @@ OPTIONS Remove only files ignored by Git. This may be useful to rebuild everything from scratch, but keep manually created files. +Interactive mode +---------------- +When the command enters the interactive mode, it shows the +files and directories to be cleaned, and goes into its +interactive command loop. + +The command loop shows the list of subcommands available, and +gives a prompt "What now> ". In general, when the prompt ends +with a single '>', you can pick only one of the choices given +and type return, like this: + +------------ + *** Commands *** + 1: clean 2: filter by pattern 3: select by numbers + 4: ask each 5: quit 6: help + What now> 1 +------------ + +You also could say `c` or `clean` above as long as the choice is unique. + +The main command loop has 6 subcommands. + +clean:: + + Start cleaning files and directories, and then quit. + +filter by pattern:: + + This shows the files and directories to be deleted and issues an + "Input ignore patterns>>" prompt. You can input space-seperated + patterns to exclude files and directories from deletion. + E.g. "*.c *.h" will excludes files end with ".c" and ".h" from + deletion. When you are satisfied with the filtered result, press + ENTER (empty) back to the main menu. + +select by numbers:: + + This shows the files and directories to be deleted and issues an + "Select items to delete>>" prompt. When the prompt ends with double + '>>' like this, you can make more than one selection, concatenated + with whitespace or comma. Also you can say ranges. E.g. "2-5 7,9" + to choose 2,3,4,5,7,9 from the list. If the second number in a + range is omitted, all remaining items are selected. E.g. "7-" to + choose 7,8,9 from the list. You can say '*' to choose everything. + Also when you are satisfied with the filtered result, press ENTER + (empty) back to the main menu. + +ask each:: + + This will start to clean, and you must confirm one by one in order + to delete items. Please note that this action is not as efficient + as the above two actions. + +quit:: + + This lets you quit without do cleaning. + +help:: + + Show brief usage of interactive git-clean. + SEE ALSO -------- linkgit:gitignore[5] diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt index 85769b884e..450f158779 100644 --- a/Documentation/git-clone.txt +++ b/Documentation/git-clone.txt @@ -182,13 +182,11 @@ objects from the source repository into a pack in the cloned repository. --depth <depth>:: Create a 'shallow' clone with a history truncated to the specified number of revisions. A shallow repository has a - number of limitations (you cannot clone or fetch from it, nor - push into it), but is adequate if you are only interested in - the recent history of a large project with a long history. -+ -Pushing from a shallow clone should be avoided if the git version on -the receiver end is older than v1.7.10, or any other git -implementation that does not perform connectivity check. + number of limitations (you cannot clone or fetch from + it, nor push from nor into it), but is adequate if you + are only interested in the recent history of a large project + with a long history, and would want to send in fixes + as patches. --[no-]single-branch:: Clone only the history leading to the tip of a single branch, diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt index 99dc497b6f..2dbe486eb1 100644 --- a/Documentation/git-config.txt +++ b/Documentation/git-config.txt @@ -96,29 +96,31 @@ OPTIONS names are not. --global:: - For writing options: write to global ~/.gitconfig file rather than - the repository .git/config, write to $XDG_CONFIG_HOME/git/config file - if this file exists and the ~/.gitconfig file doesn't. + For writing options: write to global `~/.gitconfig` file + rather than the repository `.git/config`, write to + `$XDG_CONFIG_HOME/git/config` file if this file exists and the + `~/.gitconfig` file doesn't. + -For reading options: read only from global ~/.gitconfig and from -$XDG_CONFIG_HOME/git/config rather than from all available files. +For reading options: read only from global `~/.gitconfig` and from +`$XDG_CONFIG_HOME/git/config` rather than from all available files. + See also <<FILES>>. --system:: - For writing options: write to system-wide $(prefix)/etc/gitconfig - rather than the repository .git/config. + For writing options: write to system-wide + `$(prefix)/etc/gitconfig` rather than the repository + `.git/config`. + -For reading options: read only from system-wide $(prefix)/etc/gitconfig +For reading options: read only from system-wide `$(prefix)/etc/gitconfig` rather than from all available files. + See also <<FILES>>. --local:: - For writing options: write to the repository .git/config file. + For writing options: write to the repository `.git/config` file. This is the default behavior. + -For reading options: read only from the repository .git/config rather than +For reading options: read only from the repository `.git/config` rather than from all available files. + See also <<FILES>>. @@ -127,6 +129,13 @@ See also <<FILES>>. --file config-file:: Use the given config file instead of the one specified by GIT_CONFIG. +--blob blob:: + Similar to '--file' but use the given blob instead of a file. E.g. + you can use 'master:.gitmodules' to read values from the file + '.gitmodules' in the master branch. See "SPECIFYING REVISIONS" + section in linkgit:gitrevisions[7] for a more complete list of + ways to spell blob names. + --remove-section:: Remove the given section from the configuration file. @@ -211,9 +220,9 @@ $(prefix)/etc/gitconfig:: $XDG_CONFIG_HOME/git/config:: Second user-specific configuration file. If $XDG_CONFIG_HOME is not set - or empty, $HOME/.config/git/config will be used. Any single-valued + or empty, `$HOME/.config/git/config` will be used. Any single-valued variable set in this file will be overwritten by whatever is in - ~/.gitconfig. It is a good idea not to create this file if + `~/.gitconfig`. It is a good idea not to create this file if you sometimes use older versions of Git, as support for this file was added fairly recently. diff --git a/Documentation/git-fetch-pack.txt b/Documentation/git-fetch-pack.txt index 1e71754347..444b805d35 100644 --- a/Documentation/git-fetch-pack.txt +++ b/Documentation/git-fetch-pack.txt @@ -90,6 +90,10 @@ be in a separate packet, and the list must end with a flush packet. --no-progress:: Do not show the progress. +--check-self-contained-and-connected:: + Output "connectivity-ok" if the received pack is + self-contained and connected. + -v:: Run verbosely. diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt index 39118774af..9e0ef0eaf3 100644 --- a/Documentation/git-format-patch.txt +++ b/Documentation/git-format-patch.txt @@ -187,6 +187,21 @@ will want to ensure that threading is disabled for `git send-email`. The negated form `--no-cc` discards all `Cc:` headers added so far (from config or command line). +--from:: +--from=<ident>:: + Use `ident` in the `From:` header of each commit email. If the + author ident of the commit is not textually identical to the + provided `ident`, place a `From:` header in the body of the + message with the original author. If no `ident` is given, use + the committer ident. ++ +Note that this option is only useful if you are actually sending the +emails and want to identify yourself as the sender, but retain the +original author (and `git am` will correctly pick up the in-body +header). Note also that `git send-email` already handles this +transformation for you, and this option should not be used if you are +feeding the result to `git send-email`. + --add-header=<header>:: Add an arbitrary header to the email headers. This is in addition to any configured headers, and may be used multiple times. @@ -227,6 +242,7 @@ configuration options in linkgit:git-notes[1] to use this workflow). Note that the leading character does not have to be a dot; for example, you can use `--suffix=-patch` to get `0001-description-of-my-change-patch`. +-q:: --quiet:: Do not print the names of the generated files to standard output. diff --git a/Documentation/git-gc.txt b/Documentation/git-gc.txt index 2402ed6828..e158a3b31f 100644 --- a/Documentation/git-gc.txt +++ b/Documentation/git-gc.txt @@ -9,7 +9,7 @@ git-gc - Cleanup unnecessary files and optimize the local repository SYNOPSIS -------- [verse] -'git gc' [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune] +'git gc' [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune] [--force] DESCRIPTION ----------- @@ -72,6 +72,10 @@ automatic consolidation of packs. --quiet:: Suppress all progress reports. +--force:: + Force `git gc` to run even if there may be another `git gc` + instance running on this repository. + Configuration ------------- diff --git a/Documentation/git-log.txt b/Documentation/git-log.txt index 2ea79ba168..34097efea7 100644 --- a/Documentation/git-log.txt +++ b/Documentation/git-log.txt @@ -62,7 +62,8 @@ produced by --stat etc. Note that only message is considered, if also a diff is shown its size is not included. --L <start>,<end>:<file>, -L :<regex>:<file>:: +-L <start>,<end>:<file>:: +-L :<regex>:<file>:: Trace the evolution of the line range given by "<start>,<end>" (or the funcname regex <regex>) within the <file>. You may @@ -71,8 +72,6 @@ produced by --stat etc. give zero or one positive revision arguments. You can specify this option more than once. + -<start> and <end> can take one of these forms: - include::line-range-format.txt[] <revision range>:: @@ -97,7 +96,7 @@ include::rev-list-options.txt[] include::pretty-formats.txt[] -Common diff options +COMMON DIFF OPTIONS ------------------- :git-log: 1 @@ -105,7 +104,7 @@ include::diff-options.txt[] include::diff-generate-patch.txt[] -Examples +EXAMPLES -------- `git log --no-merges`:: @@ -153,7 +152,7 @@ Examples This makes sense only when following a strict policy of merging all topic branches when staying on a single integration branch. -git log -L '/int main/',/^}/:main.c:: +`git log -L '/int main/',/^}/:main.c`:: Shows how the function `main()` in the file 'main.c' evolved over time. @@ -161,12 +160,12 @@ git log -L '/int main/',/^}/:main.c:: `git log -3`:: Limits the number of commits to show to 3. -Discussion +DISCUSSION ---------- include::i18n.txt[] -Configuration +CONFIGURATION ------------- See linkgit:git-config[1] for core variables and linkgit:git-diff[1] diff --git a/Documentation/git-merge-file.txt b/Documentation/git-merge-file.txt index d7db2a3737..d2fc12ec77 100644 --- a/Documentation/git-merge-file.txt +++ b/Documentation/git-merge-file.txt @@ -11,7 +11,7 @@ SYNOPSIS [verse] 'git merge-file' [-L <current-name> [-L <base-name> [-L <other-name>]]] [--ours|--theirs|--union] [-p|--stdout] [-q|--quiet] [--marker-size=<n>] - <current-file> <base-file> <other-file> + [--[no-]diff3] <current-file> <base-file> <other-file> DESCRIPTION @@ -66,6 +66,9 @@ OPTIONS -q:: Quiet; do not warn about conflicts. +--diff3:: + Show conflicts in "diff3" style. + --ours:: --theirs:: --union:: diff --git a/Documentation/git-merge.txt b/Documentation/git-merge.txt index 8c7f2f66d8..a74c3713c6 100644 --- a/Documentation/git-merge.txt +++ b/Documentation/git-merge.txt @@ -186,11 +186,11 @@ In such a case, you can "unwrap" the tag yourself before feeding it to `git merge`, or pass `--ff-only` when you do not have any work on your own. e.g. ---- +---- git fetch origin git merge v1.2.3^0 git merge --ff-only v1.2.3 ---- +---- HOW CONFLICTS ARE PRESENTED diff --git a/Documentation/git-pack-refs.txt b/Documentation/git-pack-refs.txt index f131677478..154081f2de 100644 --- a/Documentation/git-pack-refs.txt +++ b/Documentation/git-pack-refs.txt @@ -33,8 +33,8 @@ Subsequent updates to branches always create new files under `$GIT_DIR/refs` directory hierarchy. A recommended practice to deal with a repository with too many -refs is to pack its refs with `--all --prune` once, and -occasionally run `git pack-refs --prune`. Tags are by +refs is to pack its refs with `--all` once, and +occasionally run `git pack-refs`. Tags are by definition stationary and are not expected to change. Branch heads will be packed with the initial `pack-refs --all`, but only the currently active branch heads will become unpacked, diff --git a/Documentation/git-prune.txt b/Documentation/git-prune.txt index 80d01b0571..bf824108c1 100644 --- a/Documentation/git-prune.txt +++ b/Documentation/git-prune.txt @@ -59,7 +59,7 @@ borrows from your repository via its `.git/objects/info/alternates`: ------------ -$ git prune $(cd ../another && $(git rev-parse --all)) +$ git prune $(cd ../another && git rev-parse --all) ------------ Notes diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt index f7dfe48d28..e2992f17a0 100644 --- a/Documentation/git-push.txt +++ b/Documentation/git-push.txt @@ -11,6 +11,7 @@ SYNOPSIS [verse] 'git push' [--all | --mirror | --tags] [--follow-tags] [-n | --dry-run] [--receive-pack=<git-receive-pack>] [--repo=<repository>] [-f | --force] [--prune] [-v | --verbose] [-u | --set-upstream] + [--force-with-lease[=<refname>[:<expect>]]] [--no-verify] [<repository> [<refspec>...]] DESCRIPTION @@ -130,21 +131,75 @@ already exists on the remote side. repository over ssh, and you do not have the program in a directory on the default $PATH. +--[no-]force-with-lease:: +--force-with-lease=<refname>:: +--force-with-lease=<refname>:<expect>:: + Usually, "git push" refuses to update a remote ref that is + not an ancestor of the local ref used to overwrite it. ++ +This option bypasses the check, but instead requires that the +current value of the ref to be the expected value. "git push" +fails otherwise. ++ +Imagine that you have to rebase what you have already published. +You will have to bypass the "must fast-forward" rule in order to +replace the history you originally published with the rebased history. +If somebody else built on top of your original history while you are +rebasing, the tip of the branch at the remote may advance with her +commit, and blindly pushing with `--force` will lose her work. ++ +This option allows you to say that you expect the history you are +updating is what you rebased and want to replace. If the remote ref +still points at the commit you specified, you can be sure that no +other people did anything to the ref (it is like taking a "lease" on +the ref without explicitly locking it, and you update the ref while +making sure that your earlier "lease" is still valid). ++ +`--force-with-lease` alone, without specifying the details, will protect +all remote refs that are going to be updated by requiring their +current value to be the same as the remote-tracking branch we have +for them, unless specified with a `--force-with-lease=<refname>:<expect>` +option that explicitly states what the expected value is. ++ +`--force-with-lease=<refname>`, without specifying the expected value, will +protect the named ref (alone), if it is going to be updated, by +requiring its current value to be the same as the remote-tracking +branch we have for it. ++ +`--force-with-lease=<refname>:<expect>` will protect the named ref (alone), +if it is going to be updated, by requiring its current value to be +the same as the specified value <expect> (which is allowed to be +different from the remote-tracking branch we have for the refname, +or we do not even have to have such a remote-tracking branch when +this form is used). ++ +Note that all forms other than `--force-with-lease=<refname>:<expect>` +that specifies the expected current value of the ref explicitly are +still experimental and their semantics may change as we gain experience +with this feature. ++ +"--no-force-with-lease" will cancel all the previous --force-with-lease on the +command line. + -f:: --force:: Usually, the command refuses to update a remote ref that is not an ancestor of the local ref used to overwrite it. - This flag disables the check. This can cause the - remote repository to lose commits; use it with care. - Note that `--force` applies to all the refs that are pushed, - hence using it with `push.default` set to `matching` or with - multiple push destinations configured with `remote.*.push` - may overwrite refs other than the current branch (including - local refs that are strictly behind their remote counterpart). - To force a push to only one branch, use a `+` in front of the - refspec to push (e.g `git push origin +master` to force a push - to the `master` branch). See the `<refspec>...` section above - for details. + Also, when `--force-with-lease` option is used, the command refuses + to update a remote ref whose current value does not match + what is expected. ++ +This flag disables these checks, and can cause the remote repository +to lose commits; use it with care. ++ +Note that `--force` applies to all the refs that are pushed, hence +using it with `push.default` set to `matching` or with multiple push +destinations configured with `remote.*.push` may overwrite refs +other than the current branch (including local refs that are +strictly behind their remote counterpart). To force a push to only +one branch, use a `+` in front of the refspec to push (e.g `git push +origin +master` to force a push to the `master` branch). See the +`<refspec>...` section above for details. --repo=<repository>:: This option is only relevant if no <repository> argument is diff --git a/Documentation/git-reset.txt b/Documentation/git-reset.txt index a404b47b7b..f445cb38fa 100644 --- a/Documentation/git-reset.txt +++ b/Documentation/git-reset.txt @@ -9,7 +9,7 @@ SYNOPSIS -------- [verse] 'git reset' [-q] [<tree-ish>] [--] <paths>... -'git reset' (--patch | -p) [<tree-sh>] [--] [<paths>...] +'git reset' (--patch | -p) [<tree-ish>] [--] [<paths>...] 'git reset' [--soft | --mixed | --hard | --merge | --keep] [-q] [<commit>] DESCRIPTION diff --git a/Documentation/git-rev-list.txt b/Documentation/git-rev-list.txt index 65ac27e0c9..045b37b82e 100644 --- a/Documentation/git-rev-list.txt +++ b/Documentation/git-rev-list.txt @@ -40,7 +40,7 @@ SYNOPSIS [ \--right-only ] [ \--cherry-mark ] [ \--cherry-pick ] - [ \--encoding[=<encoding>] ] + [ \--encoding=<encoding> ] [ \--(author|committer|grep)=<pattern> ] [ \--regexp-ignore-case | -i ] [ \--extended-regexp | -E ] diff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt index 993903c9f1..d068a65377 100644 --- a/Documentation/git-rev-parse.txt +++ b/Documentation/git-rev-parse.txt @@ -24,9 +24,23 @@ distinguish between them. OPTIONS ------- + +Operation Modes +~~~~~~~~~~~~~~~ + +Each of these options must appear first on the command line. + --parseopt:: Use 'git rev-parse' in option parsing mode (see PARSEOPT section below). +--sq-quote:: + Use 'git rev-parse' in shell quoting mode (see SQ-QUOTE + section below). In contrast to the `--sq` option below, this + mode does only quoting. Nothing else is done to command input. + +Options for --parseopt +~~~~~~~~~~~~~~~~~~~~~~ + --keep-dashdash:: Only meaningful in `--parseopt` mode. Tells the option parser to echo out the first `--` met instead of skipping it. @@ -36,10 +50,8 @@ OPTIONS the first non-option argument. This can be used to parse sub-commands that take options themselves. ---sq-quote:: - Use 'git rev-parse' in shell quoting mode (see SQ-QUOTE - section below). In contrast to the `--sq` option below, this - mode does only quoting. Nothing else is done to command input. +Options for Filtering +~~~~~~~~~~~~~~~~~~~~~ --revs-only:: Do not output flags and parameters not meant for @@ -55,6 +67,9 @@ OPTIONS --no-flags:: Do not output flag parameters. +Options for Output +~~~~~~~~~~~~~~~~~~ + --default <arg>:: If there is no parameter given by the user, use `<arg>` instead. @@ -83,7 +98,7 @@ eval "set -- $(git rev-parse --sq --prefix "$prefix" "$@")" + If you want to make sure that the output actually names an object in your object database and/or can be used as a specific type of object -you require, you can add "^{type}" peeling operator to the parmeter. +you require, you can add "^{type}" peeling operator to the parameter. For example, `git rev-parse "$VAR^{commit}"` will make sure `$VAR` names an existing object that is a commit-ish (i.e. a commit, or an annotated tag that points at a commit). To make sure that `$VAR` @@ -110,6 +125,17 @@ can be used. strip '{caret}' prefix from the object names that already have one. +--abbrev-ref[=(strict|loose)]:: + A non-ambiguous short name of the objects name. + The option core.warnAmbiguousRefs is used to select the strict + abbreviation mode. + +--short:: +--short=number:: + Instead of outputting the full SHA-1 values of object names try to + abbreviate them to a shorter unique name. When no length is specified + 7 is used. The minimum length is 4. + --symbolic:: Usually the object names are output in SHA-1 form (with possible '{caret}' prefix); this option makes them output in a @@ -123,16 +149,8 @@ can be used. unfortunately named tag "master"), and show them as full refnames (e.g. "refs/heads/master"). ---abbrev-ref[=(strict|loose)]:: - A non-ambiguous short name of the objects name. - The option core.warnAmbiguousRefs is used to select the strict - abbreviation mode. - ---disambiguate=<prefix>:: - Show every object whose name begins with the given prefix. - The <prefix> must be at least 4 hexadecimal digits long to - avoid listing each and every object in the repository by - mistake. +Options for Objects +~~~~~~~~~~~~~~~~~~~ --all:: Show all refs found in `refs/`. @@ -155,18 +173,20 @@ shown. If the pattern does not contain a globbing character (`?`, character (`?`, `*`, or `[`), it is turned into a prefix match by appending `/*`. ---show-toplevel:: - Show the absolute path of the top-level directory. +--disambiguate=<prefix>:: + Show every object whose name begins with the given prefix. + The <prefix> must be at least 4 hexadecimal digits long to + avoid listing each and every object in the repository by + mistake. ---show-prefix:: - When the command is invoked from a subdirectory, show the - path of the current directory relative to the top-level - directory. +Options for Files +~~~~~~~~~~~~~~~~~ ---show-cdup:: - When the command is invoked from a subdirectory, show the - path of the top-level directory relative to the current - directory (typically a sequence of "../", or an empty string). +--local-env-vars:: + List the GIT_* environment variables that are local to the + repository (e.g. GIT_DIR or GIT_WORK_TREE, but not GIT_EDITOR). + Only the names of the variables are listed, not their value, + even if they are set. --git-dir:: Show `$GIT_DIR` if defined. Otherwise show the path to @@ -188,17 +208,27 @@ print a message to stderr and exit with nonzero status. --is-bare-repository:: When the repository is bare print "true", otherwise "false". ---local-env-vars:: - List the GIT_* environment variables that are local to the - repository (e.g. GIT_DIR or GIT_WORK_TREE, but not GIT_EDITOR). - Only the names of the variables are listed, not their value, - even if they are set. +--resolve-git-dir <path>:: + Check if <path> is a valid repository or a gitfile that + points at a valid repository, and print the location of the + repository. If <path> is a gitfile then the resolved path + to the real repository is printed. ---short:: ---short=number:: - Instead of outputting the full SHA-1 values of object names try to - abbreviate them to a shorter unique name. When no length is specified - 7 is used. The minimum length is 4. +--show-cdup:: + When the command is invoked from a subdirectory, show the + path of the top-level directory relative to the current + directory (typically a sequence of "../", or an empty string). + +--show-prefix:: + When the command is invoked from a subdirectory, show the + path of the current directory relative to the top-level + directory. + +--show-toplevel:: + Show the absolute path of the top-level directory. + +Other Options +~~~~~~~~~~~~~ --since=datestring:: --after=datestring:: @@ -213,12 +243,6 @@ print a message to stderr and exit with nonzero status. <args>...:: Flags and parameters to be parsed. ---resolve-git-dir <path>:: - Check if <path> is a valid repository or a gitfile that - points at a valid repository, and print the location of the - repository. If <path> is a gitfile then the resolved path - to the real repository is printed. - include::revisions.txt[] diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt index 40a9a9abc1..f0e57a597b 100644 --- a/Documentation/git-send-email.txt +++ b/Documentation/git-send-email.txt @@ -198,6 +198,12 @@ must be used for each option. --smtp-ssl:: Legacy alias for '--smtp-encryption ssl'. +--smtp-ssl-cert-path:: + Path to ca-certificates (either a directory or a single file). + Set it to an empty string to disable certificate verification. + Defaults to the value set to the 'sendemail.smtpsslcertpath' + configuration variable, if set, or `/etc/ssl/certs` otherwise. + --smtp-user=<user>:: Username for SMTP-AUTH. Default is the value of 'sendemail.smtpuser'; if a username is not specified (with '--smtp-user' or 'sendemail.smtpuser'), diff --git a/Documentation/git-show-ref.txt b/Documentation/git-show-ref.txt index de4d352da2..b0a309b117 100644 --- a/Documentation/git-show-ref.txt +++ b/Documentation/git-show-ref.txt @@ -21,6 +21,8 @@ commit IDs. Results can be filtered using a pattern and tags can be dereferenced into object IDs. Additionally, it can be used to test whether a particular ref exists. +By default, shows the tags, heads, and remote refs. + The --exclude-existing form is a filter that does the inverse, it shows the refs from stdin that don't exist in the local repository. @@ -32,14 +34,14 @@ OPTIONS --head:: - Show the HEAD reference. + Show the HEAD reference, even if it would normally be filtered out. --tags:: --heads:: - Limit to only "refs/heads" and "refs/tags", respectively. These - options are not mutually exclusive; when given both, references stored - in "refs/heads" and "refs/tags" are displayed. + Limit to "refs/heads" and "refs/tags", respectively. These options + are not mutually exclusive; when given both, references stored in + "refs/heads" and "refs/tags" are displayed. -d:: --dereference:: diff --git a/Documentation/git-show.txt b/Documentation/git-show.txt index ae4edcccfb..4e617e6979 100644 --- a/Documentation/git-show.txt +++ b/Documentation/git-show.txt @@ -45,6 +45,15 @@ include::pretty-options.txt[] include::pretty-formats.txt[] +COMMON DIFF OPTIONS +------------------- + +:git-log: 1 +include::diff-options.txt[] + +include::diff-generate-patch.txt[] + + EXAMPLES -------- diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt index 7c8b648fbe..db7e803038 100644 --- a/Documentation/git-stash.txt +++ b/Documentation/git-stash.txt @@ -14,8 +14,7 @@ SYNOPSIS 'git stash' ( pop | apply ) [--index] [-q|--quiet] [<stash>] 'git stash' branch <branchname> [<stash>] 'git stash' [save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] - [-u|--include-untracked] [-a|--all] [-f|--force] - [<message>]] + [-u|--include-untracked] [-a|--all] [<message>]] 'git stash' clear 'git stash' create [<message>] 'git stash' store [-m|--message <message>] [-q|--quiet] <commit> @@ -45,7 +44,7 @@ is also possible). OPTIONS ------- -save [-p|--patch] [--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [-f|--force] [<message>]:: +save [-p|--patch] [--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q|--quiet] [<message>]:: Save your local modifications to a new 'stash', and run `git reset --hard` to revert them. The <message> part is optional and gives @@ -72,13 +71,6 @@ linkgit:git-add[1] to learn how to operate the `--patch` mode. + The `--patch` option implies `--keep-index`. You can use `--no-keep-index` to override this. -+ -In some cases, saving a stash could mean irretrievably removing some -data - if a directory with untracked files replaces a tracked file of -the same name, the new untracked files are not saved (except in case -of `--include-untracked`) but the original tracked file shall be restored. -By default, `stash save` will abort in such a case; `--force` will allow -it to remove the untracked files. list [<options>]:: diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt index bfff09062d..bfef8a0c62 100644 --- a/Documentation/git-submodule.txt +++ b/Documentation/git-submodule.txt @@ -10,12 +10,12 @@ SYNOPSIS -------- [verse] 'git submodule' [--quiet] add [-b <branch>] [-f|--force] [--name <name>] - [--reference <repository>] [--] <repository> [<path>] + [--reference <repository>] [--depth <depth>] [--] <repository> [<path>] 'git submodule' [--quiet] status [--cached] [--recursive] [--] [<path>...] 'git submodule' [--quiet] init [--] [<path>...] 'git submodule' [--quiet] deinit [-f|--force] [--] <path>... 'git submodule' [--quiet] update [--init] [--remote] [-N|--no-fetch] - [-f|--force] [--rebase] [--reference <repository>] + [-f|--force] [--rebase] [--reference <repository>] [--depth <depth>] [--merge] [--recursive] [--] [<path>...] 'git submodule' [--quiet] summary [--cached|--files] [(-n|--summary-limit) <n>] [commit] [--] [<path>...] @@ -159,7 +159,9 @@ update:: This will make the submodules HEAD be detached unless `--rebase` or `--merge` is specified or the key `submodule.$name.update` is set to `rebase`, `merge` or `none`. `none` can be overridden by specifying - `--checkout`. + `--checkout`. Setting the key `submodule.$name.update` to `!command` + will cause `command` to be run. `command` can be any arbitrary shell + command that takes a single argument, namely the sha1 to update to. + If the submodule is not yet initialized, and you just want to use the setting as stored in .gitmodules, you can automatically initialize the @@ -328,6 +330,12 @@ for linkgit:git-clone[1]'s `--reference` and `--shared` options carefully. only in the submodules of the current repo, but also in any nested submodules inside those submodules (and so on). +--depth:: + This option is valid for add and update commands. Create a 'shallow' + clone with a history truncated to the specified number of revisions. + See linkgit:git-clone[1] + + <path>...:: Paths to submodule(s). When specified this will restrict the command to only operate on the submodules found at the specified paths. diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt index aad452f169..4dd3bcb511 100644 --- a/Documentation/git-svn.txt +++ b/Documentation/git-svn.txt @@ -256,7 +256,7 @@ first have already been pushed into SVN. For each patch, one may answer "yes" (accept this patch), "no" (discard this patch), "all" (accept all patches), or "quit". + - 'git svn dcommit' returns immediately if answer if "no" or "quit", without + 'git svn dcommit' returns immediately if answer is "no" or "quit", without committing anything to SVN. 'branch':: diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt index 22894cbee6..c418c44d40 100644 --- a/Documentation/git-tag.txt +++ b/Documentation/git-tag.txt @@ -42,6 +42,17 @@ committer identity for the current user is used to find the GnuPG key for signing. The configuration variable `gpg.program` is used to specify custom GnuPG binary. +Tag objects (created with `-a`, `s`, or `-u`) are called "annotated" +tags; they contain a creation date, the tagger name and e-mail, a +tagging message, and an optional GnuPG signature. Whereas a +"lightweight" tag is simply a name for an object (usually a commit +object). + +Annotated tags are meant for release while lightweight tags are meant +for private or temporary object labels. For this reason, some git +commands for naming objects (like `git describe`) will ignore +lightweight tags by default. + OPTIONS ------- diff --git a/Documentation/git-whatchanged.txt b/Documentation/git-whatchanged.txt index c600b61e2b..8b63ceb00e 100644 --- a/Documentation/git-whatchanged.txt +++ b/Documentation/git-whatchanged.txt @@ -13,43 +13,17 @@ SYNOPSIS DESCRIPTION ----------- -Shows commit logs and diff output each commit introduces. The -command internally invokes 'git rev-list' piped to -'git diff-tree', and takes command line options for both of -these commands. -This manual page describes only the most frequently used options. +Shows commit logs and diff output each commit introduces. +New users are encouraged to use linkgit:git-log[1] instead. The +`whatchanged` command is essentially the same as linkgit:git-log[1] +but defaults to show the raw format diff output and to skip merges. -OPTIONS -------- --p:: - Show textual diffs, instead of the Git internal diff - output format that is useful only to tell the changed - paths and their nature of changes. +The command is kept primarily for historical reasons; fingers of +many people who learned Git long before `git log` was invented by +reading Linux kernel mailing list are trained to type it. --<n>:: - Limit output to <n> commits. - -<since>..<until>:: - Limit output to between the two named commits (bottom - exclusive, top inclusive). - --r:: - Show Git internal diff output, but for the whole tree, - not just the top level. - --m:: - By default, differences for merge commits are not shown. - With this flag, show differences to that commit from all - of its parents. -+ -However, it is not very useful in general, although it -*is* useful on a file-by-file basis. - -include::pretty-options.txt[] - -include::pretty-formats.txt[] Examples -------- diff --git a/Documentation/git.txt b/Documentation/git.txt index 2c1f6f5f53..c4f0ed5957 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -43,9 +43,16 @@ unreleased) version of Git, that is available from 'master' branch of the `git.git` repository. Documentation for older releases are available here: -* link:v1.8.3.2/git.html[documentation for release 1.8.3.2] +* link:v1.8.4/git.html[documentation for release 1.8.4] * release notes for + link:RelNotes/1.8.4.txt[1.8.4]. + +* link:v1.8.3.4/git.html[documentation for release 1.8.3.4] + +* release notes for + link:RelNotes/1.8.3.4.txt[1.8.3.4], + link:RelNotes/1.8.3.3.txt[1.8.3.3], link:RelNotes/1.8.3.2.txt[1.8.3.2], link:RelNotes/1.8.3.1.txt[1.8.3.1], link:RelNotes/1.8.3.txt[1.8.3]. @@ -831,7 +838,7 @@ for further details. 'GIT_FLUSH':: If this environment variable is set to "1", then commands such as 'git blame' (in incremental mode), 'git rev-list', 'git log', - 'git check-attr', 'git check-ignore', and 'git whatchanged' will + 'git check-attr' and 'git check-ignore' will force a flush of the output stream after each record have been flushed. If this variable is set to "0", the output of these commands will be done diff --git a/Documentation/gitcore-tutorial.txt b/Documentation/gitcore-tutorial.txt index f538a870c7..058a352980 100644 --- a/Documentation/gitcore-tutorial.txt +++ b/Documentation/gitcore-tutorial.txt @@ -534,42 +534,9 @@ all, but just show the actual commit message. In fact, together with the 'git rev-list' program (which generates a list of revisions), 'git diff-tree' ends up being a veritable fount of -changes. A trivial (but very useful) script called 'git whatchanged' is -included with Git which does exactly this, and shows a log of recent -activities. - -To see the whole history of our pitiful little git-tutorial project, you -can do - ----------------- -$ git log ----------------- - -which shows just the log messages, or if we want to see the log together -with the associated patches use the more complex (and much more -powerful) - ----------------- -$ git whatchanged -p ----------------- - -and you will see exactly what has changed in the repository over its -short history. - -[NOTE] -When using the above two commands, the initial commit will be shown. -If this is a problem because it is huge, you can hide it by setting -the log.showroot configuration variable to false. Having this, you -can still show it for each command just adding the `--root` option, -which is a flag for 'git diff-tree' accepted by both commands. - -With that, you should now be having some inkling of what Git does, and -can explore on your own. - -[NOTE] -Most likely, you are not directly using the core -Git Plumbing commands, but using Porcelain such as 'git add', `git-rm' -and `git-commit'. +changes. You can emulate `git log`, `git log -p`, etc. with a trivial +script that pipes the output of `git rev-list` to `git diff-tree --stdin`, +which was exactly how early versions of `git log` were implemented. Tagging a version diff --git a/Documentation/gitremote-helpers.txt b/Documentation/gitremote-helpers.txt index 0827f69139..bc069c23df 100644 --- a/Documentation/gitremote-helpers.txt +++ b/Documentation/gitremote-helpers.txt @@ -143,6 +143,10 @@ Supported commands: 'list', 'fetch'. + Supported commands: 'list', 'import'. +'check-connectivity':: + Can guarantee that when a clone is requested, the received + pack is self contained and is connected. + If a helper advertises 'connect', Git will use it if possible and fall back to another capability if the helper requests so when connecting (see the 'connect' command under COMMANDS). @@ -270,6 +274,9 @@ Optionally may output a 'lock <file>' line indicating a file under GIT_DIR/objects/pack which is keeping a pack until refs can be suitably updated. + +If option 'check-connectivity' is requested, the helper must output +'connectivity-ok' if the clone is self-contained and connected. ++ Supported if the helper has the "fetch" capability. 'push' +<src>:<dst>:: @@ -416,6 +423,9 @@ set by Git if the remote helper has the 'option' capability. must not rely on this option being set before connect request occurs. +'option check-connectivity' \{'true'|'false'\}:: + Request the helper to check connectivity of a clone. + SEE ALSO -------- linkgit:git-remote[1] diff --git a/Documentation/gitweb.txt b/Documentation/gitweb.txt index 40969f1098..cca14b8cc3 100644 --- a/Documentation/gitweb.txt +++ b/Documentation/gitweb.txt @@ -504,7 +504,7 @@ repositories, you can configure Apache like this: The above configuration expects your public repositories to live under '/pub/git' and will serve them as `http://git.domain.org/dir-under-pub-git`, -both as cloneable Git URL and as browseable gitweb interface. If you then +both as clonable Git URL and as browseable gitweb interface. If you then start your linkgit:git-daemon[1] with `--base-path=/pub/git --export-all` then you can even use the `git://` URL with exactly the same path. diff --git a/Documentation/howto/new-command.txt b/Documentation/howto/new-command.txt index 2abc3a0a0e..d7de5a3e9e 100644 --- a/Documentation/howto/new-command.txt +++ b/Documentation/howto/new-command.txt @@ -94,7 +94,7 @@ your language, document it in the INSTALL file. 6. There is a file command-list.txt in the distribution main directory that categorizes commands by type, so they can be listed in appropriate subsections in the documentation's summary command list. Add an entry -for yours. To understand the categories, look at git-cmmands.txt +for yours. To understand the categories, look at git-commands.txt in the main directory. 7. Give the maintainer one paragraph to include in the RelNotes file diff --git a/Documentation/howto/revert-branch-rebase.txt b/Documentation/howto/revert-branch-rebase.txt index 84dd839db4..0d5419e1a9 100644 --- a/Documentation/howto/revert-branch-rebase.txt +++ b/Documentation/howto/revert-branch-rebase.txt @@ -12,7 +12,7 @@ How to revert an existing commit ================================ One of the changes I pulled into the 'master' branch turns out to -break building Git with GCC 2.95. While they were well intentioned +break building Git with GCC 2.95. While they were well-intentioned portability fixes, keeping things working with gcc-2.95 was also important. Here is what I did to revert the change in the 'master' branch and to adjust the 'pu' branch, using core Git tools and diff --git a/Documentation/line-range-format.txt b/Documentation/line-range-format.txt index 3e7ce72daa..d7f26039ca 100644 --- a/Documentation/line-range-format.txt +++ b/Documentation/line-range-format.txt @@ -1,3 +1,5 @@ +<start> and <end> can take one of these forms: + - number + If <start> or <end> is a number, it specifies an @@ -7,7 +9,10 @@ absolute line number (lines count from 1). - /regex/ + This form will use the first line matching the given -POSIX regex. If <end> is a regex, it will search +POSIX regex. If <start> is a regex, it will search from the end of +the previous `-L` range, if any, otherwise from the start of file. +If <start> is ``^/regex/'', it will search from the start of file. +If <end> is a regex, it will search starting at the line given by <start>. + @@ -15,11 +20,10 @@ starting at the line given by <start>. + This is only valid for <end> and will specify a number of lines before or after the line given by <start>. -+ -- :regex + -If the option's argument is of the form :regex, it denotes the range +If ``:<regex>'' is given in place of <start> and <end>, it denotes the range from the first funcname line that matches <regex>, up to the next -funcname line. -+ +funcname line. ``:<regex>'' searches from the end of the previous `-L` range, +if any, otherwise from the start of file. +``^:<regex>'' searches from the start of file. diff --git a/Documentation/pretty-options.txt b/Documentation/pretty-options.txt index 5e499421a4..eea0e306a8 100644 --- a/Documentation/pretty-options.txt +++ b/Documentation/pretty-options.txt @@ -28,7 +28,7 @@ people using 80-column terminals. This is a shorthand for "--pretty=oneline --abbrev-commit" used together. ---encoding[=<encoding>]:: +--encoding=<encoding>:: The commit objects record the encoding used for the log message in their encoding header; this option can be used to tell the command to re-code the commit log message in the encoding diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.txt index e157ec3fe7..5bdfb42852 100644 --- a/Documentation/rev-list-options.txt +++ b/Documentation/rev-list-options.txt @@ -119,7 +119,7 @@ if it is part of the log message. --no-min-parents:: --no-max-parents:: - Show only commits which have at least (or at most) that many + Show only commits which have at least (or at most) that many parent commits. In particular, `--max-parents=1` is the same as `--no-merges`, `--min-parents=2` is the same as `--merges`. `--max-parents=0` gives all root commits and `--min-parents=3` all octopus merges. @@ -369,7 +369,7 @@ each merge. The commits are: * `E` changes `quux` to "xyzzy", and its merge `P` combines the strings to "quux xyzzy". `P` is TREESAME to `O`, but not to `E`. -* `X` is an indpendent root commit that added a new file `side`, and `Y` +* `X` is an independent root commit that added a new file `side`, and `Y` modified it. `Y` is TREESAME to `X`. Its merge `Q` added `side` to `P`, and `Q` is TREESAME to `P`, but not to `Y`. @@ -849,7 +849,4 @@ options may be given. See linkgit:git-diff-files[1] for more options. -t:: Show the tree objects in the diff output. This implies '-r'. - --s:: - Suppress diff output. endif::git-rev-list[] diff --git a/Documentation/revisions.txt b/Documentation/revisions.txt index 09896a37b1..d477b3f6bc 100644 --- a/Documentation/revisions.txt +++ b/Documentation/revisions.txt @@ -58,9 +58,6 @@ the '$GIT_DIR/refs' directory or from the '$GIT_DIR/packed-refs' file. While the ref name encoding is unspecified, UTF-8 is preferred as some output processing may assume ref names in UTF-8. -'@':: - '@' alone is a shortcut for 'HEAD'. - '<refname>@\{<date>\}', e.g. 'master@\{yesterday\}', 'HEAD@\{5 minutes ago\}':: A ref followed by the suffix '@' with a date specification enclosed in a brace diff --git a/Documentation/technical/api-revision-walking.txt b/Documentation/technical/api-revision-walking.txt index b7d0d9a8a7..55b878ade8 100644 --- a/Documentation/technical/api-revision-walking.txt +++ b/Documentation/technical/api-revision-walking.txt @@ -59,7 +59,7 @@ function. `reset_revision_walk`:: Reset the flags used by the revision walking api. You can use - this to do multiple sequencial revision walks. + this to do multiple sequential revision walks. Data structures --------------- diff --git a/Documentation/technical/http-protocol.txt b/Documentation/technical/http-protocol.txt new file mode 100644 index 0000000000..a1173ee266 --- /dev/null +++ b/Documentation/technical/http-protocol.txt @@ -0,0 +1,503 @@ +HTTP transfer protocols +======================= + +Git supports two HTTP based transfer protocols. A "dumb" protocol +which requires only a standard HTTP server on the server end of the +connection, and a "smart" protocol which requires a Git aware CGI +(or server module). This document describes both protocols. + +As a design feature smart clients can automatically upgrade "dumb" +protocol URLs to smart URLs. This permits all users to have the +same published URL, and the peers automatically select the most +efficient transport available to them. + + +URL Format +---------- + +URLs for Git repositories accessed by HTTP use the standard HTTP +URL syntax documented by RFC 1738, so they are of the form: + + http://<host>:<port>/<path>?<searchpart> + +Within this documentation the placeholder $GIT_URL will stand for +the http:// repository URL entered by the end-user. + +Servers SHOULD handle all requests to locations matching $GIT_URL, as +both the "smart" and "dumb" HTTP protocols used by Git operate +by appending additional path components onto the end of the user +supplied $GIT_URL string. + +An example of a dumb client requesting for a loose object: + + $GIT_URL: http://example.com:8080/git/repo.git + URL request: http://example.com:8080/git/repo.git/objects/d0/49f6c27a2244e12041955e262a404c7faba355 + +An example of a smart request to a catch-all gateway: + + $GIT_URL: http://example.com/daemon.cgi?svc=git&q= + URL request: http://example.com/daemon.cgi?svc=git&q=/info/refs&service=git-receive-pack + +An example of a request to a submodule: + + $GIT_URL: http://example.com/git/repo.git/path/submodule.git + URL request: http://example.com/git/repo.git/path/submodule.git/info/refs + +Clients MUST strip a trailing '/', if present, from the user supplied +$GIT_URL string to prevent empty path tokens ('//') from appearing +in any URL sent to a server. Compatible clients MUST expand +'$GIT_URL/info/refs' as 'foo/info/refs' and not 'foo//info/refs'. + + +Authentication +-------------- + +Standard HTTP authentication is used if authentication is required +to access a repository, and MAY be configured and enforced by the +HTTP server software. + +Because Git repositories are accessed by standard path components +server administrators MAY use directory based permissions within +their HTTP server to control repository access. + +Clients SHOULD support Basic authentication as described by RFC 2616. +Servers SHOULD support Basic authentication by relying upon the +HTTP server placed in front of the Git server software. + +Servers SHOULD NOT require HTTP cookies for the purposes of +authentication or access control. + +Clients and servers MAY support other common forms of HTTP based +authentication, such as Digest authentication. + + +SSL +--- + +Clients and servers SHOULD support SSL, particularly to protect +passwords when relying on Basic HTTP authentication. + + +Session State +------------- + +The Git over HTTP protocol (much like HTTP itself) is stateless +from the perspective of the HTTP server side. All state MUST be +retained and managed by the client process. This permits simple +round-robin load-balancing on the server side, without needing to +worry about state management. + +Clients MUST NOT require state management on the server side in +order to function correctly. + +Servers MUST NOT require HTTP cookies in order to function correctly. +Clients MAY store and forward HTTP cookies during request processing +as described by RFC 2616 (HTTP/1.1). Servers SHOULD ignore any +cookies sent by a client. + + +General Request Processing +-------------------------- + +Except where noted, all standard HTTP behavior SHOULD be assumed +by both client and server. This includes (but is not necessarily +limited to): + +If there is no repository at $GIT_URL, or the resource pointed to by a +location matching $GIT_URL does not exist, the server MUST NOT respond +with '200 OK' response. A server SHOULD respond with +'404 Not Found', '410 Gone', or any other suitable HTTP status code +which does not imply the resource exists as requested. + +If there is a repository at $GIT_URL, but access is not currently +permitted, the server MUST respond with the '403 Forbidden' HTTP +status code. + +Servers SHOULD support both HTTP 1.0 and HTTP 1.1. +Servers SHOULD support chunked encoding for both request and response +bodies. + +Clients SHOULD support both HTTP 1.0 and HTTP 1.1. +Clients SHOULD support chunked encoding for both request and response +bodies. + +Servers MAY return ETag and/or Last-Modified headers. + +Clients MAY revalidate cached entities by including If-Modified-Since +and/or If-None-Match request headers. + +Servers MAY return '304 Not Modified' if the relevant headers appear +in the request and the entity has not changed. Clients MUST treat +'304 Not Modified' identical to '200 OK' by reusing the cached entity. + +Clients MAY reuse a cached entity without revalidation if the +Cache-Control and/or Expires header permits caching. Clients and +servers MUST follow RFC 2616 for cache controls. + + +Discovering References +---------------------- + +All HTTP clients MUST begin either a fetch or a push exchange by +discovering the references available on the remote repository. + +Dumb Clients +~~~~~~~~~~~~ + +HTTP clients that only support the "dumb" protocol MUST discover +references by making a request for the special info/refs file of +the repository. + +Dumb HTTP clients MUST make a GET request to $GIT_URL/info/refs, +without any search/query parameters. + + C: GET $GIT_URL/info/refs HTTP/1.0 + + S: 200 OK + S: + S: 95dcfa3633004da0049d3d0fa03f80589cbcaf31 refs/heads/maint + S: d049f6c27a2244e12041955e262a404c7faba355 refs/heads/master + S: 2cb58b79488a98d2721cea644875a8dd0026b115 refs/tags/v1.0 + S: a3c2e2402b99163d1d59756e5f207ae21cccba4c refs/tags/v1.0^{} + +The Content-Type of the returned info/refs entity SHOULD be +"text/plain; charset=utf-8", but MAY be any content type. +Clients MUST NOT attempt to validate the returned Content-Type. +Dumb servers MUST NOT return a return type starting with +"application/x-git-". + +Cache-Control headers MAY be returned to disable caching of the +returned entity. + +When examining the response clients SHOULD only examine the HTTP +status code. Valid responses are '200 OK', or '304 Not Modified'. + +The returned content is a UNIX formatted text file describing +each ref and its known value. The file SHOULD be sorted by name +according to the C locale ordering. The file SHOULD NOT include +the default ref named 'HEAD'. + + info_refs = *( ref_record ) + ref_record = any_ref / peeled_ref + + any_ref = obj-id HTAB refname LF + peeled_ref = obj-id HTAB refname LF + obj-id HTAB refname "^{}" LF + +Smart Clients +~~~~~~~~~~~~~ + +HTTP clients that support the "smart" protocol (or both the +"smart" and "dumb" protocols) MUST discover references by making +a parameterized request for the info/refs file of the repository. + +The request MUST contain exactly one query parameter, +'service=$servicename', where $servicename MUST be the service +name the client wishes to contact to complete the operation. +The request MUST NOT contain additional query parameters. + + C: GET $GIT_URL/info/refs?service=git-upload-pack HTTP/1.0 + + dumb server reply: + S: 200 OK + S: + S: 95dcfa3633004da0049d3d0fa03f80589cbcaf31 refs/heads/maint + S: d049f6c27a2244e12041955e262a404c7faba355 refs/heads/master + S: 2cb58b79488a98d2721cea644875a8dd0026b115 refs/tags/v1.0 + S: a3c2e2402b99163d1d59756e5f207ae21cccba4c refs/tags/v1.0^{} + + smart server reply: + S: 200 OK + S: Content-Type: application/x-git-upload-pack-advertisement + S: Cache-Control: no-cache + S: + S: 001e# service=git-upload-pack\n + S: 004895dcfa3633004da0049d3d0fa03f80589cbcaf31 refs/heads/maint\0multi_ack\n + S: 0042d049f6c27a2244e12041955e262a404c7faba355 refs/heads/master\n + S: 003c2cb58b79488a98d2721cea644875a8dd0026b115 refs/tags/v1.0\n + S: 003fa3c2e2402b99163d1d59756e5f207ae21cccba4c refs/tags/v1.0^{}\n + +Dumb Server Response +^^^^^^^^^^^^^^^^^^^^ +Dumb servers MUST respond with the dumb server reply format. + +See the prior section under dumb clients for a more detailed +description of the dumb server response. + +Smart Server Response +^^^^^^^^^^^^^^^^^^^^^ +If the server does not recognize the requested service name, or the +requested service name has been disabled by the server administrator, +the server MUST respond with the '403 Forbidden' HTTP status code. + +Otherwise, smart servers MUST respond with the smart server reply +format for the requested service name. + +Cache-Control headers SHOULD be used to disable caching of the +returned entity. + +The Content-Type MUST be 'application/x-$servicename-advertisement'. +Clients SHOULD fall back to the dumb protocol if another content +type is returned. When falling back to the dumb protocol clients +SHOULD NOT make an additional request to $GIT_URL/info/refs, but +instead SHOULD use the response already in hand. Clients MUST NOT +continue if they do not support the dumb protocol. + +Clients MUST validate the status code is either '200 OK' or +'304 Not Modified'. + +Clients MUST validate the first five bytes of the response entity +matches the regex "^[0-9a-f]{4}#". If this test fails, clients +MUST NOT continue. + +Clients MUST parse the entire response as a sequence of pkt-line +records. + +Clients MUST verify the first pkt-line is "# service=$servicename". +Servers MUST set $servicename to be the request parameter value. +Servers SHOULD include an LF at the end of this line. +Clients MUST ignore an LF at the end of the line. + +Servers MUST terminate the response with the magic "0000" end +pkt-line marker. + +The returned response is a pkt-line stream describing each ref and +its known value. The stream SHOULD be sorted by name according to +the C locale ordering. The stream SHOULD include the default ref +named 'HEAD' as the first ref. The stream MUST include capability +declarations behind a NUL on the first ref. + + smart_reply = PKT-LINE("# service=$servicename" LF) + ref_list + "0000" + ref_list = empty_list / non_empty_list + + empty_list = PKT-LINE(zero-id SP "capabilities^{}" NUL cap-list LF) + + non_empty_list = PKT-LINE(obj-id SP name NUL cap_list LF) + *ref_record + + cap-list = capability *(SP capability) + capability = 1*(LC_ALPHA / DIGIT / "-" / "_") + LC_ALPHA = %x61-7A + + ref_record = any_ref / peeled_ref + any_ref = PKT-LINE(obj-id SP name LF) + peeled_ref = PKT-LINE(obj-id SP name LF) + PKT-LINE(obj-id SP name "^{}" LF + +Smart Service git-upload-pack +------------------------------ +This service reads from the repository pointed to by $GIT_URL. + +Clients MUST first perform ref discovery with +'$GIT_URL/info/refs?service=git-upload-pack'. + + C: POST $GIT_URL/git-upload-pack HTTP/1.0 + C: Content-Type: application/x-git-upload-pack-request + C: + C: 0032want 0a53e9ddeaddad63ad106860237bbf53411d11a7\n + C: 0032have 441b40d833fdfa93eb2908e52742248faf0ee993\n + C: 0000 + + S: 200 OK + S: Content-Type: application/x-git-upload-pack-result + S: Cache-Control: no-cache + S: + S: ....ACK %s, continue + S: ....NAK + +Clients MUST NOT reuse or revalidate a cached reponse. +Servers MUST include sufficient Cache-Control headers +to prevent caching of the response. + +Servers SHOULD support all capabilities defined here. + +Clients MUST send at least one 'want' command in the request body. +Clients MUST NOT reference an id in a 'want' command which did not +appear in the response obtained through ref discovery unless the +server advertises capability "allow-tip-sha1-in-want". + + compute_request = want_list + have_list + request_end + request_end = "0000" / "done" + + want_list = PKT-LINE(want NUL cap_list LF) + *(want_pkt) + want_pkt = PKT-LINE(want LF) + want = "want" SP id + cap_list = *(SP capability) SP + + have_list = *PKT-LINE("have" SP id LF) + +TODO: Document this further. +TODO: Don't use uppercase for variable names below. + +The Negotiation Algorithm +~~~~~~~~~~~~~~~~~~~~~~~~~ +The computation to select the minimal pack proceeds as follows +(c = client, s = server): + + init step: + (c) Use ref discovery to obtain the advertised refs. + (c) Place any object seen into set ADVERTISED. + + (c) Build an empty set, COMMON, to hold the objects that are later + determined to be on both ends. + (c) Build a set, WANT, of the objects from ADVERTISED the client + wants to fetch, based on what it saw during ref discovery. + + (c) Start a queue, C_PENDING, ordered by commit time (popping newest + first). Add all client refs. When a commit is popped from + the queue its parents SHOULD be automatically inserted back. + Commits MUST only enter the queue once. + + one compute step: + (c) Send one $GIT_URL/git-upload-pack request: + + C: 0032want <WANT #1>............................... + C: 0032want <WANT #2>............................... + .... + C: 0032have <COMMON #1>............................. + C: 0032have <COMMON #2>............................. + .... + C: 0032have <HAVE #1>............................... + C: 0032have <HAVE #2>............................... + .... + C: 0000 + + The stream is organized into "commands", with each command + appearing by itself in a pkt-line. Within a command line + the text leading up to the first space is the command name, + and the remainder of the line to the first LF is the value. + Command lines are terminated with an LF as the last byte of + the pkt-line value. + + Commands MUST appear in the following order, if they appear + at all in the request stream: + + * want + * have + + The stream is terminated by a pkt-line flush ("0000"). + + A single "want" or "have" command MUST have one hex formatted + SHA-1 as its value. Multiple SHA-1s MUST be sent by sending + multiple commands. + + The HAVE list is created by popping the first 32 commits + from C_PENDING. Less can be supplied if C_PENDING empties. + + If the client has sent 256 HAVE commits and has not yet + received one of those back from S_COMMON, or the client has + emptied C_PENDING it SHOULD include a "done" command to let + the server know it won't proceed: + + C: 0009done + + (s) Parse the git-upload-pack request: + + Verify all objects in WANT are directly reachable from refs. + + The server MAY walk backwards through history or through + the reflog to permit slightly stale requests. + + If no WANT objects are received, send an error: + +TODO: Define error if no want lines are requested. + + If any WANT object is not reachable, send an error: + +TODO: Define error if an invalid want is requested. + + Create an empty list, S_COMMON. + + If 'have' was sent: + + Loop through the objects in the order supplied by the client. + For each object, if the server has the object reachable from + a ref, add it to S_COMMON. If a commit is added to S_COMMON, + do not add any ancestors, even if they also appear in HAVE. + + (s) Send the git-upload-pack response: + + If the server has found a closed set of objects to pack or the + request ends with "done", it replies with the pack. + +TODO: Document the pack based response + S: PACK... + + The returned stream is the side-band-64k protocol supported + by the git-upload-pack service, and the pack is embedded into + stream 1. Progress messages from the server side MAY appear + in stream 2. + + Here a "closed set of objects" is defined to have at least + one path from every WANT to at least one COMMON object. + + If the server needs more information, it replies with a + status continue response: + +TODO: Document the non-pack response + + (c) Parse the upload-pack response: + +TODO: Document parsing response + + Do another compute step. + + +Smart Service git-receive-pack +------------------------------ +This service reads from the repository pointed to by $GIT_URL. + +Clients MUST first perform ref discovery with +'$GIT_URL/info/refs?service=git-receive-pack'. + + C: POST $GIT_URL/git-receive-pack HTTP/1.0 + C: Content-Type: application/x-git-receive-pack-request + C: + C: ....0a53e9ddeaddad63ad106860237bbf53411d11a7 441b40d833fdfa93eb2908e52742248faf0ee993 refs/heads/maint\0 report-status + C: 0000 + C: PACK.... + + S: 200 OK + S: Content-Type: application/x-git-receive-pack-result + S: Cache-Control: no-cache + S: + S: .... + +Clients MUST NOT reuse or revalidate a cached reponse. +Servers MUST include sufficient Cache-Control headers +to prevent caching of the response. + +Servers SHOULD support all capabilities defined here. + +Clients MUST send at least one command in the request body. +Within the command portion of the request body clients SHOULD send +the id obtained through ref discovery as old_id. + + update_request = command_list + "PACK" <binary data> + + command_list = PKT-LINE(command NUL cap_list LF) + *(command_pkt) + command_pkt = PKT-LINE(command LF) + cap_list = *(SP capability) SP + + command = create / delete / update + create = zero-id SP new_id SP name + delete = old_id SP zero-id SP name + update = old_id SP new_id SP name + +TODO: Document this further. + + +References +---------- + +link:http://www.ietf.org/rfc/rfc1738.txt[RFC 1738: Uniform Resource Locators (URL)] +link:http://www.ietf.org/rfc/rfc2616.txt[RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1] +link:technical/pack-protocol.txt +link:technical/protocol-capabilities.txt diff --git a/Documentation/technical/index-format.txt b/Documentation/technical/index-format.txt index 0810251f5a..f352a9b22e 100644 --- a/Documentation/technical/index-format.txt +++ b/Documentation/technical/index-format.txt @@ -175,7 +175,7 @@ Git index format A conflict is represented in the index as a set of higher stage entries. When a conflict is resolved (e.g. with "git add path"), these higher - stage entries will be removed and a stage-0 entry with proper resoluton + stage entries will be removed and a stage-0 entry with proper resolution is added. When these higher stage entries are removed, they are saved in the diff --git a/Documentation/technical/protocol-capabilities.txt b/Documentation/technical/protocol-capabilities.txt index b15517fa06..fd8ffa5df3 100644 --- a/Documentation/technical/protocol-capabilities.txt +++ b/Documentation/technical/protocol-capabilities.txt @@ -18,11 +18,12 @@ was sent. Server MUST NOT ignore capabilities that client requested and server advertised. As a consequence of these rules, server MUST NOT advertise capabilities it does not understand. -The 'report-status' and 'delete-refs' capabilities are sent and +The 'report-status', 'delete-refs', and 'quiet' capabilities are sent and recognized by the receive-pack (push to server) process. -The 'ofs-delta' capability is sent and recognized by both upload-pack -and receive-pack protocols. +The 'ofs-delta' and 'side-band-64k' capabilities are sent and recognized +by both upload-pack and receive-pack protocols. The 'agent' capability +may optionally be sent in both protocols. All other capabilities are only recognized by the upload-pack (fetch from server) process. @@ -123,6 +124,20 @@ Server can send, and client understand PACKv2 with delta referring to its base by position in pack rather than by an obj-id. That is, they can send/read OBJ_OFS_DELTA (aka type 6) in a packfile. +agent +----- + +The server may optionally send a capability of the form `agent=X` to +notify the client that the server is running version `X`. The client may +optionally return its own agent string by responding with an `agent=Y` +capability (but it MUST NOT do so if the server did not mention the +agent capability). The `X` and `Y` strings may contain any printable +ASCII characters except space (i.e., the byte range 32 < x < 127), and +are typically of the form "package/version" (e.g., "git/1.8.3.1"). The +agent strings are purely informative for statistics and debugging +purposes, and MUST NOT be used to programatically assume the presence +or absence of particular features. + shallow ------- @@ -168,7 +183,7 @@ of whether or not there are tags available. report-status ------------- -The upload-pack process can receive a 'report-status' capability, +The receive-pack process can receive a 'report-status' capability, which tells it that the client wants a report of what happened after a packfile upload and reference update. If the pushing client requests this capability, after unpacking and updating references the server @@ -185,3 +200,20 @@ it is capable of accepting a zero-id value as the target value of a reference update. It is not sent back by the client, it simply informs the client that it can be sent zero-id values to delete references. + +quiet +----- + +If the receive-pack server advertises the 'quiet' capability, it is +capable of silencing human-readable progress output which otherwise may +be shown when processing the received pack. A send-pack client should +respond with the 'quiet' capability to suppress server-side progress +reporting if the local progress reporting is also being suppressed +(e.g., via `push -q`, or if stderr does not go to a tty). + +allow-tip-sha1-in-want +---------------------- + +If the upload-pack server advertises this capability, fetch-pack may +send "want" lines with SHA-1s that exist at the server but are not +advertised by upload-pack. diff --git a/Documentation/technical/racy-git.txt b/Documentation/technical/racy-git.txt index f716d6d97f..242a044db9 100644 --- a/Documentation/technical/racy-git.txt +++ b/Documentation/technical/racy-git.txt @@ -46,7 +46,7 @@ because in-core timestamps can have finer granularity than on-disk timestamps, resulting in meaningless changes when an inode is evicted from the inode cache. See commit 8ce13b0 of git://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git -([PATCH] Sync in core time granuality with filesystems, +([PATCH] Sync in core time granularity with filesystems, 2005-01-04). Racy Git diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt index e364007d7c..fe723e4722 100644 --- a/Documentation/user-manual.txt +++ b/Documentation/user-manual.txt @@ -4675,5 +4675,5 @@ Write a chapter on using plumbing and writing scripts. Alternates, clone -reference, etc. More on recovery from repository corruption. See: - http://marc.theaimsgroup.com/?l=git&m=117263864820799&w=2 - http://marc.theaimsgroup.com/?l=git&m=117147855503798&w=2 + http://marc.info/?l=git&m=117263864820799&w=2 + http://marc.info/?l=git&m=117147855503798&w=2 diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index b4d4e5045f..b444c18f17 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,7 +1,7 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=v1.8.3.GIT +DEF_VER=v1.8.4.GIT LF=' ' @@ -654,7 +654,6 @@ LIB_H += color.h LIB_H += column.h LIB_H += commit.h LIB_H += compat/bswap.h -LIB_H += compat/cygwin.h LIB_H += compat/mingw.h LIB_H += compat/obstack.h LIB_H += compat/poll/poll.h @@ -912,6 +911,7 @@ BUILTIN_OBJS += builtin/bundle.o BUILTIN_OBJS += builtin/cat-file.o BUILTIN_OBJS += builtin/check-attr.o BUILTIN_OBJS += builtin/check-ignore.o +BUILTIN_OBJS += builtin/check-mailmap.o BUILTIN_OBJS += builtin/check-ref-format.o BUILTIN_OBJS += builtin/checkout-index.o BUILTIN_OBJS += builtin/checkout.o @@ -1182,6 +1182,9 @@ ifdef NEEDS_SSL_WITH_CRYPTO else LIB_4_CRYPTO = $(OPENSSL_LINK) -lcrypto endif +ifdef APPLE_COMMON_CRYPTO + LIB_4_CRYPTO += -framework Security -framework CoreFoundation +endif endif ifdef NEEDS_LIBICONV ifdef ICONVDIR @@ -1 +1 @@ -Documentation/RelNotes/1.8.4.txt
\ No newline at end of file +Documentation/RelNotes/1.8.5.txt
\ No newline at end of file @@ -35,7 +35,7 @@ static struct { { "implicitidentity", &advice_implicit_identity }, { "detachedhead", &advice_detached_head }, { "setupstreamfailure", &advice_set_upstream_failure }, - { "object_name_warning", &advice_object_name_warning }, + { "objectnamewarning", &advice_object_name_warning }, { "rmhints", &advice_rm_hints }, /* make this an alias for backward compatibility */ @@ -21,6 +21,7 @@ extern int advice_object_name_warning; extern int advice_rm_hints; int git_default_advice_config(const char *var, const char *value); +__attribute__((format (printf, 1, 2))) void advise(const char *advice, ...); int error_resolve_conflict(const char *me); extern void NORETURN die_resolve_conflict(const char *me); diff --git a/argv-array.h b/argv-array.h index 40248d424c..85ba438ac1 100644 --- a/argv-array.h +++ b/argv-array.h @@ -15,6 +15,7 @@ void argv_array_init(struct argv_array *); void argv_array_push(struct argv_array *, const char *); __attribute__((format (printf,2,3))) void argv_array_pushf(struct argv_array *, const char *fmt, ...); +LAST_ARG_MUST_BE_NULL void argv_array_pushl(struct argv_array *, ...); void argv_array_pop(struct argv_array *); void argv_array_clear(struct argv_array *); @@ -40,6 +40,7 @@ extern int cmd_checkout(int argc, const char **argv, const char *prefix); extern int cmd_checkout_index(int argc, const char **argv, const char *prefix); extern int cmd_check_attr(int argc, const char **argv, const char *prefix); extern int cmd_check_ignore(int argc, const char **argv, const char *prefix); +extern int cmd_check_mailmap(int argc, const char **argv, const char *prefix); extern int cmd_check_ref_format(int argc, const char **argv, const char *prefix); extern int cmd_cherry(int argc, const char **argv, const char *prefix); extern int cmd_cherry_pick(int argc, const char **argv, const char *prefix); diff --git a/builtin/add.c b/builtin/add.c index 9d52fc7915..ae0bdc78bb 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -309,6 +309,7 @@ static int edit_patch(int argc, const char **argv, const char *prefix) argc = setup_revisions(argc, argv, &rev, NULL); rev.diffopt.output_format = DIFF_FORMAT_PATCH; + rev.diffopt.use_color = 0; DIFF_OPT_SET(&rev.diffopt, IGNORE_DIRTY_SUBMODULES); out = open(file, O_CREAT | O_WRONLY, 0666); if (out < 0) diff --git a/builtin/apply.c b/builtin/apply.c index 0e9b631db6..ef32e4f624 100644 --- a/builtin/apply.c +++ b/builtin/apply.c @@ -473,7 +473,7 @@ static char *find_name_gnu(const char *line, const char *def, int p_value) /* * Proposed "new-style" GNU patch/diff format; see - * http://marc.theaimsgroup.com/?l=git&m=112927316408690&w=2 + * http://marc.info/?l=git&m=112927316408690&w=2 */ if (unquote_c_style(&name, line, NULL)) { strbuf_release(&name); @@ -722,7 +722,7 @@ static char *find_name(const char *line, char *def, int p_value, int terminate) static char *find_name_traditional(const char *line, char *def, int p_value) { - size_t len = strlen(line); + size_t len; size_t date_len; if (*line == '"') { @@ -2999,7 +2999,7 @@ static int read_blob_object(struct strbuf *buf, const unsigned char *sha1, unsig return 0; } -static int read_file_or_gitlink(struct cache_entry *ce, struct strbuf *buf) +static int read_file_or_gitlink(const struct cache_entry *ce, struct strbuf *buf) { if (!ce) return 0; @@ -3117,7 +3117,7 @@ static struct patch *previous_patch(struct patch *patch, int *gone) return previous; } -static int verify_index_match(struct cache_entry *ce, struct stat *st) +static int verify_index_match(const struct cache_entry *ce, struct stat *st) { if (S_ISGITLINK(ce->ce_mode)) { if (!S_ISDIR(st->st_mode)) @@ -3130,7 +3130,7 @@ static int verify_index_match(struct cache_entry *ce, struct stat *st) #define SUBMODULE_PATCH_WITHOUT_INDEX 1 static int load_patch_target(struct strbuf *buf, - struct cache_entry *ce, + const struct cache_entry *ce, struct stat *st, const char *name, unsigned expected_mode) @@ -3160,7 +3160,8 @@ static int load_patch_target(struct strbuf *buf, * we read from the result of a previous diff. */ static int load_preimage(struct image *image, - struct patch *patch, struct stat *st, struct cache_entry *ce) + struct patch *patch, struct stat *st, + const struct cache_entry *ce) { struct strbuf buf = STRBUF_INIT; size_t len; @@ -3273,7 +3274,7 @@ static int load_current(struct image *image, struct patch *patch) } static int try_threeway(struct image *image, struct patch *patch, - struct stat *st, struct cache_entry *ce) + struct stat *st, const struct cache_entry *ce) { unsigned char pre_sha1[20], post_sha1[20], our_sha1[20]; struct strbuf buf = STRBUF_INIT; @@ -3343,7 +3344,7 @@ static int try_threeway(struct image *image, struct patch *patch, return 0; } -static int apply_data(struct patch *patch, struct stat *st, struct cache_entry *ce) +static int apply_data(struct patch *patch, struct stat *st, const struct cache_entry *ce) { struct image image; @@ -3847,7 +3848,7 @@ static void add_index_file(const char *path, unsigned mode, void *buf, unsigned const char *s = buf; if (get_sha1_hex(s + strlen("Subproject commit "), ce->sha1)) - die(_("corrupt patch for subproject %s"), path); + die(_("corrupt patch for submodule %s"), path); } else { if (!cached) { if (lstat(path, &st) < 0) @@ -4362,23 +4363,23 @@ int cmd_apply(int argc, const char **argv, const char *prefix_) { OPTION_CALLBACK, 'p', NULL, NULL, N_("num"), N_("remove <num> leading slashes from traditional diff paths"), 0, option_parse_p }, - OPT_BOOLEAN(0, "no-add", &no_add, + OPT_BOOL(0, "no-add", &no_add, N_("ignore additions made by the patch")), - OPT_BOOLEAN(0, "stat", &diffstat, + OPT_BOOL(0, "stat", &diffstat, N_("instead of applying the patch, output diffstat for the input")), OPT_NOOP_NOARG(0, "allow-binary-replacement"), OPT_NOOP_NOARG(0, "binary"), - OPT_BOOLEAN(0, "numstat", &numstat, + OPT_BOOL(0, "numstat", &numstat, N_("show number of added and deleted lines in decimal notation")), - OPT_BOOLEAN(0, "summary", &summary, + OPT_BOOL(0, "summary", &summary, N_("instead of applying the patch, output a summary for the input")), - OPT_BOOLEAN(0, "check", &check, + OPT_BOOL(0, "check", &check, N_("instead of applying the patch, see if the patch is applicable")), - OPT_BOOLEAN(0, "index", &check_index, + OPT_BOOL(0, "index", &check_index, N_("make sure the patch is applicable to the current index")), - OPT_BOOLEAN(0, "cached", &cached, + OPT_BOOL(0, "cached", &cached, N_("apply a patch without touching the working tree")), - OPT_BOOLEAN(0, "apply", &force_apply, + OPT_BOOL(0, "apply", &force_apply, N_("also apply the patch (use with --stat/--summary/--check)")), OPT_BOOL('3', "3way", &threeway, N_( "attempt three-way merge if a patch does not apply")), @@ -4398,13 +4399,13 @@ int cmd_apply(int argc, const char **argv, const char *prefix_) { OPTION_CALLBACK, 0, "ignore-whitespace", NULL, NULL, N_("ignore changes in whitespace when finding context"), PARSE_OPT_NOARG, option_parse_space_change }, - OPT_BOOLEAN('R', "reverse", &apply_in_reverse, + OPT_BOOL('R', "reverse", &apply_in_reverse, N_("apply the patch in reverse")), - OPT_BOOLEAN(0, "unidiff-zero", &unidiff_zero, + OPT_BOOL(0, "unidiff-zero", &unidiff_zero, N_("don't expect at least one line of context")), - OPT_BOOLEAN(0, "reject", &apply_with_reject, + OPT_BOOL(0, "reject", &apply_with_reject, N_("leave the rejected hunks in corresponding *.rej files")), - OPT_BOOLEAN(0, "allow-overlap", &allow_overlap, + OPT_BOOL(0, "allow-overlap", &allow_overlap, N_("allow overlapping hunks")), OPT__VERBOSE(&apply_verbosely, N_("be verbose")), OPT_BIT(0, "inaccurate-eof", &options, diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c index e3884e3bb6..3324229025 100644 --- a/builtin/bisect--helper.c +++ b/builtin/bisect--helper.c @@ -13,10 +13,10 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix) int next_all = 0; int no_checkout = 0; struct option options[] = { - OPT_BOOLEAN(0, "next-all", &next_all, - N_("perform 'git bisect next'")), - OPT_BOOLEAN(0, "no-checkout", &no_checkout, - N_("update BISECT_HEAD instead of checking out the current commit")), + OPT_BOOL(0, "next-all", &next_all, + N_("perform 'git bisect next'")), + OPT_BOOL(0, "no-checkout", &no_checkout, + N_("update BISECT_HEAD instead of checking out the current commit")), OPT_END() }; diff --git a/builtin/blame.c b/builtin/blame.c index 56e3d6b7b4..6da7233968 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -22,6 +22,7 @@ #include "utf8.h" #include "userdiff.h" #include "line-range.h" +#include "line-log.h" static char blame_usage[] = N_("git blame [options] [rev-opts] [rev] [--] file"); @@ -1931,18 +1932,6 @@ static const char *add_prefix(const char *prefix, const char *path) return prefix_path(prefix, prefix ? strlen(prefix) : 0, path); } -/* - * Parsing of -L option - */ -static void prepare_blame_range(struct scoreboard *sb, - const char *bottomtop, - long lno, - long *bottom, long *top) -{ - if (parse_range_arg(bottomtop, nth_line_cb, sb, lno, bottom, top, sb->path)) - usage(blame_usage); -} - static int git_blame_config(const char *var, const char *value, void *cb) { if (!strcmp(var, "blame.showroot")) { @@ -2239,38 +2228,27 @@ static int blame_move_callback(const struct option *option, const char *arg, int return 0; } -static int blame_bottomtop_callback(const struct option *option, const char *arg, int unset) -{ - const char **bottomtop = option->value; - if (!arg) - return -1; - if (*bottomtop) - die("More than one '-L n,m' option given"); - *bottomtop = arg; - return 0; -} - int cmd_blame(int argc, const char **argv, const char *prefix) { struct rev_info revs; const char *path; struct scoreboard sb; struct origin *o; - struct blame_entry *ent; - long dashdash_pos, bottom, top, lno; + struct blame_entry *ent = NULL; + long dashdash_pos, lno; const char *final_commit_name = NULL; enum object_type type; - static const char *bottomtop = NULL; + static struct string_list range_list; static int output_option = 0, opt = 0; static int show_stats = 0; static const char *revs_file = NULL; static const char *contents_from = NULL; static const struct option options[] = { - OPT_BOOLEAN(0, "incremental", &incremental, N_("Show blame entries as we find them, incrementally")), - OPT_BOOLEAN('b', NULL, &blank_boundary, N_("Show blank SHA-1 for boundary commits (Default: off)")), - OPT_BOOLEAN(0, "root", &show_root, N_("Do not treat root commits as boundaries (Default: off)")), - OPT_BOOLEAN(0, "show-stats", &show_stats, N_("Show work cost statistics")), + OPT_BOOL(0, "incremental", &incremental, N_("Show blame entries as we find them, incrementally")), + OPT_BOOL('b', NULL, &blank_boundary, N_("Show blank SHA-1 for boundary commits (Default: off)")), + OPT_BOOL(0, "root", &show_root, N_("Do not treat root commits as boundaries (Default: off)")), + OPT_BOOL(0, "show-stats", &show_stats, N_("Show work cost statistics")), OPT_BIT(0, "score-debug", &output_option, N_("Show output score for blame entries"), OUTPUT_SHOW_SCORE), OPT_BIT('f', "show-name", &output_option, N_("Show original filename (Default: auto)"), OUTPUT_SHOW_NAME), OPT_BIT('n', "show-number", &output_option, N_("Show original linenumber (Default: off)"), OUTPUT_SHOW_NUMBER), @@ -2287,13 +2265,16 @@ int cmd_blame(int argc, const char **argv, const char *prefix) OPT_STRING(0, "contents", &contents_from, N_("file"), N_("Use <file>'s contents as the final image")), { OPTION_CALLBACK, 'C', NULL, &opt, N_("score"), N_("Find line copies within and across files"), PARSE_OPT_OPTARG, blame_copy_callback }, { OPTION_CALLBACK, 'M', NULL, &opt, N_("score"), N_("Find line movements within and across files"), PARSE_OPT_OPTARG, blame_move_callback }, - OPT_CALLBACK('L', NULL, &bottomtop, N_("n,m"), N_("Process only line range n,m, counting from 1"), blame_bottomtop_callback), + OPT_STRING_LIST('L', NULL, &range_list, N_("n,m"), N_("Process only line range n,m, counting from 1")), OPT__ABBREV(&abbrev), OPT_END() }; struct parse_opt_ctx_t ctx; int cmd_is_annotate = !strcmp(argv[0], "annotate"); + struct range_set ranges; + unsigned int range_i; + long anchor; git_config(git_blame_config, NULL); init_revisions(&revs, NULL); @@ -2486,22 +2467,48 @@ parse_done: num_read_blob++; lno = prepare_lines(&sb); - bottom = top = 0; - if (bottomtop) - prepare_blame_range(&sb, bottomtop, lno, &bottom, &top); - if (bottom < 1) - bottom = 1; - if (top < 1) - top = lno; - bottom--; - if (lno < top || lno < bottom) - die("file %s has only %lu lines", path, lno); - - ent = xcalloc(1, sizeof(*ent)); - ent->lno = bottom; - ent->num_lines = top - bottom; - ent->suspect = o; - ent->s_lno = bottom; + if (lno && !range_list.nr) + string_list_append(&range_list, xstrdup("1")); + + anchor = 1; + range_set_init(&ranges, range_list.nr); + for (range_i = 0; range_i < range_list.nr; ++range_i) { + long bottom, top; + if (parse_range_arg(range_list.items[range_i].string, + nth_line_cb, &sb, lno, anchor, + &bottom, &top, sb.path)) + usage(blame_usage); + if (lno < top || ((lno || bottom) && lno < bottom)) + die("file %s has only %lu lines", path, lno); + if (bottom < 1) + bottom = 1; + if (top < 1) + top = lno; + bottom--; + range_set_append_unsafe(&ranges, bottom, top); + anchor = top + 1; + } + sort_and_merge_range_set(&ranges); + + for (range_i = ranges.nr; range_i > 0; --range_i) { + const struct range *r = &ranges.ranges[range_i - 1]; + long bottom = r->start; + long top = r->end; + struct blame_entry *next = ent; + ent = xcalloc(1, sizeof(*ent)); + ent->lno = bottom; + ent->num_lines = top - bottom; + ent->suspect = o; + ent->s_lno = bottom; + ent->next = next; + if (next) + next->prev = ent; + origin_incref(o); + } + origin_decref(o); + + range_set_release(&ranges); + string_list_clear(&range_list, 0); sb.ent = ent; sb.path = path; diff --git a/builtin/branch.c b/builtin/branch.c index 083689063f..0903763702 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -797,7 +797,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix) OPT_SET_INT( 0, "set-upstream", &track, N_("change upstream info"), BRANCH_TRACK_OVERRIDE), OPT_STRING('u', "set-upstream-to", &new_upstream, "upstream", "change the upstream info"), - OPT_BOOLEAN(0, "unset-upstream", &unset_upstream, "Unset the upstream info"), + OPT_BOOL(0, "unset-upstream", &unset_upstream, "Unset the upstream info"), OPT__COLOR(&branch_use_color, N_("use colored output")), OPT_SET_INT('r', "remotes", &kinds, N_("act on remote-tracking branches"), REF_REMOTE_BRANCH), @@ -822,10 +822,10 @@ int cmd_branch(int argc, const char **argv, const char *prefix) OPT_BIT('D', NULL, &delete, N_("delete branch (even if not merged)"), 2), OPT_BIT('m', "move", &rename, N_("move/rename a branch and its reflog"), 1), OPT_BIT('M', NULL, &rename, N_("move/rename a branch, even if target exists"), 2), - OPT_BOOLEAN(0, "list", &list, N_("list branch names")), - OPT_BOOLEAN('l', "create-reflog", &reflog, N_("create the branch's reflog")), - OPT_BOOLEAN(0, "edit-description", &edit_description, - N_("edit the description for the branch")), + OPT_BOOL(0, "list", &list, N_("list branch names")), + OPT_BOOL('l', "create-reflog", &reflog, N_("create the branch's reflog")), + OPT_BOOL(0, "edit-description", &edit_description, + N_("edit the description for the branch")), OPT__FORCE(&force_create, N_("force creation (when already exists)")), { OPTION_CALLBACK, 0, "no-merged", &merge_filter_ref, @@ -872,7 +872,8 @@ int cmd_branch(int argc, const char **argv, const char *prefix) if (with_commit || merge_filter != NO_FILTER) list = 1; - if (!!delete + !!rename + !!force_create + !!list + !!new_upstream + !!unset_upstream > 1) + if (!!delete + !!rename + !!force_create + !!new_upstream + + list + unset_upstream > 1) usage_with_options(builtin_branch_usage, options); if (abbrev == -1) diff --git a/builtin/cat-file.c b/builtin/cat-file.c index 045cee7bce..41afaa534b 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -13,9 +13,6 @@ #include "userdiff.h" #include "streaming.h" -#define BATCH 1 -#define BATCH_CHECK 2 - static int cat_one_file(int opt, const char *exp_type, const char *obj_name) { unsigned char sha1[20]; @@ -117,54 +114,195 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name) return 0; } -static int batch_one_object(const char *obj_name, int print_contents) -{ +struct expand_data { unsigned char sha1[20]; - enum object_type type = 0; + enum object_type type; unsigned long size; - void *contents = NULL; + unsigned long disk_size; + const char *rest; + + /* + * If mark_query is true, we do not expand anything, but rather + * just mark the object_info with items we wish to query. + */ + int mark_query; + + /* + * Whether to split the input on whitespace before feeding it to + * get_sha1; this is decided during the mark_query phase based on + * whether we have a %(rest) token in our format. + */ + int split_on_whitespace; + + /* + * After a mark_query run, this object_info is set up to be + * passed to sha1_object_info_extended. It will point to the data + * elements above, so you can retrieve the response from there. + */ + struct object_info info; +}; + +static int is_atom(const char *atom, const char *s, int slen) +{ + int alen = strlen(atom); + return alen == slen && !memcmp(atom, s, alen); +} + +static void expand_atom(struct strbuf *sb, const char *atom, int len, + void *vdata) +{ + struct expand_data *data = vdata; + + if (is_atom("objectname", atom, len)) { + if (!data->mark_query) + strbuf_addstr(sb, sha1_to_hex(data->sha1)); + } else if (is_atom("objecttype", atom, len)) { + if (data->mark_query) + data->info.typep = &data->type; + else + strbuf_addstr(sb, typename(data->type)); + } else if (is_atom("objectsize", atom, len)) { + if (data->mark_query) + data->info.sizep = &data->size; + else + strbuf_addf(sb, "%lu", data->size); + } else if (is_atom("objectsize:disk", atom, len)) { + if (data->mark_query) + data->info.disk_sizep = &data->disk_size; + else + strbuf_addf(sb, "%lu", data->disk_size); + } else if (is_atom("rest", atom, len)) { + if (data->mark_query) + data->split_on_whitespace = 1; + else if (data->rest) + strbuf_addstr(sb, data->rest); + } else + die("unknown format element: %.*s", len, atom); +} + +static size_t expand_format(struct strbuf *sb, const char *start, void *data) +{ + const char *end; + + if (*start != '(') + return 0; + end = strchr(start + 1, ')'); + if (!end) + die("format element '%s' does not end in ')'", start); + + expand_atom(sb, start + 1, end - start - 1, data); + + return end - start + 1; +} + +static void print_object_or_die(int fd, const unsigned char *sha1, + enum object_type type, unsigned long size) +{ + if (type == OBJ_BLOB) { + if (stream_blob_to_fd(fd, sha1, NULL, 0) < 0) + die("unable to stream %s to stdout", sha1_to_hex(sha1)); + } + else { + enum object_type rtype; + unsigned long rsize; + void *contents; + + contents = read_sha1_file(sha1, &rtype, &rsize); + if (!contents) + die("object %s disappeared", sha1_to_hex(sha1)); + if (rtype != type) + die("object %s changed type!?", sha1_to_hex(sha1)); + if (rsize != size) + die("object %s change size!?", sha1_to_hex(sha1)); + + write_or_die(fd, contents, size); + free(contents); + } +} + +struct batch_options { + int enabled; + int print_contents; + const char *format; +}; + +static int batch_one_object(const char *obj_name, struct batch_options *opt, + struct expand_data *data) +{ + struct strbuf buf = STRBUF_INIT; if (!obj_name) return 1; - if (get_sha1(obj_name, sha1)) { + if (get_sha1(obj_name, data->sha1)) { printf("%s missing\n", obj_name); fflush(stdout); return 0; } - if (print_contents == BATCH) - contents = read_sha1_file(sha1, &type, &size); - else - type = sha1_object_info(sha1, &size); - - if (type <= 0) { + if (sha1_object_info_extended(data->sha1, &data->info) < 0) { printf("%s missing\n", obj_name); fflush(stdout); - if (print_contents == BATCH) - free(contents); return 0; } - printf("%s %s %lu\n", sha1_to_hex(sha1), typename(type), size); - fflush(stdout); + strbuf_expand(&buf, opt->format, expand_format, data); + strbuf_addch(&buf, '\n'); + write_or_die(1, buf.buf, buf.len); + strbuf_release(&buf); - if (print_contents == BATCH) { - write_or_die(1, contents, size); - printf("\n"); - fflush(stdout); - free(contents); + if (opt->print_contents) { + print_object_or_die(1, data->sha1, data->type, data->size); + write_or_die(1, "\n", 1); } - return 0; } -static int batch_objects(int print_contents) +static int batch_objects(struct batch_options *opt) { struct strbuf buf = STRBUF_INIT; + struct expand_data data; + + if (!opt->format) + opt->format = "%(objectname) %(objecttype) %(objectsize)"; + + /* + * Expand once with our special mark_query flag, which will prime the + * object_info to be handed to sha1_object_info_extended for each + * object. + */ + memset(&data, 0, sizeof(data)); + data.mark_query = 1; + strbuf_expand(&buf, opt->format, expand_format, &data); + data.mark_query = 0; + + /* + * We are going to call get_sha1 on a potentially very large number of + * objects. In most large cases, these will be actual object sha1s. The + * cost to double-check that each one is not also a ref (just so we can + * warn) ends up dwarfing the actual cost of the object lookups + * themselves. We can work around it by just turning off the warning. + */ + warn_on_object_refname_ambiguity = 0; while (strbuf_getline(&buf, stdin, '\n') != EOF) { - int error = batch_one_object(buf.buf, print_contents); + int error; + + if (data.split_on_whitespace) { + /* + * Split at first whitespace, tying off the beginning + * of the string and saving the remainder (or NULL) in + * data.rest. + */ + char *p = strpbrk(buf.buf, " \t"); + if (p) { + while (*p && strchr(" \t", *p)) + *p++ = '\0'; + } + data.rest = p; + } + + error = batch_one_object(buf.buf, opt, &data); if (error) return error; } @@ -186,10 +324,29 @@ static int git_cat_file_config(const char *var, const char *value, void *cb) return git_default_config(var, value, cb); } +static int batch_option_callback(const struct option *opt, + const char *arg, + int unset) +{ + struct batch_options *bo = opt->value; + + if (unset) { + memset(bo, 0, sizeof(*bo)); + return 0; + } + + bo->enabled = 1; + bo->print_contents = !strcmp(opt->long_name, "batch"); + bo->format = arg; + + return 0; +} + int cmd_cat_file(int argc, const char **argv, const char *prefix) { - int opt = 0, batch = 0; + int opt = 0; const char *exp_type = NULL, *obj_name = NULL; + struct batch_options batch = {0}; const struct option options[] = { OPT_GROUP(N_("<type> can be one of: blob, tree, commit, tag")), @@ -200,12 +357,12 @@ int cmd_cat_file(int argc, const char **argv, const char *prefix) OPT_SET_INT('p', NULL, &opt, N_("pretty-print object's content"), 'p'), OPT_SET_INT(0, "textconv", &opt, N_("for blob objects, run textconv on object's content"), 'c'), - OPT_SET_INT(0, "batch", &batch, - N_("show info and content of objects fed from the standard input"), - BATCH), - OPT_SET_INT(0, "batch-check", &batch, - N_("show info about objects fed from the standard input"), - BATCH_CHECK), + { OPTION_CALLBACK, 0, "batch", &batch, "format", + N_("show info and content of objects fed from the standard input"), + PARSE_OPT_OPTARG, batch_option_callback }, + { OPTION_CALLBACK, 0, "batch-check", &batch, "format", + N_("show info about objects fed from the standard input"), + PARSE_OPT_OPTARG, batch_option_callback }, OPT_END() }; @@ -222,19 +379,19 @@ int cmd_cat_file(int argc, const char **argv, const char *prefix) else usage_with_options(cat_file_usage, options); } - if (!opt && !batch) { + if (!opt && !batch.enabled) { if (argc == 2) { exp_type = argv[0]; obj_name = argv[1]; } else usage_with_options(cat_file_usage, options); } - if (batch && (opt || argc)) { + if (batch.enabled && (opt || argc)) { usage_with_options(cat_file_usage, options); } - if (batch) - return batch_objects(batch); + if (batch.enabled) + return batch_objects(&batch); return cat_one_file(opt, exp_type, obj_name); } diff --git a/builtin/check-attr.c b/builtin/check-attr.c index 075d01d30c..e9af7b2bfb 100644 --- a/builtin/check-attr.c +++ b/builtin/check-attr.c @@ -13,14 +13,14 @@ N_("git check-attr --stdin [-z] [-a | --all | attr...] < <list-of-paths>"), NULL }; -static int null_term_line; +static int nul_term_line; static const struct option check_attr_options[] = { - OPT_BOOLEAN('a', "all", &all_attrs, N_("report all attributes set on file")), - OPT_BOOLEAN(0, "cached", &cached_attrs, N_("use .gitattributes only from the index")), - OPT_BOOLEAN(0 , "stdin", &stdin_paths, N_("read file names from stdin")), - OPT_BOOLEAN('z', NULL, &null_term_line, - N_("input paths are terminated by a null character")), + OPT_BOOL('a', "all", &all_attrs, N_("report all attributes set on file")), + OPT_BOOL(0, "cached", &cached_attrs, N_("use .gitattributes only from the index")), + OPT_BOOL(0 , "stdin", &stdin_paths, N_("read file names from stdin")), + OPT_BOOL('z', NULL, &nul_term_line, + N_("terminate input and output records by a NUL character")), OPT_END() }; @@ -38,8 +38,16 @@ static void output_attr(int cnt, struct git_attr_check *check, else if (ATTR_UNSET(value)) value = "unspecified"; - quote_c_style(file, NULL, stdout, 0); - printf(": %s: %s\n", git_attr_name(check[j].attr), value); + if (nul_term_line) { + printf("%s%c" /* path */ + "%s%c" /* attrname */ + "%s%c" /* attrvalue */, + file, 0, git_attr_name(check[j].attr), 0, value, 0); + } else { + quote_c_style(file, NULL, stdout, 0); + printf(": %s: %s\n", git_attr_name(check[j].attr), value); + } + } } @@ -65,7 +73,7 @@ static void check_attr_stdin_paths(const char *prefix, int cnt, struct git_attr_check *check) { struct strbuf buf, nbuf; - int line_termination = null_term_line ? 0 : '\n'; + int line_termination = nul_term_line ? 0 : '\n'; strbuf_init(&buf, 0); strbuf_init(&nbuf, 0); diff --git a/builtin/check-ignore.c b/builtin/check-ignore.c index 70537c8d30..e2a1cef684 100644 --- a/builtin/check-ignore.c +++ b/builtin/check-ignore.c @@ -12,18 +12,18 @@ static const char * const check_ignore_usage[] = { NULL }; -static int null_term_line; +static int nul_term_line; static const struct option check_ignore_options[] = { OPT__QUIET(&quiet, N_("suppress progress reporting")), OPT__VERBOSE(&verbose, N_("be verbose")), OPT_GROUP(""), - OPT_BOOLEAN(0, "stdin", &stdin_paths, - N_("read file names from stdin")), - OPT_BOOLEAN('z', NULL, &null_term_line, - N_("input paths are terminated by a null character")), - OPT_BOOLEAN('n', "non-matching", &show_non_matching, - N_("show non-matching input paths")), + OPT_BOOL(0, "stdin", &stdin_paths, + N_("read file names from stdin")), + OPT_BOOL('z', NULL, &nul_term_line, + N_("terminate input and output records by a NUL character")), + OPT_BOOL('n', "non-matching", &show_non_matching, + N_("show non-matching input paths")), OPT_END() }; @@ -31,7 +31,7 @@ static void output_exclude(const char *path, struct exclude *exclude) { char *bang = (exclude && exclude->flags & EXC_FLAG_NEGATIVE) ? "!" : ""; char *slash = (exclude && exclude->flags & EXC_FLAG_MUSTBEDIR) ? "/" : ""; - if (!null_term_line) { + if (!nul_term_line) { if (!verbose) { write_name_quoted(path, stdout, '\n'); } else { @@ -115,7 +115,7 @@ static int check_ignore_stdin_paths(struct dir_struct *dir, const char *prefix) { struct strbuf buf, nbuf; char *pathspec[2] = { NULL, NULL }; - int line_termination = null_term_line ? 0 : '\n'; + int line_termination = nul_term_line ? 0 : '\n'; int num_ignored = 0; strbuf_init(&buf, 0); @@ -151,7 +151,7 @@ int cmd_check_ignore(int argc, const char **argv, const char *prefix) if (argc > 0) die(_("cannot specify pathnames with --stdin")); } else { - if (null_term_line) + if (nul_term_line) die(_("-z only makes sense with --stdin")); if (argc == 0) die(_("no path specified")); diff --git a/builtin/check-mailmap.c b/builtin/check-mailmap.c new file mode 100644 index 0000000000..8f4d809bd8 --- /dev/null +++ b/builtin/check-mailmap.c @@ -0,0 +1,66 @@ +#include "builtin.h" +#include "mailmap.h" +#include "parse-options.h" +#include "string-list.h" + +static int use_stdin; +static const char * const check_mailmap_usage[] = { +N_("git check-mailmap [options] <contact>..."), +NULL +}; + +static const struct option check_mailmap_options[] = { + OPT_BOOL(0, "stdin", &use_stdin, N_("also read contacts from stdin")), + OPT_END() +}; + +static void check_mailmap(struct string_list *mailmap, const char *contact) +{ + const char *name, *mail; + size_t namelen, maillen; + struct ident_split ident; + + if (split_ident_line(&ident, contact, strlen(contact))) + die(_("unable to parse contact: %s"), contact); + + name = ident.name_begin; + namelen = ident.name_end - ident.name_begin; + mail = ident.mail_begin; + maillen = ident.mail_end - ident.mail_begin; + + map_user(mailmap, &mail, &maillen, &name, &namelen); + + if (namelen) + printf("%.*s ", (int)namelen, name); + printf("<%.*s>\n", (int)maillen, mail); +} + +int cmd_check_mailmap(int argc, const char **argv, const char *prefix) +{ + int i; + struct string_list mailmap = STRING_LIST_INIT_NODUP; + + git_config(git_default_config, NULL); + argc = parse_options(argc, argv, prefix, check_mailmap_options, + check_mailmap_usage, 0); + if (argc == 0 && !use_stdin) + die(_("no contacts specified")); + + read_mailmap(&mailmap, NULL); + + for (i = 0; i < argc; ++i) + check_mailmap(&mailmap, argv[i]); + maybe_flush_or_die(stdout, "stdout"); + + if (use_stdin) { + struct strbuf buf = STRBUF_INIT; + while (strbuf_getline(&buf, stdin, '\n') != EOF) { + check_mailmap(&mailmap, buf.buf); + maybe_flush_or_die(stdout, "stdout"); + } + strbuf_release(&buf); + } + + clear_mailmap(&mailmap); + return 0; +} diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c index b1feda7d5e..69e167b16c 100644 --- a/builtin/checkout-index.c +++ b/builtin/checkout-index.c @@ -183,12 +183,12 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix) int prefix_length; int force = 0, quiet = 0, not_new = 0; struct option builtin_checkout_index_options[] = { - OPT_BOOLEAN('a', "all", &all, + OPT_BOOL('a', "all", &all, N_("check out all files in the index")), OPT__FORCE(&force, N_("force overwrite of existing files")), OPT__QUIET(&quiet, N_("no warning for existing files and files not in index")), - OPT_BOOLEAN('n', "no-create", ¬_new, + OPT_BOOL('n', "no-create", ¬_new, N_("don't checkout new files")), { OPTION_CALLBACK, 'u', "index", &newfd, NULL, N_("update stat information in the index file"), @@ -196,9 +196,9 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix) { OPTION_CALLBACK, 'z', NULL, NULL, NULL, N_("paths are separated with NUL character"), PARSE_OPT_NOARG, option_parse_z }, - OPT_BOOLEAN(0, "stdin", &read_from_stdin, + OPT_BOOL(0, "stdin", &read_from_stdin, N_("read list of paths from the standard input")), - OPT_BOOLEAN(0, "temp", &to_tempfile, + OPT_BOOL(0, "temp", &to_tempfile, N_("write the content to temporary files")), OPT_CALLBACK(0, "prefix", NULL, N_("string"), N_("when creating files, prepend <string>"), diff --git a/builtin/checkout.c b/builtin/checkout.c index 7ea1100338..62a96a7e2f 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -94,7 +94,7 @@ static int read_tree_some(struct tree *tree, const struct pathspec *pathspec) return 0; } -static int skip_same_name(struct cache_entry *ce, int pos) +static int skip_same_name(const struct cache_entry *ce, int pos) { while (++pos < active_nr && !strcmp(active_cache[pos]->name, ce->name)) @@ -102,7 +102,7 @@ static int skip_same_name(struct cache_entry *ce, int pos) return pos; } -static int check_stage(int stage, struct cache_entry *ce, int pos) +static int check_stage(int stage, const struct cache_entry *ce, int pos) { while (pos < active_nr && !strcmp(active_cache[pos]->name, ce->name)) { @@ -116,7 +116,7 @@ static int check_stage(int stage, struct cache_entry *ce, int pos) return error(_("path '%s' does not have their version"), ce->name); } -static int check_stages(unsigned stages, struct cache_entry *ce, int pos) +static int check_stages(unsigned stages, const struct cache_entry *ce, int pos) { unsigned seen = 0; const char *name = ce->name; @@ -225,8 +225,6 @@ static int checkout_paths(const struct checkout_opts *opts, int flag; struct commit *head; int errs = 0; - int stage = opts->writeout_stage; - int merge = opts->merge; int newfd; struct lock_file *lock_file; @@ -316,14 +314,14 @@ static int checkout_paths(const struct checkout_opts *opts, /* Any unmerged paths? */ for (pos = 0; pos < active_nr; pos++) { - struct cache_entry *ce = active_cache[pos]; + const struct cache_entry *ce = active_cache[pos]; if (ce->ce_flags & CE_MATCHED) { if (!ce_stage(ce)) continue; if (opts->force) { warning(_("path '%s' is unmerged"), ce->name); - } else if (stage) { - errs |= check_stage(stage, ce, pos); + } else if (opts->writeout_stage) { + errs |= check_stage(opts->writeout_stage, ce, pos); } else if (opts->merge) { errs |= check_stages((1<<2) | (1<<3), ce, pos); } else { @@ -347,9 +345,9 @@ static int checkout_paths(const struct checkout_opts *opts, errs |= checkout_entry(ce, &state, NULL); continue; } - if (stage) - errs |= checkout_stage(stage, ce, pos, &state); - else if (merge) + if (opts->writeout_stage) + errs |= checkout_stage(opts->writeout_stage, ce, pos, &state); + else if (opts->merge) errs |= checkout_merged(pos, &state); pos = skip_same_name(ce, pos) - 1; } @@ -1051,8 +1049,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) N_("create and checkout a new branch")), OPT_STRING('B', NULL, &opts.new_branch_force, N_("branch"), N_("create/reset and checkout a branch")), - OPT_BOOLEAN('l', NULL, &opts.new_branch_log, N_("create reflog for new branch")), - OPT_BOOLEAN(0, "detach", &opts.force_detach, N_("detach the HEAD at named commit")), + OPT_BOOL('l', NULL, &opts.new_branch_log, N_("create reflog for new branch")), + OPT_BOOL(0, "detach", &opts.force_detach, N_("detach the HEAD at named commit")), OPT_SET_INT('t', "track", &opts.track, N_("set upstream info for new branch"), BRANCH_TRACK_EXPLICIT), OPT_STRING(0, "orphan", &opts.new_orphan_branch, N_("new branch"), N_("new unparented branch")), @@ -1061,16 +1059,15 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) OPT_SET_INT('3', "theirs", &opts.writeout_stage, N_("checkout their version for unmerged files"), 3), OPT__FORCE(&opts.force, N_("force checkout (throw away local modifications)")), - OPT_BOOLEAN('m', "merge", &opts.merge, N_("perform a 3-way merge with the new branch")), - OPT_BOOLEAN(0, "overwrite-ignore", &opts.overwrite_ignore, N_("update ignored files (default)")), + OPT_BOOL('m', "merge", &opts.merge, N_("perform a 3-way merge with the new branch")), + OPT_BOOL(0, "overwrite-ignore", &opts.overwrite_ignore, N_("update ignored files (default)")), OPT_STRING(0, "conflict", &conflict_style, N_("style"), N_("conflict style (merge or diff3)")), - OPT_BOOLEAN('p', "patch", &opts.patch_mode, N_("select hunks interactively")), + OPT_BOOL('p', "patch", &opts.patch_mode, N_("select hunks interactively")), OPT_BOOL(0, "ignore-skip-worktree-bits", &opts.ignore_skipworktree, N_("do not limit pathspecs to sparse entries only")), - { OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL, - N_("second guess 'git checkout no-such-branch'"), - PARSE_OPT_NOARG | PARSE_OPT_HIDDEN }, + OPT_HIDDEN_BOOL(0, "guess", &dwim_new_local_branch, + N_("second guess 'git checkout no-such-branch'")), OPT_END(), }; diff --git a/builtin/clean.c b/builtin/clean.c index d540ca4a0a..615cd57caf 100644 --- a/builtin/clean.c +++ b/builtin/clean.c @@ -13,12 +13,17 @@ #include "refs.h" #include "string-list.h" #include "quote.h" +#include "column.h" +#include "color.h" #include "pathspec.h" static int force = -1; /* unset */ +static int interactive; +static struct string_list del_list = STRING_LIST_INIT_DUP; +static unsigned int colopts; static const char *const builtin_clean_usage[] = { - N_("git clean [-d] [-f] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..."), + N_("git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..."), NULL }; @@ -28,11 +33,112 @@ static const char *msg_skip_git_dir = N_("Skipping repository %s\n"); static const char *msg_would_skip_git_dir = N_("Would skip repository %s\n"); static const char *msg_warn_remove_failed = N_("failed to remove %s"); +static int clean_use_color = -1; +static char clean_colors[][COLOR_MAXLEN] = { + GIT_COLOR_RESET, + GIT_COLOR_NORMAL, /* PLAIN */ + GIT_COLOR_BOLD_BLUE, /* PROMPT */ + GIT_COLOR_BOLD, /* HEADER */ + GIT_COLOR_BOLD_RED, /* HELP */ + GIT_COLOR_BOLD_RED, /* ERROR */ +}; +enum color_clean { + CLEAN_COLOR_RESET = 0, + CLEAN_COLOR_PLAIN = 1, + CLEAN_COLOR_PROMPT = 2, + CLEAN_COLOR_HEADER = 3, + CLEAN_COLOR_HELP = 4, + CLEAN_COLOR_ERROR = 5, +}; + +#define MENU_OPTS_SINGLETON 01 +#define MENU_OPTS_IMMEDIATE 02 +#define MENU_OPTS_LIST_ONLY 04 + +struct menu_opts { + const char *header; + const char *prompt; + int flags; +}; + +#define MENU_RETURN_NO_LOOP 10 + +struct menu_item { + char hotkey; + const char *title; + int selected; + int (*fn)(); +}; + +enum menu_stuff_type { + MENU_STUFF_TYPE_STRING_LIST = 1, + MENU_STUFF_TYPE_MENU_ITEM +}; + +struct menu_stuff { + enum menu_stuff_type type; + int nr; + void *stuff; +}; + +static int parse_clean_color_slot(const char *var) +{ + if (!strcasecmp(var, "reset")) + return CLEAN_COLOR_RESET; + if (!strcasecmp(var, "plain")) + return CLEAN_COLOR_PLAIN; + if (!strcasecmp(var, "prompt")) + return CLEAN_COLOR_PROMPT; + if (!strcasecmp(var, "header")) + return CLEAN_COLOR_HEADER; + if (!strcasecmp(var, "help")) + return CLEAN_COLOR_HELP; + if (!strcasecmp(var, "error")) + return CLEAN_COLOR_ERROR; + return -1; +} + static int git_clean_config(const char *var, const char *value, void *cb) { - if (!strcmp(var, "clean.requireforce")) + if (!prefixcmp(var, "column.")) + return git_column_config(var, value, "clean", &colopts); + + /* honors the color.interactive* config variables which also + applied in git-add--interactive and git-stash */ + if (!strcmp(var, "color.interactive")) { + clean_use_color = git_config_colorbool(var, value); + return 0; + } + if (!prefixcmp(var, "color.interactive.")) { + int slot = parse_clean_color_slot(var + + strlen("color.interactive.")); + if (slot < 0) + return 0; + if (!value) + return config_error_nonbool(var); + color_parse(value, var, clean_colors[slot]); + return 0; + } + + if (!strcmp(var, "clean.requireforce")) { force = !git_config_bool(var, value); - return git_default_config(var, value, cb); + return 0; + } + + /* inspect the color.ui config variable and others */ + return git_color_default_config(var, value, cb); +} + +static const char *clean_get_color(enum color_clean ix) +{ + if (want_color(clean_use_color)) + return clean_colors[ix]; + return ""; +} + +static void clean_print_color(enum color_clean ix) +{ + printf("%s", clean_get_color(ix)); } static int exclude_cb(const struct option *opt, const char *arg, int unset) @@ -57,7 +163,7 @@ static int remove_dirs(struct strbuf *path, const char *prefix, int force_flag, if ((force_flag & REMOVE_DIR_KEEP_NESTED_GIT) && !resolve_gitlink_ref(path->buf, "HEAD", submodule_head)) { if (!quiet) { - quote_path_relative(path->buf, strlen(path->buf), "ed, prefix); + quote_path_relative(path->buf, prefix, "ed); printf(dry_run ? _(msg_would_skip_git_dir) : _(msg_skip_git_dir), quoted.buf); } @@ -71,7 +177,7 @@ static int remove_dirs(struct strbuf *path, const char *prefix, int force_flag, /* an empty dir could be removed even if it is unreadble */ res = dry_run ? 0 : rmdir(path->buf); if (res) { - quote_path_relative(path->buf, strlen(path->buf), "ed, prefix); + quote_path_relative(path->buf, prefix, "ed); warning(_(msg_warn_remove_failed), quoted.buf); *dir_gone = 0; } @@ -95,7 +201,7 @@ static int remove_dirs(struct strbuf *path, const char *prefix, int force_flag, if (remove_dirs(path, prefix, force_flag, dry_run, quiet, &gone)) ret = 1; if (gone) { - quote_path_relative(path->buf, strlen(path->buf), "ed, prefix); + quote_path_relative(path->buf, prefix, "ed); string_list_append(&dels, quoted.buf); } else *dir_gone = 0; @@ -103,10 +209,10 @@ static int remove_dirs(struct strbuf *path, const char *prefix, int force_flag, } else { res = dry_run ? 0 : unlink(path->buf); if (!res) { - quote_path_relative(path->buf, strlen(path->buf), "ed, prefix); + quote_path_relative(path->buf, prefix, "ed); string_list_append(&dels, quoted.buf); } else { - quote_path_relative(path->buf, strlen(path->buf), "ed, prefix); + quote_path_relative(path->buf, prefix, "ed); warning(_(msg_warn_remove_failed), quoted.buf); *dir_gone = 0; ret = 1; @@ -128,7 +234,7 @@ static int remove_dirs(struct strbuf *path, const char *prefix, int force_flag, if (!res) *dir_gone = 1; else { - quote_path_relative(path->buf, strlen(path->buf), "ed, prefix); + quote_path_relative(path->buf, prefix, "ed); warning(_(msg_warn_remove_failed), quoted.buf); *dir_gone = 0; ret = 1; @@ -143,29 +249,638 @@ static int remove_dirs(struct strbuf *path, const char *prefix, int force_flag, return ret; } +static void pretty_print_dels(void) +{ + struct string_list list = STRING_LIST_INIT_DUP; + struct string_list_item *item; + struct strbuf buf = STRBUF_INIT; + const char *qname; + struct column_options copts; + + for_each_string_list_item(item, &del_list) { + qname = quote_path_relative(item->string, NULL, &buf); + string_list_append(&list, qname); + } + + /* + * always enable column display, we only consult column.* + * about layout strategy and stuff + */ + colopts = (colopts & ~COL_ENABLE_MASK) | COL_ENABLED; + memset(&copts, 0, sizeof(copts)); + copts.indent = " "; + copts.padding = 2; + print_columns(&list, colopts, &copts); + strbuf_release(&buf); + string_list_clear(&list, 0); +} + +static void pretty_print_menus(struct string_list *menu_list) +{ + unsigned int local_colopts = 0; + struct column_options copts; + + local_colopts = COL_ENABLED | COL_ROW; + memset(&copts, 0, sizeof(copts)); + copts.indent = " "; + copts.padding = 2; + print_columns(menu_list, local_colopts, &copts); +} + +static void prompt_help_cmd(int singleton) +{ + clean_print_color(CLEAN_COLOR_HELP); + printf_ln(singleton ? + _("Prompt help:\n" + "1 - select a numbered item\n" + "foo - select item based on unique prefix\n" + " - (empty) select nothing") : + _("Prompt help:\n" + "1 - select a single item\n" + "3-5 - select a range of items\n" + "2-3,6-9 - select multiple ranges\n" + "foo - select item based on unique prefix\n" + "-... - unselect specified items\n" + "* - choose all items\n" + " - (empty) finish selecting")); + clean_print_color(CLEAN_COLOR_RESET); +} + +/* + * display menu stuff with number prefix and hotkey highlight + */ +static void print_highlight_menu_stuff(struct menu_stuff *stuff, int **chosen) +{ + struct string_list menu_list = STRING_LIST_INIT_DUP; + struct strbuf menu = STRBUF_INIT; + struct strbuf buf = STRBUF_INIT; + struct menu_item *menu_item; + struct string_list_item *string_list_item; + int i; + + switch (stuff->type) { + default: + die("Bad type of menu_staff when print menu"); + case MENU_STUFF_TYPE_MENU_ITEM: + menu_item = (struct menu_item *)stuff->stuff; + for (i = 0; i < stuff->nr; i++, menu_item++) { + const char *p; + int highlighted = 0; + + p = menu_item->title; + if ((*chosen)[i] < 0) + (*chosen)[i] = menu_item->selected ? 1 : 0; + strbuf_addf(&menu, "%s%2d: ", (*chosen)[i] ? "*" : " ", i+1); + for (; *p; p++) { + if (!highlighted && *p == menu_item->hotkey) { + strbuf_addstr(&menu, clean_get_color(CLEAN_COLOR_PROMPT)); + strbuf_addch(&menu, *p); + strbuf_addstr(&menu, clean_get_color(CLEAN_COLOR_RESET)); + highlighted = 1; + } else { + strbuf_addch(&menu, *p); + } + } + string_list_append(&menu_list, menu.buf); + strbuf_reset(&menu); + } + break; + case MENU_STUFF_TYPE_STRING_LIST: + i = 0; + for_each_string_list_item(string_list_item, (struct string_list *)stuff->stuff) { + if ((*chosen)[i] < 0) + (*chosen)[i] = 0; + strbuf_addf(&menu, "%s%2d: %s", + (*chosen)[i] ? "*" : " ", i+1, string_list_item->string); + string_list_append(&menu_list, menu.buf); + strbuf_reset(&menu); + i++; + } + break; + } + + pretty_print_menus(&menu_list); + + strbuf_release(&menu); + strbuf_release(&buf); + string_list_clear(&menu_list, 0); +} + +static int find_unique(const char *choice, struct menu_stuff *menu_stuff) +{ + struct menu_item *menu_item; + struct string_list_item *string_list_item; + int i, len, found = 0; + + len = strlen(choice); + switch (menu_stuff->type) { + default: + die("Bad type of menu_stuff when parse choice"); + case MENU_STUFF_TYPE_MENU_ITEM: + + menu_item = (struct menu_item *)menu_stuff->stuff; + for (i = 0; i < menu_stuff->nr; i++, menu_item++) { + if (len == 1 && *choice == menu_item->hotkey) { + found = i + 1; + break; + } + if (!strncasecmp(choice, menu_item->title, len)) { + if (found) { + if (len == 1) { + /* continue for hotkey matching */ + found = -1; + } else { + found = 0; + break; + } + } else { + found = i + 1; + } + } + } + break; + case MENU_STUFF_TYPE_STRING_LIST: + string_list_item = ((struct string_list *)menu_stuff->stuff)->items; + for (i = 0; i < menu_stuff->nr; i++, string_list_item++) { + if (!strncasecmp(choice, string_list_item->string, len)) { + if (found) { + found = 0; + break; + } + found = i + 1; + } + } + break; + } + return found; +} + + +/* + * Parse user input, and return choice(s) for menu (menu_stuff). + * + * Input + * (for single choice) + * 1 - select a numbered item + * foo - select item based on menu title + * - (empty) select nothing + * + * (for multiple choice) + * 1 - select a single item + * 3-5 - select a range of items + * 2-3,6-9 - select multiple ranges + * foo - select item based on menu title + * -... - unselect specified items + * * - choose all items + * - (empty) finish selecting + * + * The parse result will be saved in array **chosen, and + * return number of total selections. + */ +static int parse_choice(struct menu_stuff *menu_stuff, + int is_single, + struct strbuf input, + int **chosen) +{ + struct strbuf **choice_list, **ptr; + int nr = 0; + int i; + + if (is_single) { + choice_list = strbuf_split_max(&input, '\n', 0); + } else { + char *p = input.buf; + do { + if (*p == ',') + *p = ' '; + } while (*p++); + choice_list = strbuf_split_max(&input, ' ', 0); + } + + for (ptr = choice_list; *ptr; ptr++) { + char *p; + int choose = 1; + int bottom = 0, top = 0; + int is_range, is_number; + + strbuf_trim(*ptr); + if (!(*ptr)->len) + continue; + + /* Input that begins with '-'; unchoose */ + if (*(*ptr)->buf == '-') { + choose = 0; + strbuf_remove((*ptr), 0, 1); + } + + is_range = 0; + is_number = 1; + for (p = (*ptr)->buf; *p; p++) { + if ('-' == *p) { + if (!is_range) { + is_range = 1; + is_number = 0; + } else { + is_number = 0; + is_range = 0; + break; + } + } else if (!isdigit(*p)) { + is_number = 0; + is_range = 0; + break; + } + } + + if (is_number) { + bottom = atoi((*ptr)->buf); + top = bottom; + } else if (is_range) { + bottom = atoi((*ptr)->buf); + /* a range can be specified like 5-7 or 5- */ + if (!*(strchr((*ptr)->buf, '-') + 1)) + top = menu_stuff->nr; + else + top = atoi(strchr((*ptr)->buf, '-') + 1); + } else if (!strcmp((*ptr)->buf, "*")) { + bottom = 1; + top = menu_stuff->nr; + } else { + bottom = find_unique((*ptr)->buf, menu_stuff); + top = bottom; + } + + if (top <= 0 || bottom <= 0 || top > menu_stuff->nr || bottom > top || + (is_single && bottom != top)) { + clean_print_color(CLEAN_COLOR_ERROR); + printf_ln(_("Huh (%s)?"), (*ptr)->buf); + clean_print_color(CLEAN_COLOR_RESET); + continue; + } + + for (i = bottom; i <= top; i++) + (*chosen)[i-1] = choose; + } + + strbuf_list_free(choice_list); + + for (i = 0; i < menu_stuff->nr; i++) + nr += (*chosen)[i]; + return nr; +} + +/* + * Implement a git-add-interactive compatible UI, which is borrowed + * from git-add--interactive.perl. + * + * Return value: + * + * - Return an array of integers + * - , and it is up to you to free the allocated memory. + * - The array ends with EOF. + * - If user pressed CTRL-D (i.e. EOF), no selection returned. + */ +static int *list_and_choose(struct menu_opts *opts, struct menu_stuff *stuff) +{ + struct strbuf choice = STRBUF_INIT; + int *chosen, *result; + int nr = 0; + int eof = 0; + int i; + + chosen = xmalloc(sizeof(int) * stuff->nr); + /* set chosen as uninitialized */ + for (i = 0; i < stuff->nr; i++) + chosen[i] = -1; + + for (;;) { + if (opts->header) { + printf_ln("%s%s%s", + clean_get_color(CLEAN_COLOR_HEADER), + _(opts->header), + clean_get_color(CLEAN_COLOR_RESET)); + } + + /* chosen will be initialized by print_highlight_menu_stuff */ + print_highlight_menu_stuff(stuff, &chosen); + + if (opts->flags & MENU_OPTS_LIST_ONLY) + break; + + if (opts->prompt) { + printf("%s%s%s%s", + clean_get_color(CLEAN_COLOR_PROMPT), + _(opts->prompt), + opts->flags & MENU_OPTS_SINGLETON ? "> " : ">> ", + clean_get_color(CLEAN_COLOR_RESET)); + } + + if (strbuf_getline(&choice, stdin, '\n') != EOF) { + strbuf_trim(&choice); + } else { + eof = 1; + break; + } + + /* help for prompt */ + if (!strcmp(choice.buf, "?")) { + prompt_help_cmd(opts->flags & MENU_OPTS_SINGLETON); + continue; + } + + /* for a multiple-choice menu, press ENTER (empty) will return back */ + if (!(opts->flags & MENU_OPTS_SINGLETON) && !choice.len) + break; + + nr = parse_choice(stuff, + opts->flags & MENU_OPTS_SINGLETON, + choice, + &chosen); + + if (opts->flags & MENU_OPTS_SINGLETON) { + if (nr) + break; + } else if (opts->flags & MENU_OPTS_IMMEDIATE) { + break; + } + } + + if (eof) { + result = xmalloc(sizeof(int)); + *result = EOF; + } else { + int j = 0; + + /* + * recalculate nr, if return back from menu directly with + * default selections. + */ + if (!nr) { + for (i = 0; i < stuff->nr; i++) + nr += chosen[i]; + } + + result = xmalloc(sizeof(int) * (nr + 1)); + memset(result, 0, sizeof(int) * (nr + 1)); + for (i = 0; i < stuff->nr && j < nr; i++) { + if (chosen[i]) + result[j++] = i; + } + result[j] = EOF; + } + + free(chosen); + strbuf_release(&choice); + return result; +} + +static int clean_cmd(void) +{ + return MENU_RETURN_NO_LOOP; +} + +static int filter_by_patterns_cmd(void) +{ + struct dir_struct dir; + struct strbuf confirm = STRBUF_INIT; + struct strbuf **ignore_list; + struct string_list_item *item; + struct exclude_list *el; + int changed = -1, i; + + for (;;) { + if (!del_list.nr) + break; + + if (changed) + pretty_print_dels(); + + clean_print_color(CLEAN_COLOR_PROMPT); + printf(_("Input ignore patterns>> ")); + clean_print_color(CLEAN_COLOR_RESET); + if (strbuf_getline(&confirm, stdin, '\n') != EOF) + strbuf_trim(&confirm); + else + putchar('\n'); + + /* quit filter_by_pattern mode if press ENTER or Ctrl-D */ + if (!confirm.len) + break; + + memset(&dir, 0, sizeof(dir)); + el = add_exclude_list(&dir, EXC_CMDL, "manual exclude"); + ignore_list = strbuf_split_max(&confirm, ' ', 0); + + for (i = 0; ignore_list[i]; i++) { + strbuf_trim(ignore_list[i]); + if (!ignore_list[i]->len) + continue; + + add_exclude(ignore_list[i]->buf, "", 0, el, -(i+1)); + } + + changed = 0; + for_each_string_list_item(item, &del_list) { + int dtype = DT_UNKNOWN; + + if (is_excluded(&dir, item->string, &dtype)) { + *item->string = '\0'; + changed++; + } + } + + if (changed) { + string_list_remove_empty_items(&del_list, 0); + } else { + clean_print_color(CLEAN_COLOR_ERROR); + printf_ln(_("WARNING: Cannot find items matched by: %s"), confirm.buf); + clean_print_color(CLEAN_COLOR_RESET); + } + + strbuf_list_free(ignore_list); + clear_directory(&dir); + } + + strbuf_release(&confirm); + return 0; +} + +static int select_by_numbers_cmd(void) +{ + struct menu_opts menu_opts; + struct menu_stuff menu_stuff; + struct string_list_item *items; + int *chosen; + int i, j; + + menu_opts.header = NULL; + menu_opts.prompt = N_("Select items to delete"); + menu_opts.flags = 0; + + menu_stuff.type = MENU_STUFF_TYPE_STRING_LIST; + menu_stuff.stuff = &del_list; + menu_stuff.nr = del_list.nr; + + chosen = list_and_choose(&menu_opts, &menu_stuff); + items = del_list.items; + for (i = 0, j = 0; i < del_list.nr; i++) { + if (i < chosen[j]) { + *(items[i].string) = '\0'; + } else if (i == chosen[j]) { + /* delete selected item */ + j++; + continue; + } else { + /* end of chosen (chosen[j] == EOF), won't delete */ + *(items[i].string) = '\0'; + } + } + + string_list_remove_empty_items(&del_list, 0); + + free(chosen); + return 0; +} + +static int ask_each_cmd(void) +{ + struct strbuf confirm = STRBUF_INIT; + struct strbuf buf = STRBUF_INIT; + struct string_list_item *item; + const char *qname; + int changed = 0, eof = 0; + + for_each_string_list_item(item, &del_list) { + /* Ctrl-D should stop removing files */ + if (!eof) { + qname = quote_path_relative(item->string, NULL, &buf); + printf(_("remove %s? "), qname); + if (strbuf_getline(&confirm, stdin, '\n') != EOF) { + strbuf_trim(&confirm); + } else { + putchar('\n'); + eof = 1; + } + } + if (!confirm.len || strncasecmp(confirm.buf, "yes", confirm.len)) { + *item->string = '\0'; + changed++; + } + } + + if (changed) + string_list_remove_empty_items(&del_list, 0); + + strbuf_release(&buf); + strbuf_release(&confirm); + return MENU_RETURN_NO_LOOP; +} + +static int quit_cmd(void) +{ + string_list_clear(&del_list, 0); + printf_ln(_("Bye.")); + return MENU_RETURN_NO_LOOP; +} + +static int help_cmd(void) +{ + clean_print_color(CLEAN_COLOR_HELP); + printf_ln(_( + "clean - start cleaning\n" + "filter by pattern - exclude items from deletion\n" + "select by numbers - select items to be deleted by numbers\n" + "ask each - confirm each deletion (like \"rm -i\")\n" + "quit - stop cleaning\n" + "help - this screen\n" + "? - help for prompt selection" + )); + clean_print_color(CLEAN_COLOR_RESET); + return 0; +} + +static void interactive_main_loop(void) +{ + while (del_list.nr) { + struct menu_opts menu_opts; + struct menu_stuff menu_stuff; + struct menu_item menus[] = { + {'c', "clean", 0, clean_cmd}, + {'f', "filter by pattern", 0, filter_by_patterns_cmd}, + {'s', "select by numbers", 0, select_by_numbers_cmd}, + {'a', "ask each", 0, ask_each_cmd}, + {'q', "quit", 0, quit_cmd}, + {'h', "help", 0, help_cmd}, + }; + int *chosen; + + menu_opts.header = N_("*** Commands ***"); + menu_opts.prompt = N_("What now"); + menu_opts.flags = MENU_OPTS_SINGLETON; + + menu_stuff.type = MENU_STUFF_TYPE_MENU_ITEM; + menu_stuff.stuff = menus; + menu_stuff.nr = sizeof(menus) / sizeof(struct menu_item); + + clean_print_color(CLEAN_COLOR_HEADER); + printf_ln(Q_("Would remove the following item:", + "Would remove the following items:", + del_list.nr)); + clean_print_color(CLEAN_COLOR_RESET); + + pretty_print_dels(); + + chosen = list_and_choose(&menu_opts, &menu_stuff); + + if (*chosen != EOF) { + int ret; + ret = menus[*chosen].fn(); + if (ret != MENU_RETURN_NO_LOOP) { + free(chosen); + chosen = NULL; + if (!del_list.nr) { + clean_print_color(CLEAN_COLOR_ERROR); + printf_ln(_("No more files to clean, exiting.")); + clean_print_color(CLEAN_COLOR_RESET); + break; + } + continue; + } + } else { + quit_cmd(); + } + + free(chosen); + chosen = NULL; + break; + } +} + int cmd_clean(int argc, const char **argv, const char *prefix) { int i, res; int dry_run = 0, remove_directories = 0, quiet = 0, ignored = 0; int ignored_only = 0, config_set = 0, errors = 0, gone = 1; int rm_flags = REMOVE_DIR_KEEP_NESTED_GIT; - struct strbuf directory = STRBUF_INIT; + struct strbuf abs_path = STRBUF_INIT; struct dir_struct dir; struct pathspec pathspec; struct strbuf buf = STRBUF_INIT; struct string_list exclude_list = STRING_LIST_INIT_NODUP; struct exclude_list *el; + struct string_list_item *item; const char *qname; struct option options[] = { OPT__QUIET(&quiet, N_("do not print names of files removed")), OPT__DRY_RUN(&dry_run, N_("dry run")), OPT__FORCE(&force, N_("force")), - OPT_BOOLEAN('d', NULL, &remove_directories, + OPT_BOOL('i', "interactive", &interactive, N_("interactive cleaning")), + OPT_BOOL('d', NULL, &remove_directories, N_("remove whole directories")), { OPTION_CALLBACK, 'e', "exclude", &exclude_list, N_("pattern"), N_("add <pattern> to ignore rules"), PARSE_OPT_NONEG, exclude_cb }, - OPT_BOOLEAN('x', NULL, &ignored, N_("remove ignored files, too")), - OPT_BOOLEAN('X', NULL, &ignored_only, + OPT_BOOL('x', NULL, &ignored, N_("remove ignored files, too")), + OPT_BOOL('X', NULL, &ignored_only, N_("remove only ignored files")), OPT_END() }; @@ -186,12 +901,12 @@ int cmd_clean(int argc, const char **argv, const char *prefix) if (ignored && ignored_only) die(_("-x and -X cannot be used together")); - if (!dry_run && !force) { + if (!interactive && !dry_run && !force) { if (config_set) - die(_("clean.requireForce set to true and neither -n nor -f given; " + die(_("clean.requireForce set to true and neither -i, -n nor -f given; " "refusing to clean")); else - die(_("clean.requireForce defaults to true and neither -n nor -f given; " + die(_("clean.requireForce defaults to true and neither -i, -n nor -f given; " "refusing to clean")); } @@ -220,8 +935,9 @@ int cmd_clean(int argc, const char **argv, const char *prefix) struct dir_entry *ent = dir.entries[i]; int len, pos; int matches = 0; - struct cache_entry *ce; + const struct cache_entry *ce; struct stat st; + const char *rel; /* * Remove the '/' at the end that directory @@ -241,45 +957,69 @@ int cmd_clean(int argc, const char **argv, const char *prefix) continue; /* Yup, this one exists unmerged */ } - /* - * we might have removed this as part of earlier - * recursive directory removal, so lstat() here could - * fail with ENOENT. - */ if (lstat(ent->name, &st)) - continue; + die_errno("Cannot lstat '%s'", ent->name); if (pathspec.nr) matches = match_pathspec_depth(&pathspec, ent->name, len, 0, NULL); if (S_ISDIR(st.st_mode)) { - strbuf_addstr(&directory, ent->name); if (remove_directories || (matches == MATCHED_EXACTLY)) { - if (remove_dirs(&directory, prefix, rm_flags, dry_run, quiet, &gone)) - errors++; - if (gone && !quiet) { - qname = quote_path_relative(directory.buf, directory.len, &buf, prefix); - printf(dry_run ? _(msg_would_remove) : _(msg_remove), qname); - } + rel = relative_path(ent->name, prefix, &buf); + string_list_append(&del_list, rel); } - strbuf_reset(&directory); } else { if (pathspec.nr && !matches) continue; - res = dry_run ? 0 : unlink(ent->name); + rel = relative_path(ent->name, prefix, &buf); + string_list_append(&del_list, rel); + } + } + + if (interactive && del_list.nr > 0) + interactive_main_loop(); + + for_each_string_list_item(item, &del_list) { + struct stat st; + + if (prefix) + strbuf_addstr(&abs_path, prefix); + + strbuf_addstr(&abs_path, item->string); + + /* + * we might have removed this as part of earlier + * recursive directory removal, so lstat() here could + * fail with ENOENT. + */ + if (lstat(abs_path.buf, &st)) + continue; + + if (S_ISDIR(st.st_mode)) { + if (remove_dirs(&abs_path, prefix, rm_flags, dry_run, quiet, &gone)) + errors++; + if (gone && !quiet) { + qname = quote_path_relative(item->string, NULL, &buf); + printf(dry_run ? _(msg_would_remove) : _(msg_remove), qname); + } + } else { + res = dry_run ? 0 : unlink(abs_path.buf); if (res) { - qname = quote_path_relative(ent->name, -1, &buf, prefix); + qname = quote_path_relative(item->string, NULL, &buf); warning(_(msg_warn_remove_failed), qname); errors++; } else if (!quiet) { - qname = quote_path_relative(ent->name, -1, &buf, prefix); + qname = quote_path_relative(item->string, NULL, &buf); printf(dry_run ? _(msg_would_remove) : _(msg_remove), qname); } } + strbuf_reset(&abs_path); } - strbuf_release(&directory); + strbuf_release(&abs_path); + strbuf_release(&buf); + string_list_clear(&del_list, 0); string_list_clear(&exclude_list, 0); return (errors != 0); } diff --git a/builtin/clone.c b/builtin/clone.c index 17f57cdf29..ca3eb68d72 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -62,23 +62,22 @@ static struct option builtin_clone_options[] = { OPT__VERBOSITY(&option_verbosity), OPT_BOOL(0, "progress", &option_progress, N_("force progress reporting")), - OPT_BOOLEAN('n', "no-checkout", &option_no_checkout, - N_("don't create a checkout")), - OPT_BOOLEAN(0, "bare", &option_bare, N_("create a bare repository")), - { OPTION_BOOLEAN, 0, "naked", &option_bare, NULL, - N_("create a bare repository"), - PARSE_OPT_NOARG | PARSE_OPT_HIDDEN }, - OPT_BOOLEAN(0, "mirror", &option_mirror, - N_("create a mirror repository (implies bare)")), + OPT_BOOL('n', "no-checkout", &option_no_checkout, + N_("don't create a checkout")), + OPT_BOOL(0, "bare", &option_bare, N_("create a bare repository")), + OPT_HIDDEN_BOOL(0, "naked", &option_bare, + N_("create a bare repository")), + OPT_BOOL(0, "mirror", &option_mirror, + N_("create a mirror repository (implies bare)")), OPT_BOOL('l', "local", &option_local, N_("to clone from a local repository")), - OPT_BOOLEAN(0, "no-hardlinks", &option_no_hardlinks, + OPT_BOOL(0, "no-hardlinks", &option_no_hardlinks, N_("don't use local hardlinks, always copy")), - OPT_BOOLEAN('s', "shared", &option_shared, + OPT_BOOL('s', "shared", &option_shared, N_("setup as shared repository")), - OPT_BOOLEAN(0, "recursive", &option_recursive, + OPT_BOOL(0, "recursive", &option_recursive, N_("initialize submodules in the clone")), - OPT_BOOLEAN(0, "recurse-submodules", &option_recursive, + OPT_BOOL(0, "recurse-submodules", &option_recursive, N_("initialize submodules in the clone")), OPT_STRING(0, "template", &option_template, N_("template-directory"), N_("directory from which templates will be used")), @@ -545,17 +544,20 @@ static void update_remote_refs(const struct ref *refs, const struct ref *remote_head_points_at, const char *branch_top, const char *msg, - struct transport *transport) + struct transport *transport, + int check_connectivity) { const struct ref *rm = mapped_refs; - if (0 <= option_verbosity) - printf(_("Checking connectivity... ")); - if (check_everything_connected_with_transport(iterate_ref_map, - 0, &rm, transport)) - die(_("remote did not send all necessary objects")); - if (0 <= option_verbosity) - printf(_("done\n")); + if (check_connectivity) { + if (0 <= option_verbosity) + printf(_("Checking connectivity... ")); + if (check_everything_connected_with_transport(iterate_ref_map, + 0, &rm, transport)) + die(_("remote did not send all necessary objects")); + if (0 <= option_verbosity) + printf(_("done\n")); + } if (refs) { write_remote_refs(mapped_refs); @@ -963,7 +965,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix) transport_fetch_refs(transport, mapped_refs); update_remote_refs(refs, mapped_refs, remote_head_points_at, - branch_top.buf, reflog_msg.buf, transport); + branch_top.buf, reflog_msg.buf, transport, !is_local); update_head(our_head_points_at, remote_head, reflog_msg.buf); diff --git a/builtin/commit.c b/builtin/commit.c index 4ee9ba6c63..80d886ab3a 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -63,8 +63,18 @@ N_("The previous cherry-pick is now empty, possibly due to conflict resolution.\ "If you wish to commit it anyway, use:\n" "\n" " git commit --allow-empty\n" +"\n"); + +static const char empty_cherry_pick_advice_single[] = +N_("Otherwise, please use 'git reset'\n"); + +static const char empty_cherry_pick_advice_multi[] = +N_("If you wish to skip this commit, use:\n" "\n" -"Otherwise, please use 'git reset'\n"); +" git reset\n" +"\n" +"Then \"git cherry-pick --continue\" will resume cherry-picking\n" +"the remaining commits.\n"); static const char *use_message_buffer; static const char commit_editmsg[] = "COMMIT_EDITMSG"; @@ -107,6 +117,7 @@ static enum { static const char *cleanup_arg; static enum commit_whence whence; +static int sequencer_in_use; static int use_editor = 1, include_status = 1; static int show_ignored_in_status, have_option_m; static const char *only_include_assumed; @@ -141,8 +152,11 @@ static void determine_whence(struct wt_status *s) { if (file_exists(git_path("MERGE_HEAD"))) whence = FROM_MERGE; - else if (file_exists(git_path("CHERRY_PICK_HEAD"))) + else if (file_exists(git_path("CHERRY_PICK_HEAD"))) { whence = FROM_CHERRY_PICK; + if (file_exists(git_path("sequencer"))) + sequencer_in_use = 1; + } else whence = FROM_COMMIT; if (s) @@ -205,7 +219,7 @@ static int list_paths(struct string_list *list, const char *with_tree, } for (i = 0; i < active_nr; i++) { - struct cache_entry *ce = active_cache[i]; + const struct cache_entry *ce = active_cache[i]; struct string_list_item *item; if (ce->ce_flags & CE_UPDATE) @@ -532,7 +546,6 @@ static void determine_author_info(struct strbuf *author_ident) (lb - strlen(" ") - (a + strlen("\nauthor ")))); email = xmemdupz(lb + strlen("<"), rb - (lb + strlen("<"))); - date = xmemdupz(rb + strlen("> "), eol - (rb + strlen("> "))); len = eol - (rb + strlen("> ")); date = xmalloc(len + 2); *date = '@'; @@ -809,8 +822,13 @@ static int prepare_to_commit(const char *index_file, const char *prefix, run_status(stdout, index_file, prefix, 0, s); if (amend) fputs(_(empty_amend_advice), stderr); - else if (whence == FROM_CHERRY_PICK) + else if (whence == FROM_CHERRY_PICK) { fputs(_(empty_cherry_pick_advice), stderr); + if (!sequencer_in_use) + fputs(_(empty_cherry_pick_advice_single), stderr); + else + fputs(_(empty_cherry_pick_advice_multi), stderr); + } return 0; } @@ -1071,7 +1089,7 @@ static int parse_and_validate_options(int argc, const char *argv[], if (patch_interactive) interactive = 1; - if (!!also + !!only + !!all + !!interactive > 1) + if (also + only + all + interactive > 1) die(_("Only one of --include/--only/--all/--interactive/--patch can be used.")); if (argc == 0 && (also || (only && !amend))) die(_("No paths with --include/--only does not make sense.")); @@ -1208,14 +1226,14 @@ int cmd_status(int argc, const char **argv, const char *prefix) OPT_SET_INT(0, "long", &status_format, N_("show status in long format (default)"), STATUS_FORMAT_LONG), - OPT_BOOLEAN('z', "null", &s.null_termination, - N_("terminate entries with NUL")), + OPT_BOOL('z', "null", &s.null_termination, + N_("terminate entries with NUL")), { OPTION_STRING, 'u', "untracked-files", &untracked_files_arg, N_("mode"), N_("show untracked files, optional modes: all, normal, no. (Default: all)"), PARSE_OPT_OPTARG, NULL, (intptr_t)"all" }, - OPT_BOOLEAN(0, "ignored", &show_ignored_in_status, - N_("show ignored files")), + OPT_BOOL(0, "ignored", &show_ignored_in_status, + N_("show ignored files")), { OPTION_STRING, 0, "ignore-submodules", &ignore_submodule_arg, N_("when"), N_("ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)"), PARSE_OPT_OPTARG, NULL, (intptr_t)"all" }, @@ -1415,24 +1433,24 @@ int cmd_commit(int argc, const char **argv, const char *prefix) OPT_STRING('C', "reuse-message", &use_message, N_("commit"), N_("reuse message from specified commit")), OPT_STRING(0, "fixup", &fixup_message, N_("commit"), N_("use autosquash formatted message to fixup specified commit")), OPT_STRING(0, "squash", &squash_message, N_("commit"), N_("use autosquash formatted message to squash specified commit")), - OPT_BOOLEAN(0, "reset-author", &renew_authorship, N_("the commit is authored by me now (used with -C/-c/--amend)")), - OPT_BOOLEAN('s', "signoff", &signoff, N_("add Signed-off-by:")), + OPT_BOOL(0, "reset-author", &renew_authorship, N_("the commit is authored by me now (used with -C/-c/--amend)")), + OPT_BOOL('s', "signoff", &signoff, N_("add Signed-off-by:")), OPT_FILENAME('t', "template", &template_file, N_("use specified template file")), OPT_BOOL('e', "edit", &edit_flag, N_("force edit of commit")), OPT_STRING(0, "cleanup", &cleanup_arg, N_("default"), N_("how to strip spaces and #comments from message")), - OPT_BOOLEAN(0, "status", &include_status, N_("include status in commit message template")), + OPT_BOOL(0, "status", &include_status, N_("include status in commit message template")), { OPTION_STRING, 'S', "gpg-sign", &sign_commit, N_("key id"), N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" }, /* end commit message options */ OPT_GROUP(N_("Commit contents options")), - OPT_BOOLEAN('a', "all", &all, N_("commit all changed files")), - OPT_BOOLEAN('i', "include", &also, N_("add specified files to index for commit")), - OPT_BOOLEAN(0, "interactive", &interactive, N_("interactively add files")), - OPT_BOOLEAN('p', "patch", &patch_interactive, N_("interactively add changes")), - OPT_BOOLEAN('o', "only", &only, N_("commit only specified files")), - OPT_BOOLEAN('n', "no-verify", &no_verify, N_("bypass pre-commit hook")), - OPT_BOOLEAN(0, "dry-run", &dry_run, N_("show what would be committed")), + OPT_BOOL('a', "all", &all, N_("commit all changed files")), + OPT_BOOL('i', "include", &also, N_("add specified files to index for commit")), + OPT_BOOL(0, "interactive", &interactive, N_("interactively add files")), + OPT_BOOL('p', "patch", &patch_interactive, N_("interactively add changes")), + OPT_BOOL('o', "only", &only, N_("commit only specified files")), + OPT_BOOL('n', "no-verify", &no_verify, N_("bypass pre-commit hook")), + OPT_BOOL(0, "dry-run", &dry_run, N_("show what would be committed")), OPT_SET_INT(0, "short", &status_format, N_("show status concisely"), STATUS_FORMAT_SHORT), OPT_BOOL(0, "branch", &s.show_branch, N_("show branch information")), @@ -1441,19 +1459,17 @@ int cmd_commit(int argc, const char **argv, const char *prefix) OPT_SET_INT(0, "long", &status_format, N_("show status in long format (default)"), STATUS_FORMAT_LONG), - OPT_BOOLEAN('z', "null", &s.null_termination, - N_("terminate entries with NUL")), - OPT_BOOLEAN(0, "amend", &amend, N_("amend previous commit")), - OPT_BOOLEAN(0, "no-post-rewrite", &no_post_rewrite, N_("bypass post-rewrite hook")), + OPT_BOOL('z', "null", &s.null_termination, + N_("terminate entries with NUL")), + OPT_BOOL(0, "amend", &amend, N_("amend previous commit")), + OPT_BOOL(0, "no-post-rewrite", &no_post_rewrite, N_("bypass post-rewrite hook")), { OPTION_STRING, 'u', "untracked-files", &untracked_files_arg, N_("mode"), N_("show untracked files, optional modes: all, normal, no. (Default: all)"), PARSE_OPT_OPTARG, NULL, (intptr_t)"all" }, /* end commit contents options */ - { OPTION_BOOLEAN, 0, "allow-empty", &allow_empty, NULL, - N_("ok to record an empty change"), - PARSE_OPT_NOARG | PARSE_OPT_HIDDEN }, - { OPTION_BOOLEAN, 0, "allow-empty-message", &allow_empty_message, NULL, - N_("ok to record a change with an empty message"), - PARSE_OPT_NOARG | PARSE_OPT_HIDDEN }, + OPT_HIDDEN_BOOL(0, "allow-empty", &allow_empty, + N_("ok to record an empty change")), + OPT_HIDDEN_BOOL(0, "allow-empty-message", &allow_empty_message, + N_("ok to record a change with an empty message")), OPT_END() }; diff --git a/builtin/config.c b/builtin/config.c index 7759671eb8..4ab9e9a550 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -21,6 +21,7 @@ static char term = '\n'; static int use_global_config, use_system_config, use_local_config; static const char *given_config_file; +static const char *given_config_blob; static int actions, types; static const char *get_color_slot, *get_colorbool_slot; static int end_null; @@ -49,10 +50,11 @@ static int respect_includes = -1; static struct option builtin_config_options[] = { OPT_GROUP(N_("Config file location")), - OPT_BOOLEAN(0, "global", &use_global_config, N_("use global config file")), - OPT_BOOLEAN(0, "system", &use_system_config, N_("use system config file")), - OPT_BOOLEAN(0, "local", &use_local_config, N_("use repository config file")), + OPT_BOOL(0, "global", &use_global_config, N_("use global config file")), + OPT_BOOL(0, "system", &use_system_config, N_("use system config file")), + OPT_BOOL(0, "local", &use_local_config, N_("use repository config file")), OPT_STRING('f', "file", &given_config_file, N_("file"), N_("use given config file")), + OPT_STRING(0, "blob", &given_config_blob, N_("blob-id"), N_("read config from given blob object")), OPT_GROUP(N_("Action")), OPT_BIT(0, "get", &actions, N_("get value: name [value-regex]"), ACTION_GET), OPT_BIT(0, "get-all", &actions, N_("get all values: key [value-regex]"), ACTION_GET_ALL), @@ -73,7 +75,7 @@ static struct option builtin_config_options[] = { OPT_BIT(0, "bool-or-int", &types, N_("value is --bool or --int"), TYPE_BOOL_OR_INT), OPT_BIT(0, "path", &types, N_("value is a path (file or directory name)"), TYPE_PATH), OPT_GROUP(N_("Other")), - OPT_BOOLEAN('z', "null", &end_null, N_("terminate values with NUL byte")), + OPT_BOOL('z', "null", &end_null, N_("terminate values with NUL byte")), OPT_BOOL(0, "includes", &respect_includes, N_("respect include directives on lookup")), OPT_END(), }; @@ -218,7 +220,8 @@ static int get_value(const char *key_, const char *regex_) } git_config_with_options(collect_config, &values, - given_config_file, respect_includes); + given_config_file, given_config_blob, + respect_includes); ret = !values.nr; @@ -302,7 +305,8 @@ static void get_color(const char *def_color) get_color_found = 0; parsed_color[0] = '\0'; git_config_with_options(git_get_color_config, NULL, - given_config_file, respect_includes); + given_config_file, given_config_blob, + respect_includes); if (!get_color_found && def_color) color_parse(def_color, "command line", parsed_color); @@ -331,7 +335,8 @@ static int get_colorbool(int print) get_diff_color_found = -1; get_color_ui_found = -1; git_config_with_options(git_get_colorbool_config, NULL, - given_config_file, respect_includes); + given_config_file, given_config_blob, + respect_includes); if (get_colorbool_found < 0) { if (!strcmp(get_colorbool_slot, "color.diff")) @@ -353,6 +358,12 @@ static int get_colorbool(int print) return get_colorbool_found ? 0 : 1; } +static void check_blob_write(void) +{ + if (given_config_blob) + die("writing config blobs is not supported"); +} + int cmd_config(int argc, const char **argv, const char *prefix) { int nongit = !startup_info->have_repository; @@ -364,7 +375,8 @@ int cmd_config(int argc, const char **argv, const char *prefix) builtin_config_usage, PARSE_OPT_STOP_AT_NON_OPTION); - if (use_global_config + use_system_config + use_local_config + !!given_config_file > 1) { + if (use_global_config + use_system_config + use_local_config + + !!given_config_file + !!given_config_blob > 1) { error("only one config file at a time."); usage_with_options(builtin_config_usage, builtin_config_options); } @@ -443,6 +455,7 @@ int cmd_config(int argc, const char **argv, const char *prefix) check_argc(argc, 0, 0); if (git_config_with_options(show_all_config, NULL, given_config_file, + given_config_blob, respect_includes) < 0) { if (given_config_file) die_errno("unable to read config file '%s'", @@ -455,6 +468,8 @@ int cmd_config(int argc, const char **argv, const char *prefix) check_argc(argc, 0, 0); if (!given_config_file && nongit) die("not in a git directory"); + if (given_config_blob) + die("editing blobs is not supported"); git_config(git_default_config, NULL); launch_editor(given_config_file ? given_config_file : git_path("config"), @@ -462,6 +477,7 @@ int cmd_config(int argc, const char **argv, const char *prefix) } else if (actions == ACTION_SET) { int ret; + check_blob_write(); check_argc(argc, 2, 2); value = normalize_value(argv[0], argv[1]); ret = git_config_set_in_file(given_config_file, argv[0], value); @@ -471,18 +487,21 @@ int cmd_config(int argc, const char **argv, const char *prefix) return ret; } else if (actions == ACTION_SET_ALL) { + check_blob_write(); check_argc(argc, 2, 3); value = normalize_value(argv[0], argv[1]); return git_config_set_multivar_in_file(given_config_file, argv[0], value, argv[2], 0); } else if (actions == ACTION_ADD) { + check_blob_write(); check_argc(argc, 2, 2); value = normalize_value(argv[0], argv[1]); return git_config_set_multivar_in_file(given_config_file, argv[0], value, "^$", 0); } else if (actions == ACTION_REPLACE_ALL) { + check_blob_write(); check_argc(argc, 2, 3); value = normalize_value(argv[0], argv[1]); return git_config_set_multivar_in_file(given_config_file, @@ -505,6 +524,7 @@ int cmd_config(int argc, const char **argv, const char *prefix) return get_value(argv[0], argv[1]); } else if (actions == ACTION_UNSET) { + check_blob_write(); check_argc(argc, 1, 2); if (argc == 2) return git_config_set_multivar_in_file(given_config_file, @@ -514,12 +534,14 @@ int cmd_config(int argc, const char **argv, const char *prefix) argv[0], NULL); } else if (actions == ACTION_UNSET_ALL) { + check_blob_write(); check_argc(argc, 1, 2); return git_config_set_multivar_in_file(given_config_file, argv[0], NULL, argv[1], 1); } else if (actions == ACTION_RENAME_SECTION) { int ret; + check_blob_write(); check_argc(argc, 2, 2); ret = git_config_rename_section_in_file(given_config_file, argv[0], argv[1]); @@ -530,6 +552,7 @@ int cmd_config(int argc, const char **argv, const char *prefix) } else if (actions == ACTION_REMOVE_SECTION) { int ret; + check_blob_write(); check_argc(argc, 1, 1); ret = git_config_rename_section_in_file(given_config_file, argv[0], NULL); diff --git a/builtin/describe.c b/builtin/describe.c index 4e675c3d0d..c94e5c30d0 100644 --- a/builtin/describe.c +++ b/builtin/describe.c @@ -7,6 +7,7 @@ #include "parse-options.h" #include "diff.h" #include "hash.h" +#include "argv-array.h" #define SEEN (1u<<0) #define MAX_TAGS (FLAG_BITS - 1) @@ -405,12 +406,12 @@ int cmd_describe(int argc, const char **argv, const char *prefix) { int contains = 0; struct option options[] = { - OPT_BOOLEAN(0, "contains", &contains, N_("find the tag that comes after the commit")), - OPT_BOOLEAN(0, "debug", &debug, N_("debug search strategy on stderr")), - OPT_BOOLEAN(0, "all", &all, N_("use any ref")), - OPT_BOOLEAN(0, "tags", &tags, N_("use any tag, even unannotated")), - OPT_BOOLEAN(0, "long", &longformat, N_("always use long format")), - OPT_BOOLEAN(0, "first-parent", &first_parent, N_("only follow first parent")), + OPT_BOOL(0, "contains", &contains, N_("find the tag that comes after the commit")), + OPT_BOOL(0, "debug", &debug, N_("debug search strategy on stderr")), + OPT_BOOL(0, "all", &all, N_("use any ref")), + OPT_BOOL(0, "tags", &tags, N_("use any tag, even unannotated")), + OPT_BOOL(0, "long", &longformat, N_("always use long format")), + OPT_BOOL(0, "first-parent", &first_parent, N_("only follow first parent")), OPT__ABBREV(&abbrev), OPT_SET_INT(0, "exact-match", &max_candidates, N_("only output exact matches"), 0), @@ -418,11 +419,11 @@ int cmd_describe(int argc, const char **argv, const char *prefix) N_("consider <n> most recent tags (default: 10)")), OPT_STRING(0, "match", &pattern, N_("pattern"), N_("only consider tags matching <pattern>")), - OPT_BOOLEAN(0, "always", &always, - N_("show abbreviated commit object as fallback")), + OPT_BOOL(0, "always", &always, + N_("show abbreviated commit object as fallback")), {OPTION_STRING, 0, "dirty", &dirty, N_("mark"), - N_("append <mark> on dirty working tree (default: \"-dirty\")"), - PARSE_OPT_OPTARG, NULL, (intptr_t) "-dirty"}, + N_("append <mark> on dirty working tree (default: \"-dirty\")"), + PARSE_OPT_OPTARG, NULL, (intptr_t) "-dirty"}, OPT_END(), }; @@ -442,24 +443,24 @@ int cmd_describe(int argc, const char **argv, const char *prefix) die(_("--long is incompatible with --abbrev=0")); if (contains) { - const char **args = xmalloc((7 + argc) * sizeof(char *)); - int i = 0; - args[i++] = "name-rev"; - args[i++] = "--name-only"; - args[i++] = "--no-undefined"; + struct argv_array args; + + argv_array_init(&args); + argv_array_pushl(&args, "name-rev", + "--peel-tag", "--name-only", "--no-undefined", + NULL); if (always) - args[i++] = "--always"; + argv_array_push(&args, "--always"); if (!all) { - args[i++] = "--tags"; - if (pattern) { - char *s = xmalloc(strlen("--refs=refs/tags/") + strlen(pattern) + 1); - sprintf(s, "--refs=refs/tags/%s", pattern); - args[i++] = s; - } + argv_array_push(&args, "--tags"); + if (pattern) + argv_array_pushf(&args, "--refs=refs/tags/%s", pattern); + } + while (*argv) { + argv_array_push(&args, *argv); + argv++; } - memcpy(args + i, argv, argc * sizeof(char *)); - args[i + argc] = NULL; - return cmd_name_rev(i + argc, args, prefix); + return cmd_name_rev(args.argc, args.argv, prefix); } init_hash(&names); diff --git a/builtin/fast-export.c b/builtin/fast-export.c index d1d68e9fc6..b1b9b5e52a 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -379,7 +379,7 @@ static void handle_tag(const char *name, struct tag *tag) int tagged_mark; struct commit *p; - /* Trees have no identifer in fast-export output, thus we have no way + /* Trees have no identifier in fast-export output, thus we have no way * to output tags of trees, tags of tags of trees, etc. Simply omit * such tags. */ @@ -674,11 +674,11 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix) N_("Dump marks to this file")), OPT_STRING(0, "import-marks", &import_filename, N_("file"), N_("Import marks from this file")), - OPT_BOOLEAN(0, "fake-missing-tagger", &fake_missing_tagger, - N_("Fake a tagger when tags lack one")), - OPT_BOOLEAN(0, "full-tree", &full_tree, - N_("Output full tree for each commit")), - OPT_BOOLEAN(0, "use-done-feature", &use_done_feature, + OPT_BOOL(0, "fake-missing-tagger", &fake_missing_tagger, + N_("Fake a tagger when tags lack one")), + OPT_BOOL(0, "full-tree", &full_tree, + N_("Output full tree for each commit")), + OPT_BOOL(0, "use-done-feature", &use_done_feature, N_("Use the done feature to terminate the stream")), OPT_BOOL(0, "no-data", &no_data, N_("Skip output of blob data")), OPT_END() diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c index aba4465552..c8e858232a 100644 --- a/builtin/fetch-pack.c +++ b/builtin/fetch-pack.c @@ -1,6 +1,8 @@ #include "builtin.h" #include "pkt-line.h" #include "fetch-pack.h" +#include "remote.h" +#include "connect.h" static const char fetch_pack_usage[] = "git fetch-pack [--all] [--stdin] [--quiet|-q] [--keep|-k] [--thin] " @@ -100,6 +102,10 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix) pack_lockfile_ptr = &pack_lockfile; continue; } + if (!strcmp("--check-self-contained-and-connected", arg)) { + args.check_self_contained_and_connected = 1; + continue; + } usage(fetch_pack_usage); } @@ -152,6 +158,11 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix) printf("lock %s\n", pack_lockfile); fflush(stdout); } + if (args.check_self_contained_and_connected && + args.self_contained_and_connected) { + printf("connectivity-ok\n"); + fflush(stdout); + } close(fd[0]); close(fd[1]); if (finish_connect(conn)) diff --git a/builtin/fetch.c b/builtin/fetch.c index d784b2e694..5936539552 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -30,7 +30,11 @@ enum { TAGS_SET = 2 }; -static int all, append, dry_run, force, keep, multiple, prune, update_head_ok, verbosity; +static int fetch_prune_config = -1; /* unspecified */ +static int prune = -1; /* unspecified */ +#define PRUNE_BY_DEFAULT 0 /* do we prune by default? */ + +static int all, append, dry_run, force, keep, multiple, update_head_ok, verbosity; static int progress = -1, recurse_submodules = RECURSE_SUBMODULES_DEFAULT; static int tags = TAGS_DEFAULT, unshallow; static const char *depth; @@ -54,30 +58,39 @@ static int option_parse_recurse_submodules(const struct option *opt, return 0; } +static int git_fetch_config(const char *k, const char *v, void *cb) +{ + if (!strcmp(k, "fetch.prune")) { + fetch_prune_config = git_config_bool(k, v); + return 0; + } + return 0; +} + static struct option builtin_fetch_options[] = { OPT__VERBOSITY(&verbosity), - OPT_BOOLEAN(0, "all", &all, - N_("fetch from all remotes")), - OPT_BOOLEAN('a', "append", &append, - N_("append to .git/FETCH_HEAD instead of overwriting")), + OPT_BOOL(0, "all", &all, + N_("fetch from all remotes")), + OPT_BOOL('a', "append", &append, + N_("append to .git/FETCH_HEAD instead of overwriting")), OPT_STRING(0, "upload-pack", &upload_pack, N_("path"), N_("path to upload pack on remote end")), OPT__FORCE(&force, N_("force overwrite of local branch")), - OPT_BOOLEAN('m', "multiple", &multiple, - N_("fetch from multiple remotes")), + OPT_BOOL('m', "multiple", &multiple, + N_("fetch from multiple remotes")), OPT_SET_INT('t', "tags", &tags, N_("fetch all tags and associated objects"), TAGS_SET), OPT_SET_INT('n', NULL, &tags, N_("do not fetch all tags (--no-tags)"), TAGS_UNSET), - OPT_BOOLEAN('p', "prune", &prune, - N_("prune remote-tracking branches no longer on remote")), + OPT_BOOL('p', "prune", &prune, + N_("prune remote-tracking branches no longer on remote")), { OPTION_CALLBACK, 0, "recurse-submodules", NULL, N_("on-demand"), N_("control recursive fetching of submodules"), PARSE_OPT_OPTARG, option_parse_recurse_submodules }, - OPT_BOOLEAN(0, "dry-run", &dry_run, - N_("dry run")), - OPT_BOOLEAN('k', "keep", &keep, N_("keep downloaded pack")), - OPT_BOOLEAN('u', "update-head-ok", &update_head_ok, + OPT_BOOL(0, "dry-run", &dry_run, + N_("dry run")), + OPT_BOOL('k', "keep", &keep, N_("keep downloaded pack")), + OPT_BOOL('u', "update-head-ok", &update_head_ok, N_("allow updating of HEAD ref")), OPT_BOOL(0, "progress", &progress, N_("force progress reporting")), OPT_STRING(0, "depth", &depth, N_("depth"), @@ -771,7 +784,10 @@ static int do_fetch(struct transport *transport, goto cleanup; } if (prune) { - /* If --tags was specified, pretend the user gave us the canonical tags refspec */ + /* + * If --tags was specified, pretend that the user gave us + * the canonical tags refspec + */ if (tags == TAGS_SET) { const char *tags_str = "refs/tags/*:refs/tags/*"; struct refspec *tags_refspec, *refspec; @@ -882,7 +898,7 @@ static void add_options_to_argv(struct argv_array *argv) { if (dry_run) argv_array_push(argv, "--dry-run"); - if (prune) + if (prune > 0) argv_array_push(argv, "--prune"); if (update_head_ok) argv_array_push(argv, "--update-head-ok"); @@ -950,6 +966,17 @@ static int fetch_one(struct remote *remote, int argc, const char **argv) "remote name from which new revisions should be fetched.")); transport = transport_get(remote, NULL); + + if (prune < 0) { + /* no command line request */ + if (0 <= transport->remote->prune) + prune = transport->remote->prune; + else if (0 <= fetch_prune_config) + prune = fetch_prune_config; + else + prune = PRUNE_BY_DEFAULT; + } + transport_set_verbosity(transport, verbosity, progress); if (upload_pack) set_option(TRANS_OPT_UPLOADPACK, upload_pack); @@ -1007,6 +1034,8 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) for (i = 1; i < argc; i++) strbuf_addf(&default_rla, " %s", argv[i]); + git_config(git_fetch_config, NULL); + argc = parse_options(argc, argv, prefix, builtin_fetch_options, builtin_fetch_usage, 0); diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c index 7f059c31df..1d4083c2dd 100644 --- a/builtin/for-each-ref.c +++ b/builtin/for-each-ref.c @@ -867,24 +867,29 @@ static void sort_refs(struct ref_sort *sort, struct refinfo **refs, int num_refs static void print_value(struct refinfo *ref, int atom, int quote_style) { struct atom_value *v; + struct strbuf sb = STRBUF_INIT; get_value(ref, atom, &v); switch (quote_style) { case QUOTE_NONE: fputs(v->s, stdout); break; case QUOTE_SHELL: - sq_quote_print(stdout, v->s); + sq_quote_buf(&sb, v->s); break; case QUOTE_PERL: - perl_quote_print(stdout, v->s); + perl_quote_buf(&sb, v->s); break; case QUOTE_PYTHON: - python_quote_print(stdout, v->s); + python_quote_buf(&sb, v->s); break; case QUOTE_TCL: - tcl_quote_print(stdout, v->s); + tcl_quote_buf(&sb, v->s); break; } + if (quote_style != QUOTE_NONE) { + fputs(sb.buf, stdout); + strbuf_release(&sb); + } } static int hex1(char ch) diff --git a/builtin/fsck.c b/builtin/fsck.c index 9909b6d519..39fa5e86d4 100644 --- a/builtin/fsck.c +++ b/builtin/fsck.c @@ -611,15 +611,15 @@ static char const * const fsck_usage[] = { static struct option fsck_opts[] = { OPT__VERBOSE(&verbose, N_("be verbose")), - OPT_BOOLEAN(0, "unreachable", &show_unreachable, N_("show unreachable objects")), + OPT_BOOL(0, "unreachable", &show_unreachable, N_("show unreachable objects")), OPT_BOOL(0, "dangling", &show_dangling, N_("show dangling objects")), - OPT_BOOLEAN(0, "tags", &show_tags, N_("report tags")), - OPT_BOOLEAN(0, "root", &show_root, N_("report root nodes")), - OPT_BOOLEAN(0, "cache", &keep_cache_objects, N_("make index objects head nodes")), - OPT_BOOLEAN(0, "reflogs", &include_reflogs, N_("make reflogs head nodes (default)")), - OPT_BOOLEAN(0, "full", &check_full, N_("also consider packs and alternate objects")), - OPT_BOOLEAN(0, "strict", &check_strict, N_("enable more strict checking")), - OPT_BOOLEAN(0, "lost-found", &write_lost_and_found, + OPT_BOOL(0, "tags", &show_tags, N_("report tags")), + OPT_BOOL(0, "root", &show_root, N_("report root nodes")), + OPT_BOOL(0, "cache", &keep_cache_objects, N_("make index objects head nodes")), + OPT_BOOL(0, "reflogs", &include_reflogs, N_("make reflogs head nodes (default)")), + OPT_BOOL(0, "full", &check_full, N_("also consider packs and alternate objects")), + OPT_BOOL(0, "strict", &check_strict, N_("enable more strict checking")), + OPT_BOOL(0, "lost-found", &write_lost_and_found, N_("write dangling objects in .git/lost-found")), OPT_BOOL(0, "progress", &show_progress, N_("show progress")), OPT_END(), diff --git a/builtin/gc.c b/builtin/gc.c index 6be6c8d65b..891a2c2ecb 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -167,19 +167,78 @@ static int need_to_gc(void) return 1; } +/* return NULL on success, else hostname running the gc */ +static const char *lock_repo_for_gc(int force, pid_t* ret_pid) +{ + static struct lock_file lock; + static char locking_host[128]; + char my_host[128]; + struct strbuf sb = STRBUF_INIT; + struct stat st; + uintmax_t pid; + FILE *fp; + int fd, should_exit; + + if (gethostname(my_host, sizeof(my_host))) + strcpy(my_host, "unknown"); + + fd = hold_lock_file_for_update(&lock, git_path("gc.pid"), + LOCK_DIE_ON_ERROR); + if (!force) { + fp = fopen(git_path("gc.pid"), "r"); + memset(locking_host, 0, sizeof(locking_host)); + should_exit = + fp != NULL && + !fstat(fileno(fp), &st) && + /* + * 12 hour limit is very generous as gc should + * never take that long. On the other hand we + * don't really need a strict limit here, + * running gc --auto one day late is not a big + * problem. --force can be used in manual gc + * after the user verifies that no gc is + * running. + */ + time(NULL) - st.st_mtime <= 12 * 3600 && + fscanf(fp, "%"PRIuMAX" %127c", &pid, locking_host) == 2 && + /* be gentle to concurrent "gc" on remote hosts */ + (strcmp(locking_host, my_host) || !kill(pid, 0)); + if (fp != NULL) + fclose(fp); + if (should_exit) { + if (fd >= 0) + rollback_lock_file(&lock); + *ret_pid = pid; + return locking_host; + } + } + + strbuf_addf(&sb, "%"PRIuMAX" %s", + (uintmax_t) getpid(), my_host); + write_in_full(fd, sb.buf, sb.len); + strbuf_release(&sb); + commit_lock_file(&lock); + + return NULL; +} + int cmd_gc(int argc, const char **argv, const char *prefix) { int aggressive = 0; int auto_gc = 0; int quiet = 0; + int force = 0; + const char *name; + pid_t pid; struct option builtin_gc_options[] = { OPT__QUIET(&quiet, N_("suppress progress reporting")), { OPTION_STRING, 0, "prune", &prune_expire, N_("date"), N_("prune unreferenced objects"), PARSE_OPT_OPTARG, NULL, (intptr_t)prune_expire }, - OPT_BOOLEAN(0, "aggressive", &aggressive, N_("be more thorough (increased runtime)")), - OPT_BOOLEAN(0, "auto", &auto_gc, N_("enable auto-gc mode")), + OPT_BOOL(0, "aggressive", &aggressive, N_("be more thorough (increased runtime)")), + OPT_BOOL(0, "auto", &auto_gc, N_("enable auto-gc mode")), + OPT_BOOL(0, "force", &force, N_("force running gc even if there may be another gc running")), OPT_END() }; @@ -225,6 +284,14 @@ int cmd_gc(int argc, const char **argv, const char *prefix) } else add_repack_all_option(); + name = lock_repo_for_gc(force, &pid); + if (name) { + if (auto_gc) + return 0; /* be quiet on --auto */ + die(_("gc is already running on machine '%s' pid %"PRIuMAX" (use --force if not)"), + name, (uintmax_t)pid); + } + if (pack_refs && run_command_v_opt(pack_refs_cmd.argv, RUN_GIT_CMD)) return error(FAILED_RUN, pack_refs_cmd.argv[0]); diff --git a/builtin/grep.c b/builtin/grep.c index 76a6a60906..03bc442e3f 100644 --- a/builtin/grep.c +++ b/builtin/grep.c @@ -287,8 +287,7 @@ static int grep_sha1(struct grep_opt *opt, const unsigned char *sha1, struct strbuf pathbuf = STRBUF_INIT; if (opt->relative && opt->prefix_length) { - quote_path_relative(filename + tree_name_len, -1, &pathbuf, - opt->prefix); + quote_path_relative(filename + tree_name_len, opt->prefix, &pathbuf); strbuf_insert(&pathbuf, 0, filename, tree_name_len); } else { strbuf_addstr(&pathbuf, filename); @@ -319,7 +318,7 @@ static int grep_file(struct grep_opt *opt, const char *filename) struct strbuf buf = STRBUF_INIT; if (opt->relative && opt->prefix_length) - quote_path_relative(filename, -1, &buf, opt->prefix); + quote_path_relative(filename, opt->prefix, &buf); else strbuf_addstr(&buf, filename); @@ -377,7 +376,7 @@ static int grep_cache(struct grep_opt *opt, const struct pathspec *pathspec, int read_cache(); for (nr = 0; nr < active_nr; nr++) { - struct cache_entry *ce = active_cache[nr]; + const struct cache_entry *ce = active_cache[nr]; if (!S_ISREG(ce->ce_mode)) continue; if (!match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 0, NULL)) @@ -639,20 +638,20 @@ int cmd_grep(int argc, const char **argv, const char *prefix) int pattern_type_arg = GREP_PATTERN_TYPE_UNSPECIFIED; struct option options[] = { - OPT_BOOLEAN(0, "cached", &cached, + OPT_BOOL(0, "cached", &cached, N_("search in index instead of in the work tree")), OPT_NEGBIT(0, "no-index", &use_index, N_("find in contents not managed by git"), 1), - OPT_BOOLEAN(0, "untracked", &untracked, + OPT_BOOL(0, "untracked", &untracked, N_("search in both tracked and untracked files")), OPT_SET_INT(0, "exclude-standard", &opt_exclude, N_("search also in ignored files"), 1), OPT_GROUP(""), - OPT_BOOLEAN('v', "invert-match", &opt.invert, + OPT_BOOL('v', "invert-match", &opt.invert, N_("show non-matching lines")), - OPT_BOOLEAN('i', "ignore-case", &opt.ignore_case, + OPT_BOOL('i', "ignore-case", &opt.ignore_case, N_("case insensitive matching")), - OPT_BOOLEAN('w', "word-regexp", &opt.word_regexp, + OPT_BOOL('w', "word-regexp", &opt.word_regexp, N_("match patterns only at word boundaries")), OPT_SET_INT('a', "text", &opt.binary, N_("process binary files as text"), GREP_BINARY_TEXT), @@ -676,26 +675,26 @@ int cmd_grep(int argc, const char **argv, const char *prefix) N_("use Perl-compatible regular expressions"), GREP_PATTERN_TYPE_PCRE), OPT_GROUP(""), - OPT_BOOLEAN('n', "line-number", &opt.linenum, N_("show line numbers")), + OPT_BOOL('n', "line-number", &opt.linenum, N_("show line numbers")), OPT_NEGBIT('h', NULL, &opt.pathname, N_("don't show filenames"), 1), OPT_BIT('H', NULL, &opt.pathname, N_("show filenames"), 1), OPT_NEGBIT(0, "full-name", &opt.relative, N_("show filenames relative to top directory"), 1), - OPT_BOOLEAN('l', "files-with-matches", &opt.name_only, + OPT_BOOL('l', "files-with-matches", &opt.name_only, N_("show only filenames instead of matching lines")), - OPT_BOOLEAN(0, "name-only", &opt.name_only, + OPT_BOOL(0, "name-only", &opt.name_only, N_("synonym for --files-with-matches")), - OPT_BOOLEAN('L', "files-without-match", + OPT_BOOL('L', "files-without-match", &opt.unmatch_name_only, N_("show only the names of files without match")), - OPT_BOOLEAN('z', "null", &opt.null_following_name, + OPT_BOOL('z', "null", &opt.null_following_name, N_("print NUL after filenames")), - OPT_BOOLEAN('c', "count", &opt.count, + OPT_BOOL('c', "count", &opt.count, N_("show the number of matches instead of matching lines")), OPT__COLOR(&opt.color, N_("highlight matches")), - OPT_BOOLEAN(0, "break", &opt.file_break, + OPT_BOOL(0, "break", &opt.file_break, N_("print empty line between matches from different files")), - OPT_BOOLEAN(0, "heading", &opt.heading, + OPT_BOOL(0, "heading", &opt.heading, N_("show filename only once above matches from same file")), OPT_GROUP(""), OPT_CALLBACK('C', "context", &opt, N_("n"), @@ -707,9 +706,9 @@ int cmd_grep(int argc, const char **argv, const char *prefix) N_("show <n> context lines after matches")), OPT_NUMBER_CALLBACK(&opt, N_("shortcut for -C NUM"), context_callback), - OPT_BOOLEAN('p', "show-function", &opt.funcname, + OPT_BOOL('p', "show-function", &opt.funcname, N_("show a line with the function name before matches")), - OPT_BOOLEAN('W', "function-context", &opt.funcbody, + OPT_BOOL('W', "function-context", &opt.funcbody, N_("show the surrounding function")), OPT_GROUP(""), OPT_CALLBACK('f', NULL, &opt, N_("file"), @@ -719,7 +718,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix) { OPTION_CALLBACK, 0, "and", &opt, NULL, N_("combine patterns specified with -e"), PARSE_OPT_NOARG | PARSE_OPT_NONEG, and_callback }, - OPT_BOOLEAN(0, "or", &dummy, ""), + OPT_BOOL(0, "or", &dummy, ""), { OPTION_CALLBACK, 0, "not", &opt, NULL, "", PARSE_OPT_NOARG | PARSE_OPT_NONEG, not_callback }, { OPTION_CALLBACK, '(', NULL, &opt, NULL, "", @@ -730,7 +729,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix) close_callback }, OPT__QUIET(&opt.status_only, N_("indicate hit with exit status without output")), - OPT_BOOLEAN(0, "all-match", &opt.all_match, + OPT_BOOL(0, "all-match", &opt.all_match, N_("show only matches from files that match all patterns")), { OPTION_SET_INT, 0, "debug", &opt.debug, NULL, N_("show parse tree for grep expression"), @@ -739,8 +738,8 @@ int cmd_grep(int argc, const char **argv, const char *prefix) { OPTION_STRING, 'O', "open-files-in-pager", &show_in_pager, N_("pager"), N_("show matching files in the pager"), PARSE_OPT_OPTARG, NULL, (intptr_t)default_pager }, - OPT_BOOLEAN(0, "ext-grep", &external_grep_allowed__ignored, - N_("allow calling of grep(1) (ignored by this build)")), + OPT_BOOL(0, "ext-grep", &external_grep_allowed__ignored, + N_("allow calling of grep(1) (ignored by this build)")), { OPTION_CALLBACK, 0, "help-all", &options, NULL, N_("show usage"), PARSE_OPT_HIDDEN | PARSE_OPT_NOARG, help_callback }, OPT_END() diff --git a/builtin/hash-object.c b/builtin/hash-object.c index 8d184f1a99..d7fcf4c13c 100644 --- a/builtin/hash-object.c +++ b/builtin/hash-object.c @@ -70,10 +70,10 @@ static const char *vpath; static const struct option hash_object_options[] = { OPT_STRING('t', NULL, &type, N_("type"), N_("object type")), - OPT_BOOLEAN('w', NULL, &write_object, N_("write the object into the object database")), - OPT_BOOLEAN( 0 , "stdin", &hashstdin, N_("read the object from stdin")), - OPT_BOOLEAN( 0 , "stdin-paths", &stdin_paths, N_("read file names from stdin")), - OPT_BOOLEAN( 0 , "no-filters", &no_filters, N_("store file as is without filters")), + OPT_BOOL('w', NULL, &write_object, N_("write the object into the object database")), + OPT_COUNTUP( 0 , "stdin", &hashstdin, N_("read the object from stdin")), + OPT_BOOL( 0 , "stdin-paths", &stdin_paths, N_("read file names from stdin")), + OPT_BOOL( 0 , "no-filters", &no_filters, N_("store file as is without filters")), OPT_STRING( 0 , "path", &vpath, N_("file"), N_("process file as it were from this path")), OPT_END() }; diff --git a/builtin/log.c b/builtin/log.c index 873af69476..77d0f5f3fd 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -121,7 +121,7 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix, static struct line_opt_callback_data line_cb = {NULL, NULL, STRING_LIST_INIT_DUP}; const struct option builtin_log_options[] = { - OPT_BOOL(0, "quiet", &quiet, N_("suppress diff output")), + OPT__QUIET(&quiet, N_("suppress diff output")), OPT_BOOL(0, "source", &source, N_("show source")), OPT_BOOL(0, "use-mailmap", &mailmap, N_("Use mail map file")), { OPTION_CALLBACK, 0, "decorate", NULL, NULL, N_("decorate options"), @@ -1112,6 +1112,21 @@ static int cc_callback(const struct option *opt, const char *arg, int unset) return 0; } +static int from_callback(const struct option *opt, const char *arg, int unset) +{ + char **from = opt->value; + + free(*from); + + if (unset) + *from = NULL; + else if (arg) + *from = xstrdup(arg); + else + *from = xstrdup(git_committer_info(IDENT_NO_DATE)); + return 0; +} + int cmd_format_patch(int argc, const char **argv, const char *prefix) { struct commit *commit; @@ -1134,6 +1149,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) int quiet = 0; int reroll_count = -1; char *branch_name = NULL; + char *from = NULL; const struct option builtin_format_patch_options[] = { { OPTION_CALLBACK, 'n', "numbered", &numbered, NULL, N_("use [PATCH n/m] even with a single patch"), @@ -1163,13 +1179,13 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) { OPTION_CALLBACK, 'k', "keep-subject", &rev, NULL, N_("don't strip/add [PATCH]"), PARSE_OPT_NOARG | PARSE_OPT_NONEG, keep_callback }, - OPT_BOOLEAN(0, "no-binary", &no_binary_diff, - N_("don't output binary diffs")), - OPT_BOOLEAN(0, "ignore-if-in-upstream", &ignore_if_in_upstream, - N_("don't include a patch matching a commit upstream")), - { OPTION_BOOLEAN, 'p', "no-stat", &use_patch_format, NULL, + OPT_BOOL(0, "no-binary", &no_binary_diff, + N_("don't output binary diffs")), + OPT_BOOL(0, "ignore-if-in-upstream", &ignore_if_in_upstream, + N_("don't include a patch matching a commit upstream")), + { OPTION_SET_INT, 'p', "no-stat", &use_patch_format, NULL, N_("show patch format instead of default (patch + stat)"), - PARSE_OPT_NONEG | PARSE_OPT_NOARG }, + PARSE_OPT_NONEG | PARSE_OPT_NOARG, NULL, 1}, OPT_GROUP(N_("Messaging")), { OPTION_CALLBACK, 0, "add-header", NULL, N_("header"), N_("add email header"), 0, header_callback }, @@ -1177,6 +1193,9 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) 0, to_callback }, { OPTION_CALLBACK, 0, "cc", NULL, N_("email"), N_("add Cc: header"), 0, cc_callback }, + { OPTION_CALLBACK, 0, "from", &from, N_("ident"), + N_("set From address to <ident> (or committer ident if absent)"), + PARSE_OPT_OPTARG, from_callback }, OPT_STRING(0, "in-reply-to", &in_reply_to, N_("message-id"), N_("make first mail a reply to <message-id>")), { OPTION_CALLBACK, 0, "attach", &rev, N_("boundary"), @@ -1191,8 +1210,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) PARSE_OPT_OPTARG, thread_callback }, OPT_STRING(0, "signature", &signature, N_("signature"), N_("add a signature")), - OPT_BOOLEAN(0, "quiet", &quiet, - N_("don't print the patch filenames")), + OPT__QUIET(&quiet, N_("don't print the patch filenames")), OPT_END() }; @@ -1264,6 +1282,11 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) rev.extra_headers = strbuf_detach(&buf, NULL); + if (from) { + if (split_ident_line(&rev.from_ident, from, strlen(from))) + die(_("invalid ident line: %s"), from); + } + if (start_number < 0) start_number = 1; diff --git a/builtin/ls-files.c b/builtin/ls-files.c index d3a0495f7d..d4823c9d38 100644 --- a/builtin/ls-files.c +++ b/builtin/ls-files.c @@ -47,10 +47,14 @@ static const char *tag_modified = ""; static const char *tag_skip_worktree = ""; static const char *tag_resolve_undo = ""; -static void write_name(const char* name, size_t len) +static void write_name(const char *name) { - write_name_quoted_relative(name, len, prefix, prefix_len, stdout, - line_terminator); + /* + * With "--full-name", prefix_len=0; this caller needs to pass + * an empty string in that case (a NULL is good for ""). + */ + write_name_quoted_relative(name, prefix_len ? prefix : NULL, + stdout, line_terminator); } static void show_dir_entry(const char *tag, struct dir_entry *ent) @@ -64,7 +68,7 @@ static void show_dir_entry(const char *tag, struct dir_entry *ent) return; fputs(tag, stdout); - write_name(ent->name, ent->len); + write_name(ent->name); } static void show_other_files(struct dir_struct *dir) @@ -128,7 +132,7 @@ static void show_killed_files(struct dir_struct *dir) } } -static void show_ce_entry(const char *tag, struct cache_entry *ce) +static void show_ce_entry(const char *tag, const struct cache_entry *ce) { int len = max_prefix_len; @@ -164,9 +168,9 @@ static void show_ce_entry(const char *tag, struct cache_entry *ce) find_unique_abbrev(ce->sha1,abbrev), ce_stage(ce)); } - write_name(ce->name, ce_namelen(ce)); + write_name(ce->name); if (debug_mode) { - struct stat_data *sd = &ce->ce_stat_data; + const struct stat_data *sd = &ce->ce_stat_data; printf(" ctime: %d:%d\n", sd->sd_ctime.sec, sd->sd_ctime.nsec); printf(" mtime: %d:%d\n", sd->sd_mtime.sec, sd->sd_mtime.nsec); @@ -199,12 +203,12 @@ static void show_ru_info(void) printf("%s%06o %s %d\t", tag_resolve_undo, ui->mode[i], find_unique_abbrev(ui->sha1[i], abbrev), i + 1); - write_name(path, len); + write_name(path); } } } -static int ce_excluded(struct dir_struct *dir, struct cache_entry *ce) +static int ce_excluded(struct dir_struct *dir, const struct cache_entry *ce) { int dtype = ce_to_dtype(ce); return is_excluded(dir, ce->name, &dtype); @@ -224,7 +228,7 @@ static void show_files(struct dir_struct *dir) } if (show_cached || show_stage) { for (i = 0; i < active_nr; i++) { - struct cache_entry *ce = active_cache[i]; + const struct cache_entry *ce = active_cache[i]; if ((dir->flags & DIR_SHOW_IGNORED) && !ce_excluded(dir, ce)) continue; @@ -238,7 +242,7 @@ static void show_files(struct dir_struct *dir) } if (show_deleted || show_modified) { for (i = 0; i < active_nr; i++) { - struct cache_entry *ce = active_cache[i]; + const struct cache_entry *ce = active_cache[i]; struct stat st; int err; if ((dir->flags & DIR_SHOW_IGNORED) && @@ -274,7 +278,7 @@ static void prune_cache(const char *prefix) last = active_nr; while (last > first) { int next = (last + first) >> 1; - struct cache_entry *ce = active_cache[next]; + const struct cache_entry *ce = active_cache[next]; if (!strncmp(ce->name, prefix, max_prefix_len)) { first = next+1; continue; @@ -445,24 +449,24 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) { OPTION_CALLBACK, 'z', NULL, NULL, NULL, N_("paths are separated with NUL character"), PARSE_OPT_NOARG, option_parse_z }, - OPT_BOOLEAN('t', NULL, &show_tag, + OPT_BOOL('t', NULL, &show_tag, N_("identify the file status with tags")), - OPT_BOOLEAN('v', NULL, &show_valid_bit, + OPT_BOOL('v', NULL, &show_valid_bit, N_("use lowercase letters for 'assume unchanged' files")), - OPT_BOOLEAN('c', "cached", &show_cached, + OPT_BOOL('c', "cached", &show_cached, N_("show cached files in the output (default)")), - OPT_BOOLEAN('d', "deleted", &show_deleted, + OPT_BOOL('d', "deleted", &show_deleted, N_("show deleted files in the output")), - OPT_BOOLEAN('m', "modified", &show_modified, + OPT_BOOL('m', "modified", &show_modified, N_("show modified files in the output")), - OPT_BOOLEAN('o', "others", &show_others, + OPT_BOOL('o', "others", &show_others, N_("show other files in the output")), OPT_BIT('i', "ignored", &dir.flags, N_("show ignored files in the output"), DIR_SHOW_IGNORED), - OPT_BOOLEAN('s', "stage", &show_stage, + OPT_BOOL('s', "stage", &show_stage, N_("show staged contents' object name in the output")), - OPT_BOOLEAN('k', "killed", &show_killed, + OPT_BOOL('k', "killed", &show_killed, N_("show files on the filesystem that need to be removed")), OPT_BIT(0, "directory", &dir.flags, N_("show 'other' directories' name only"), @@ -470,9 +474,9 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) OPT_NEGBIT(0, "empty-directory", &dir.flags, N_("don't show empty directories"), DIR_HIDE_EMPTY_DIRECTORIES), - OPT_BOOLEAN('u', "unmerged", &show_unmerged, + OPT_BOOL('u', "unmerged", &show_unmerged, N_("show unmerged files in the output")), - OPT_BOOLEAN(0, "resolve-undo", &show_resolve_undo, + OPT_BOOL(0, "resolve-undo", &show_resolve_undo, N_("show resolve-undo information")), { OPTION_CALLBACK, 'x', "exclude", &exclude_list, N_("pattern"), N_("skip files matching pattern"), @@ -488,12 +492,12 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) { OPTION_SET_INT, 0, "full-name", &prefix_len, NULL, N_("make the output relative to the project top directory"), PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL }, - OPT_BOOLEAN(0, "error-unmatch", &error_unmatch, + OPT_BOOL(0, "error-unmatch", &error_unmatch, N_("if any <file> is not in the index, treat this as an error")), OPT_STRING(0, "with-tree", &with_tree, N_("tree-ish"), N_("pretend that paths removed since <tree-ish> are still present")), OPT__ABBREV(&abbrev), - OPT_BOOLEAN(0, "debug", &debug_mode, N_("show debugging data")), + OPT_BOOL(0, "debug", &debug_mode, N_("show debugging data")), OPT_END() }; diff --git a/builtin/ls-tree.c b/builtin/ls-tree.c index f6d8215181..65ec931846 100644 --- a/builtin/ls-tree.c +++ b/builtin/ls-tree.c @@ -139,9 +139,9 @@ int cmd_ls_tree(int argc, const char **argv, const char *prefix) LS_NAME_ONLY), OPT_SET_INT(0, "full-name", &chomp_prefix, N_("use full path names"), 0), - OPT_BOOLEAN(0, "full-tree", &full_tree, - N_("list entire tree; not just current directory " - "(implies --full-name)")), + OPT_BOOL(0, "full-tree", &full_tree, + N_("list entire tree; not just current directory " + "(implies --full-name)")), OPT__ABBREV(&abbrev), OPT_END() }; diff --git a/builtin/merge-base.c b/builtin/merge-base.c index 0c4cd2f9f7..e88eb93f14 100644 --- a/builtin/merge-base.c +++ b/builtin/merge-base.c @@ -95,11 +95,11 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix) int is_ancestor = 0; struct option options[] = { - OPT_BOOLEAN('a', "all", &show_all, N_("output all common ancestors")), - OPT_BOOLEAN(0, "octopus", &octopus, N_("find ancestors for a single n-way merge")), - OPT_BOOLEAN(0, "independent", &reduce, N_("list revs not reachable from others")), - OPT_BOOLEAN(0, "is-ancestor", &is_ancestor, - N_("is the first one ancestor of the other?")), + OPT_BOOL('a', "all", &show_all, N_("output all common ancestors")), + OPT_BOOL(0, "octopus", &octopus, N_("find ancestors for a single n-way merge")), + OPT_BOOL(0, "independent", &reduce, N_("list revs not reachable from others")), + OPT_BOOL(0, "is-ancestor", &is_ancestor, + N_("is the first one ancestor of the other?")), OPT_END() }; diff --git a/builtin/merge-file.c b/builtin/merge-file.c index c0570f2407..844f84f40b 100644 --- a/builtin/merge-file.c +++ b/builtin/merge-file.c @@ -30,7 +30,7 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix) int quiet = 0; int prefixlen = 0; struct option options[] = { - OPT_BOOLEAN('p', "stdout", &to_stdout, N_("send results to standard output")), + OPT_BOOL('p', "stdout", &to_stdout, N_("send results to standard output")), OPT_SET_INT(0, "diff3", &xmp.style, N_("use a diff3 based merge"), XDL_MERGE_DIFF3), OPT_SET_INT(0, "ours", &xmp.favor, N_("for conflicts, use our version"), XDL_MERGE_FAVOR_OURS), diff --git a/builtin/merge-index.c b/builtin/merge-index.c index be5e514324..b416d92849 100644 --- a/builtin/merge-index.c +++ b/builtin/merge-index.c @@ -16,7 +16,7 @@ static int merge_entry(int pos, const char *path) die("git merge-index: %s not in the cache", path); found = 0; do { - struct cache_entry *ce = active_cache[pos]; + const struct cache_entry *ce = active_cache[pos]; int stage = ce_stage(ce); if (strcmp(ce->name, path)) @@ -58,7 +58,7 @@ static void merge_all(void) { int i; for (i = 0; i < active_nr; i++) { - struct cache_entry *ce = active_cache[i]; + const struct cache_entry *ce = active_cache[i]; if (!ce_stage(ce)) continue; i += merge_entry(i, ce->name)-1; diff --git a/builtin/merge.c b/builtin/merge.c index bad4536a87..a8cf4a2484 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -47,8 +47,8 @@ static const char * const builtin_merge_usage[] = { }; static int show_diffstat = 1, shortlog_len = -1, squash; -static int option_commit = 1, allow_fast_forward = 1; -static int fast_forward_only, option_edit = -1; +static int option_commit = 1; +static int option_edit = -1; static int allow_trivial = 1, have_message, verify_signatures; static int overwrite_ignore = 1; static struct strbuf merge_msg = STRBUF_INIT; @@ -76,6 +76,14 @@ static struct strategy all_strategy[] = { static const char *pull_twohead, *pull_octopus; +enum ff_type { + FF_NO, + FF_ALLOW, + FF_ONLY +}; + +static enum ff_type fast_forward = FF_ALLOW; + static int option_parse_message(const struct option *opt, const char *arg, int unset) { @@ -178,26 +186,33 @@ static int option_parse_n(const struct option *opt, return 0; } +static int option_parse_ff_only(const struct option *opt, + const char *arg, int unset) +{ + fast_forward = FF_ONLY; + return 0; +} + static struct option builtin_merge_options[] = { { OPTION_CALLBACK, 'n', NULL, NULL, NULL, N_("do not show a diffstat at the end of the merge"), PARSE_OPT_NOARG, option_parse_n }, - OPT_BOOLEAN(0, "stat", &show_diffstat, + OPT_BOOL(0, "stat", &show_diffstat, N_("show a diffstat at the end of the merge")), - OPT_BOOLEAN(0, "summary", &show_diffstat, N_("(synonym to --stat)")), + OPT_BOOL(0, "summary", &show_diffstat, N_("(synonym to --stat)")), { OPTION_INTEGER, 0, "log", &shortlog_len, N_("n"), N_("add (at most <n>) entries from shortlog to merge commit message"), PARSE_OPT_OPTARG, NULL, DEFAULT_MERGE_LOG_LEN }, - OPT_BOOLEAN(0, "squash", &squash, + OPT_BOOL(0, "squash", &squash, N_("create a single commit instead of doing a merge")), - OPT_BOOLEAN(0, "commit", &option_commit, + OPT_BOOL(0, "commit", &option_commit, N_("perform a commit if the merge succeeds (default)")), OPT_BOOL('e', "edit", &option_edit, N_("edit message before committing")), - OPT_BOOLEAN(0, "ff", &allow_fast_forward, - N_("allow fast-forward (default)")), - OPT_BOOLEAN(0, "ff-only", &fast_forward_only, - N_("abort if fast-forward is not possible")), + OPT_SET_INT(0, "ff", &fast_forward, N_("allow fast-forward (default)"), FF_ALLOW), + { OPTION_CALLBACK, 0, "ff-only", NULL, NULL, + N_("abort if fast-forward is not possible"), + PARSE_OPT_NOARG | PARSE_OPT_NONEG, option_parse_ff_only }, OPT_RERERE_AUTOUPDATE(&allow_rerere_auto), OPT_BOOL(0, "verify-signatures", &verify_signatures, N_("Verify that the named commit has a valid GPG signature")), @@ -209,12 +224,12 @@ static struct option builtin_merge_options[] = { N_("merge commit message (for a non-fast-forward merge)"), option_parse_message), OPT__VERBOSITY(&verbosity), - OPT_BOOLEAN(0, "abort", &abort_current_merge, + OPT_BOOL(0, "abort", &abort_current_merge, N_("abort the current in-progress merge")), OPT_SET_INT(0, "progress", &show_progress, N_("force progress reporting"), 1), { OPTION_STRING, 'S', "gpg-sign", &sign_commit, N_("key id"), N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" }, - OPT_BOOLEAN(0, "overwrite-ignore", &overwrite_ignore, N_("update ignored files (default)")), + OPT_BOOL(0, "overwrite-ignore", &overwrite_ignore, N_("update ignored files (default)")), OPT_END() }; @@ -581,10 +596,9 @@ static int git_merge_config(const char *k, const char *v, void *cb) else if (!strcmp(k, "merge.ff")) { int boolval = git_config_maybe_bool(k, v); if (0 <= boolval) { - allow_fast_forward = boolval; + fast_forward = boolval ? FF_ALLOW : FF_NO; } else if (v && !strcmp(v, "only")) { - allow_fast_forward = 1; - fast_forward_only = 1; + fast_forward = FF_ONLY; } /* do not barf on values from future versions of git */ return 0; } else if (!strcmp(k, "merge.defaulttoupstream")) { @@ -863,7 +877,7 @@ static int finish_automerge(struct commit *head, free_commit_list(common); parents = remoteheads; - if (!head_subsumed || !allow_fast_forward) + if (!head_subsumed || fast_forward == FF_NO) commit_list_insert(head, &parents); strbuf_addch(&merge_msg, '\n'); prepare_to_commit(remoteheads); @@ -889,7 +903,7 @@ static int suggest_conflicts(int renormalizing) die_errno(_("Could not open '%s' for writing"), filename); fprintf(fp, "\nConflicts:\n"); for (pos = 0; pos < active_nr; pos++) { - struct cache_entry *ce = active_cache[pos]; + const struct cache_entry *ce = active_cache[pos]; if (ce_stage(ce)) { fprintf(fp, "\t%s\n", ce->name); @@ -1008,7 +1022,7 @@ static void write_merge_state(struct commit_list *remoteheads) if (fd < 0) die_errno(_("Could not open '%s' for writing"), filename); strbuf_reset(&buf); - if (!allow_fast_forward) + if (fast_forward == FF_NO) strbuf_addf(&buf, "no-ff"); if (write_in_full(fd, buf.buf, buf.len) != buf.len) die_errno(_("Could not write to '%s'"), filename); @@ -1157,14 +1171,11 @@ int cmd_merge(int argc, const char **argv, const char *prefix) show_diffstat = 0; if (squash) { - if (!allow_fast_forward) + if (fast_forward == FF_NO) die(_("You cannot combine --squash with --no-ff.")); option_commit = 0; } - if (!allow_fast_forward && fast_forward_only) - die(_("You cannot combine --no-ff with --ff-only.")); - if (!abort_current_merge) { if (!argc) { if (default_to_upstream) @@ -1206,7 +1217,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) "empty head")); if (squash) die(_("Squash commit into empty head not supported yet")); - if (!allow_fast_forward) + if (fast_forward == FF_NO) die(_("Non-fast-forward commit does not make sense into " "an empty head")); remoteheads = collect_parents(head_commit, &head_subsumed, argc, argv); @@ -1294,11 +1305,11 @@ int cmd_merge(int argc, const char **argv, const char *prefix) sha1_to_hex(commit->object.sha1)); setenv(buf.buf, merge_remote_util(commit)->name, 1); strbuf_reset(&buf); - if (!fast_forward_only && + if (fast_forward != FF_ONLY && merge_remote_util(commit) && merge_remote_util(commit)->obj && merge_remote_util(commit)->obj->type == OBJ_TAG) - allow_fast_forward = 0; + fast_forward = FF_NO; } if (option_edit < 0) @@ -1315,7 +1326,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) for (i = 0; i < use_strategies_nr; i++) { if (use_strategies[i]->attr & NO_FAST_FORWARD) - allow_fast_forward = 0; + fast_forward = FF_NO; if (use_strategies[i]->attr & NO_TRIVIAL) allow_trivial = 0; } @@ -1345,7 +1356,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) */ finish_up_to_date("Already up-to-date."); goto done; - } else if (allow_fast_forward && !remoteheads->next && + } else if (fast_forward != FF_NO && !remoteheads->next && !common->next && !hashcmp(common->item->object.sha1, head_commit->object.sha1)) { /* Again the most common case of merging one remote. */ @@ -1392,7 +1403,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) * only one common. */ refresh_cache(REFRESH_QUIET); - if (allow_trivial && !fast_forward_only) { + if (allow_trivial && fast_forward != FF_ONLY) { /* See if it is really trivial. */ git_committer_info(IDENT_STRICT); printf(_("Trying really trivial in-index merge...\n")); @@ -1433,7 +1444,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) } } - if (fast_forward_only) + if (fast_forward == FF_ONLY) die(_("Not possible to fast-forward, aborting.")); /* We are going to make a new commit. */ diff --git a/builtin/mv.c b/builtin/mv.c index 7dd6bb491c..aec79d1838 100644 --- a/builtin/mv.c +++ b/builtin/mv.c @@ -64,7 +64,7 @@ int cmd_mv(int argc, const char **argv, const char *prefix) OPT__VERBOSE(&verbose, N_("be verbose")), OPT__DRY_RUN(&show_only, N_("dry run")), OPT__FORCE(&force, N_("force move/rename even if target exists")), - OPT_BOOLEAN('k', NULL, &ignore_errors, N_("skip move/rename errors")), + OPT_BOOL('k', NULL, &ignore_errors, N_("skip move/rename errors")), OPT_END(), }; const char **source, **destination, **dest_path, **submodule_gitfile; diff --git a/builtin/name-rev.c b/builtin/name-rev.c index 87d485496f..20fcf8c696 100644 --- a/builtin/name-rev.c +++ b/builtin/name-rev.c @@ -4,6 +4,7 @@ #include "tag.h" #include "refs.h" #include "parse-options.h" +#include "sha1-lookup.h" #define CUTOFF_DATE_SLOP 86400 /* one day */ @@ -96,12 +97,51 @@ static int subpath_matches(const char *path, const char *filter) return -1; } +static const char *name_ref_abbrev(const char *refname, int shorten_unambiguous) +{ + if (shorten_unambiguous) + refname = shorten_unambiguous_ref(refname, 0); + else if (!prefixcmp(refname, "refs/heads/")) + refname = refname + 11; + else if (!prefixcmp(refname, "refs/")) + refname = refname + 5; + return refname; +} + struct name_ref_data { int tags_only; int name_only; const char *ref_filter; }; +static struct tip_table { + struct tip_table_entry { + unsigned char sha1[20]; + const char *refname; + } *table; + int nr; + int alloc; + int sorted; +} tip_table; + +static void add_to_tip_table(const unsigned char *sha1, const char *refname, + int shorten_unambiguous) +{ + refname = name_ref_abbrev(refname, shorten_unambiguous); + + ALLOC_GROW(tip_table.table, tip_table.nr + 1, tip_table.alloc); + hashcpy(tip_table.table[tip_table.nr].sha1, sha1); + tip_table.table[tip_table.nr].refname = xstrdup(refname); + tip_table.nr++; + tip_table.sorted = 0; +} + +static int tipcmp(const void *a_, const void *b_) +{ + const struct tip_table_entry *a = a_, *b = b_; + return hashcmp(a->sha1, b->sha1); +} + static int name_ref(const char *path, const unsigned char *sha1, int flags, void *cb_data) { struct object *o = parse_object(sha1); @@ -124,6 +164,8 @@ static int name_ref(const char *path, const unsigned char *sha1, int flags, void } } + add_to_tip_table(sha1, path, can_abbreviate_output); + while (o && o->type == OBJ_TAG) { struct tag *t = (struct tag *) o; if (!t->tagged) @@ -134,18 +176,38 @@ static int name_ref(const char *path, const unsigned char *sha1, int flags, void if (o && o->type == OBJ_COMMIT) { struct commit *commit = (struct commit *)o; - if (can_abbreviate_output) - path = shorten_unambiguous_ref(path, 0); - else if (!prefixcmp(path, "refs/heads/")) - path = path + 11; - else if (!prefixcmp(path, "refs/")) - path = path + 5; - + path = name_ref_abbrev(path, can_abbreviate_output); name_rev(commit, xstrdup(path), 0, 0, deref); } return 0; } +static const unsigned char *nth_tip_table_ent(size_t ix, void *table_) +{ + struct tip_table_entry *table = table_; + return table[ix].sha1; +} + +static const char *get_exact_ref_match(const struct object *o) +{ + int found; + + if (!tip_table.table || !tip_table.nr) + return NULL; + + if (!tip_table.sorted) { + qsort(tip_table.table, tip_table.nr, sizeof(*tip_table.table), + tipcmp); + tip_table.sorted = 1; + } + + found = sha1_pos(o->sha1, tip_table.table, tip_table.nr, + nth_tip_table_ent); + if (0 <= found) + return tip_table.table[found].refname; + return NULL; +} + /* returns a static buffer */ static const char *get_rev_name(const struct object *o) { @@ -154,7 +216,7 @@ static const char *get_rev_name(const struct object *o) struct commit *c; if (o->type != OBJ_COMMIT) - return NULL; + return get_exact_ref_match(o); c = (struct commit *) o; n = c->util; if (!n) @@ -245,25 +307,31 @@ static void name_rev_line(char *p, struct name_ref_data *data) int cmd_name_rev(int argc, const char **argv, const char *prefix) { struct object_array revs = OBJECT_ARRAY_INIT; - int all = 0, transform_stdin = 0, allow_undefined = 1, always = 0; + int all = 0, transform_stdin = 0, allow_undefined = 1, always = 0, peel_tag = 0; struct name_ref_data data = { 0, 0, NULL }; struct option opts[] = { - OPT_BOOLEAN(0, "name-only", &data.name_only, N_("print only names (no SHA-1)")), - OPT_BOOLEAN(0, "tags", &data.tags_only, N_("only use tags to name the commits")), + OPT_BOOL(0, "name-only", &data.name_only, N_("print only names (no SHA-1)")), + OPT_BOOL(0, "tags", &data.tags_only, N_("only use tags to name the commits")), OPT_STRING(0, "refs", &data.ref_filter, N_("pattern"), N_("only use refs matching <pattern>")), OPT_GROUP(""), - OPT_BOOLEAN(0, "all", &all, N_("list all commits reachable from all refs")), - OPT_BOOLEAN(0, "stdin", &transform_stdin, N_("read from stdin")), - OPT_BOOLEAN(0, "undefined", &allow_undefined, N_("allow to print `undefined` names")), - OPT_BOOLEAN(0, "always", &always, + OPT_BOOL(0, "all", &all, N_("list all commits reachable from all refs")), + OPT_BOOL(0, "stdin", &transform_stdin, N_("read from stdin")), + OPT_BOOL(0, "undefined", &allow_undefined, N_("allow to print `undefined` names (default)")), + OPT_BOOL(0, "always", &always, N_("show abbreviated commit object as fallback")), + { + /* A Hidden OPT_BOOL */ + OPTION_SET_INT, 0, "peel-tag", &peel_tag, NULL, + N_("dereference tags in the input (internal use)"), + PARSE_OPT_NOARG | PARSE_OPT_HIDDEN, NULL, 1, + }, OPT_END(), }; git_config(git_default_config, NULL); argc = parse_options(argc, argv, prefix, opts, name_rev_usage, 0); - if (!!all + !!transform_stdin + !!argc > 1) { + if (all + transform_stdin + !!argc > 1) { error("Specify either a list, or --all, not both!"); usage_with_options(name_rev_usage, opts); } @@ -272,7 +340,7 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix) for (; argc; argc--, argv++) { unsigned char sha1[20]; - struct object *o; + struct object *object; struct commit *commit; if (get_sha1(*argv, sha1)) { @@ -281,17 +349,34 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix) continue; } - o = deref_tag(parse_object(sha1), *argv, 0); - if (!o || o->type != OBJ_COMMIT) { - fprintf(stderr, "Could not get commit for %s. Skipping.\n", + commit = NULL; + object = parse_object(sha1); + if (object) { + struct object *peeled = deref_tag(object, *argv, 0); + if (peeled && peeled->type == OBJ_COMMIT) + commit = (struct commit *)peeled; + } + + if (!object) { + fprintf(stderr, "Could not get object for %s. Skipping.\n", *argv); continue; } - commit = (struct commit *)o; - if (cutoff > commit->date) - cutoff = commit->date; - add_object_array((struct object *)commit, *argv, &revs); + if (commit) { + if (cutoff > commit->date) + cutoff = commit->date; + } + + if (peel_tag) { + if (!commit) { + fprintf(stderr, "Could not get commit for %s. Skipping.\n", + *argv); + continue; + } + object = (struct object *)commit; + } + add_object_array(object, *argv, &revs); } if (cutoff) diff --git a/builtin/notes.c b/builtin/notes.c index e4100c4982..d459e23c42 100644 --- a/builtin/notes.c +++ b/builtin/notes.c @@ -483,7 +483,7 @@ static int copy(int argc, const char **argv, const char *prefix) const char *rewrite_cmd = NULL; struct option options[] = { OPT__FORCE(&force, N_("replace existing notes")), - OPT_BOOLEAN(0, "stdin", &from_stdin, N_("read objects from stdin")), + OPT_BOOL(0, "stdin", &from_stdin, N_("read objects from stdin")), OPT_STRING(0, "for-rewrite", &rewrite_cmd, N_("command"), N_("load rewriting config for <command> (implies " "--stdin)")), @@ -739,13 +739,13 @@ static int merge(int argc, const char **argv, const char *prefix) N_("resolve notes conflicts using the given strategy " "(manual/ours/theirs/union/cat_sort_uniq)")), OPT_GROUP(N_("Committing unmerged notes")), - { OPTION_BOOLEAN, 0, "commit", &do_commit, NULL, + { OPTION_SET_INT, 0, "commit", &do_commit, NULL, N_("finalize notes merge by committing unmerged notes"), - PARSE_OPT_NOARG | PARSE_OPT_NONEG }, + PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, 1}, OPT_GROUP(N_("Aborting notes merge resolution")), - { OPTION_BOOLEAN, 0, "abort", &do_abort, NULL, + { OPTION_SET_INT, 0, "abort", &do_abort, NULL, N_("abort notes merge"), - PARSE_OPT_NOARG | PARSE_OPT_NONEG }, + PARSE_OPT_NOARG | PARSE_OPT_NONEG, NULL, 1}, OPT_END() }; @@ -853,7 +853,7 @@ static int remove_cmd(int argc, const char **argv, const char *prefix) OPT_BIT(0, "ignore-missing", &flag, N_("attempt to remove non-existent note is not an error"), IGNORE_MISSING), - OPT_BOOLEAN(0, "stdin", &from_stdin, + OPT_BOOL(0, "stdin", &from_stdin, N_("read object names from the standard input")), OPT_END() }; diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index f069462cb0..4eb0521c81 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -1809,7 +1809,7 @@ static void find_deltas(struct object_entry **list, unsigned *list_size, static void try_to_free_from_threads(size_t size) { read_lock(); - release_pack_memory(size, -1); + release_pack_memory(size); read_unlock(); } diff --git a/builtin/push.c b/builtin/push.c index 6d36c24268..50bbfd62b1 100644 --- a/builtin/push.c +++ b/builtin/push.c @@ -21,6 +21,8 @@ static const char *receivepack; static int verbosity; static int progress = -1; +static struct push_cas_option cas; + static const char **refspec; static int refspec_nr; static int refspec_alloc; @@ -92,7 +94,7 @@ static NORETURN int die_push_simple(struct branch *branch, struct remote *remote if (!short_upstream) short_upstream = branch->merge[0]->src; /* - * Don't show advice for people who explicitely set + * Don't show advice for people who explicitly set * push.default. */ if (push_default == PUSH_DEFAULT_UNSPECIFIED) @@ -316,6 +318,13 @@ static int push_with_options(struct transport *transport, int flags) if (thin) transport_set_option(transport, TRANS_OPT_THIN, "yes"); + if (!is_empty_cas(&cas)) { + if (!transport->smart_options) + die("underlying transport does not support --%s option", + CAS_OPT_NAME); + transport->smart_options->cas = &cas; + } + if (verbosity > 0) fprintf(stderr, _("Pushing to %s\n"), transport->url); err = transport_push(transport, refspec_nr, refspec, flags, @@ -446,15 +455,19 @@ int cmd_push(int argc, const char **argv, const char *prefix) OPT_BIT( 0 , "all", &flags, N_("push all refs"), TRANSPORT_PUSH_ALL), OPT_BIT( 0 , "mirror", &flags, N_("mirror all refs"), (TRANSPORT_PUSH_MIRROR|TRANSPORT_PUSH_FORCE)), - OPT_BOOLEAN( 0, "delete", &deleterefs, N_("delete refs")), - OPT_BOOLEAN( 0 , "tags", &tags, N_("push tags (can't be used with --all or --mirror)")), + OPT_BOOL( 0, "delete", &deleterefs, N_("delete refs")), + OPT_BOOL( 0 , "tags", &tags, N_("push tags (can't be used with --all or --mirror)")), OPT_BIT('n' , "dry-run", &flags, N_("dry run"), TRANSPORT_PUSH_DRY_RUN), OPT_BIT( 0, "porcelain", &flags, N_("machine-readable output"), TRANSPORT_PUSH_PORCELAIN), OPT_BIT('f', "force", &flags, N_("force updates"), TRANSPORT_PUSH_FORCE), + { OPTION_CALLBACK, + 0, CAS_OPT_NAME, &cas, N_("refname>:<expect"), + N_("require old value of ref to be at this value"), + PARSE_OPT_OPTARG, parseopt_push_cas_option }, { OPTION_CALLBACK, 0, "recurse-submodules", &flags, N_("check"), N_("control recursive pushing of submodules"), PARSE_OPT_OPTARG, option_parse_recurse_submodules }, - OPT_BOOLEAN( 0 , "thin", &thin, N_("use thin pack")), + OPT_BOOL( 0 , "thin", &thin, N_("use thin pack")), OPT_STRING( 0 , "receive-pack", &receivepack, "receive-pack", N_("receive pack program")), OPT_STRING( 0 , "exec", &receivepack, "receive-pack", N_("receive pack program")), OPT_BIT('u', "set-upstream", &flags, N_("set upstream for git pull/status"), diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index e3eb5fc058..7434d9b4a2 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -8,6 +8,7 @@ #include "commit.h" #include "object.h" #include "remote.h" +#include "connect.h" #include "transport.h" #include "string-list.h" #include "sha1-array.h" diff --git a/builtin/remote.c b/builtin/remote.c index 5e54d367b8..eaac3e2012 100644 --- a/builtin/remote.c +++ b/builtin/remote.c @@ -160,7 +160,7 @@ static int add(int argc, const char **argv) int i; struct option options[] = { - OPT_BOOLEAN('f', "fetch", &fetch, N_("fetch the remote branches")), + OPT_BOOL('f', "fetch", &fetch, N_("fetch the remote branches")), OPT_SET_INT(0, "tags", &fetch_tags, N_("import all tags and associated objects when fetching"), TAGS_SET), @@ -1088,7 +1088,7 @@ static int show(int argc, const char **argv) { int no_query = 0, result = 0, query_flag = 0; struct option options[] = { - OPT_BOOLEAN('n', NULL, &no_query, N_("do not query remotes")), + OPT_BOOL('n', NULL, &no_query, N_("do not query remotes")), OPT_END() }; struct ref_states states; @@ -1195,10 +1195,10 @@ static int set_head(int argc, const char **argv) char *head_name = NULL; struct option options[] = { - OPT_BOOLEAN('a', "auto", &opt_a, - N_("set refs/remotes/<name>/HEAD according to remote")), - OPT_BOOLEAN('d', "delete", &opt_d, - N_("delete refs/remotes/<name>/HEAD")), + OPT_BOOL('a', "auto", &opt_a, + N_("set refs/remotes/<name>/HEAD according to remote")), + OPT_BOOL('d', "delete", &opt_d, + N_("delete refs/remotes/<name>/HEAD")), OPT_END() }; argc = parse_options(argc, argv, NULL, options, builtin_remote_sethead_usage, @@ -1317,8 +1317,8 @@ static int update(int argc, const char **argv) { int i, prune = 0; struct option options[] = { - OPT_BOOLEAN('p', "prune", &prune, - N_("prune remotes after fetching")), + OPT_BOOL('p', "prune", &prune, + N_("prune remotes after fetching")), OPT_END() }; const char **fetch_argv; @@ -1404,7 +1404,7 @@ static int set_branches(int argc, const char **argv) { int add_mode = 0; struct option options[] = { - OPT_BOOLEAN('\0', "add", &add_mode, N_("add branch")), + OPT_BOOL('\0', "add", &add_mode, N_("add branch")), OPT_END() }; @@ -1432,11 +1432,11 @@ static int set_url(int argc, const char **argv) int urlset_nr; struct strbuf name_buf = STRBUF_INIT; struct option options[] = { - OPT_BOOLEAN('\0', "push", &push_mode, - N_("manipulate push URLs")), - OPT_BOOLEAN('\0', "add", &add_mode, - N_("add URL")), - OPT_BOOLEAN('\0', "delete", &delete_mode, + OPT_BOOL('\0', "push", &push_mode, + N_("manipulate push URLs")), + OPT_BOOL('\0', "add", &add_mode, + N_("add URL")), + OPT_BOOL('\0', "delete", &delete_mode, N_("delete URLs")), OPT_END() }; diff --git a/builtin/replace.c b/builtin/replace.c index 59d31152d0..11b0a55ae7 100644 --- a/builtin/replace.c +++ b/builtin/replace.c @@ -118,9 +118,9 @@ int cmd_replace(int argc, const char **argv, const char *prefix) { int list = 0, delete = 0, force = 0; struct option options[] = { - OPT_BOOLEAN('l', NULL, &list, N_("list replace refs")), - OPT_BOOLEAN('d', NULL, &delete, N_("delete replace refs")), - OPT_BOOLEAN('f', NULL, &force, N_("replace the ref if it exists")), + OPT_BOOL('l', NULL, &list, N_("list replace refs")), + OPT_BOOL('d', NULL, &delete, N_("delete replace refs")), + OPT_BOOL('f', NULL, &force, N_("replace the ref if it exists")), OPT_END() }; diff --git a/builtin/reset.c b/builtin/reset.c index 86150d14f1..5e4c551531 100644 --- a/builtin/reset.c +++ b/builtin/reset.c @@ -265,7 +265,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix) N_("reset HEAD, index and working tree"), MERGE), OPT_SET_INT(0, "keep", &reset_type, N_("reset HEAD but keep local changes"), KEEP), - OPT_BOOLEAN('p', "patch", &patch_mode, N_("select hunks interactively")), + OPT_BOOL('p', "patch", &patch_mode, N_("select hunks interactively")), OPT_END() }; diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index de894c7577..c76b89dc5b 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -346,9 +346,9 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix) NULL }; static struct option parseopt_opts[] = { - OPT_BOOLEAN(0, "keep-dashdash", &keep_dashdash, + OPT_BOOL(0, "keep-dashdash", &keep_dashdash, N_("keep the `--` passed as an arg")), - OPT_BOOLEAN(0, "stop-at-non-option", &stop_at_non_option, + OPT_BOOL(0, "stop-at-non-option", &stop_at_non_option, N_("stop parsing after the " "first non-option argument")), OPT_END(), @@ -486,21 +486,6 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) if (argc > 1 && !strcmp("--sq-quote", argv[1])) return cmd_sq_quote(argc - 2, argv + 2); - if (argc == 2 && !strcmp("--local-env-vars", argv[1])) { - int i; - for (i = 0; local_repo_env[i]; i++) - printf("%s\n", local_repo_env[i]); - return 0; - } - - if (argc > 2 && !strcmp(argv[1], "--resolve-git-dir")) { - const char *gitdir = resolve_gitdir(argv[2]); - if (!gitdir) - die("not a gitdir '%s'", argv[2]); - puts(gitdir); - return 0; - } - if (argc > 1 && !strcmp("-h", argv[1])) usage(builtin_rev_parse_usage); @@ -661,6 +646,12 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) for_each_remote_ref(show_reference, NULL); continue; } + if (!strcmp(arg, "--local-env-vars")) { + int i; + for (i = 0; local_repo_env[i]; i++) + printf("%s\n", local_repo_env[i]); + continue; + } if (!strcmp(arg, "--show-toplevel")) { const char *work_tree = get_git_work_tree(); if (work_tree) @@ -711,6 +702,13 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) printf("%s%s.git\n", cwd, len && cwd[len-1] != '/' ? "/" : ""); continue; } + if (!strcmp(arg, "--resolve-git-dir")) { + const char *gitdir = resolve_gitdir(argv[i+1]); + if (!gitdir) + die("not a gitdir '%s'", argv[i+1]); + puts(gitdir); + continue; + } if (!strcmp(arg, "--is-inside-git-dir")) { printf("%s\n", is_inside_git_dir() ? "true" : "false"); diff --git a/builtin/revert.c b/builtin/revert.c index 0401fdb02c..8e87acd12e 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -54,6 +54,7 @@ static int option_parse_x(const struct option *opt, return 0; } +LAST_ARG_MUST_BE_NULL static void verify_opt_compatible(const char *me, const char *base_opt, ...) { const char *this_opt; @@ -70,43 +71,19 @@ static void verify_opt_compatible(const char *me, const char *base_opt, ...) die(_("%s: %s cannot be used with %s"), me, this_opt, base_opt); } -static void verify_opt_mutually_compatible(const char *me, ...) -{ - const char *opt1, *opt2 = NULL; - va_list ap; - - va_start(ap, me); - while ((opt1 = va_arg(ap, const char *))) { - if (va_arg(ap, int)) - break; - } - if (opt1) { - while ((opt2 = va_arg(ap, const char *))) { - if (va_arg(ap, int)) - break; - } - } - va_end(ap); - - if (opt1 && opt2) - die(_("%s: %s cannot be used with %s"), me, opt1, opt2); -} - static void parse_args(int argc, const char **argv, struct replay_opts *opts) { const char * const * usage_str = revert_or_cherry_pick_usage(opts); const char *me = action_name(opts); - int remove_state = 0; - int contin = 0; - int rollback = 0; + int cmd = 0; struct option options[] = { - OPT_BOOLEAN(0, "quit", &remove_state, N_("end revert or cherry-pick sequence")), - OPT_BOOLEAN(0, "continue", &contin, N_("resume revert or cherry-pick sequence")), - OPT_BOOLEAN(0, "abort", &rollback, N_("cancel revert or cherry-pick sequence")), - OPT_BOOLEAN('n', "no-commit", &opts->no_commit, N_("don't automatically commit")), - OPT_BOOLEAN('e', "edit", &opts->edit, N_("edit the commit message")), + OPT_CMDMODE(0, "quit", &cmd, N_("end revert or cherry-pick sequence"), 'q'), + OPT_CMDMODE(0, "continue", &cmd, N_("resume revert or cherry-pick sequence"), 'c'), + OPT_CMDMODE(0, "abort", &cmd, N_("cancel revert or cherry-pick sequence"), 'a'), + OPT_BOOL('n', "no-commit", &opts->no_commit, N_("don't automatically commit")), + OPT_BOOL('e', "edit", &opts->edit, N_("edit the commit message")), OPT_NOOP_NOARG('r', NULL), - OPT_BOOLEAN('s', "signoff", &opts->signoff, N_("add Signed-off-by:")), + OPT_BOOL('s', "signoff", &opts->signoff, N_("add Signed-off-by:")), OPT_INTEGER('m', "mainline", &opts->mainline, N_("parent number")), OPT_RERERE_AUTOUPDATE(&opts->allow_rerere_auto), OPT_STRING(0, "strategy", &opts->strategy, N_("strategy"), N_("merge strategy")), @@ -122,11 +99,11 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts) if (opts->action == REPLAY_PICK) { struct option cp_extra[] = { - OPT_BOOLEAN('x', NULL, &opts->record_origin, N_("append commit name")), - OPT_BOOLEAN(0, "ff", &opts->allow_ff, N_("allow fast-forward")), - OPT_BOOLEAN(0, "allow-empty", &opts->allow_empty, N_("preserve initially empty commits")), - OPT_BOOLEAN(0, "allow-empty-message", &opts->allow_empty_message, N_("allow commits with empty messages")), - OPT_BOOLEAN(0, "keep-redundant-commits", &opts->keep_redundant_commits, N_("keep redundant, empty commits")), + OPT_BOOL('x', NULL, &opts->record_origin, N_("append commit name")), + OPT_BOOL(0, "ff", &opts->allow_ff, N_("allow fast-forward")), + OPT_BOOL(0, "allow-empty", &opts->allow_empty, N_("preserve initially empty commits")), + OPT_BOOL(0, "allow-empty-message", &opts->allow_empty_message, N_("allow commits with empty messages")), + OPT_BOOL(0, "keep-redundant-commits", &opts->keep_redundant_commits, N_("keep redundant, empty commits")), OPT_END(), }; if (parse_options_concat(options, ARRAY_SIZE(options), cp_extra)) @@ -137,23 +114,16 @@ static void parse_args(int argc, const char **argv, struct replay_opts *opts) PARSE_OPT_KEEP_ARGV0 | PARSE_OPT_KEEP_UNKNOWN); - /* Check for incompatible subcommands */ - verify_opt_mutually_compatible(me, - "--quit", remove_state, - "--continue", contin, - "--abort", rollback, - NULL); - /* implies allow_empty */ if (opts->keep_redundant_commits) opts->allow_empty = 1; /* Set the subcommand */ - if (remove_state) + if (cmd == 'q') opts->subcommand = REPLAY_REMOVE_STATE; - else if (contin) + else if (cmd == 'c') opts->subcommand = REPLAY_CONTINUE; - else if (rollback) + else if (cmd == 'a') opts->subcommand = REPLAY_ROLLBACK; else opts->subcommand = REPLAY_NONE; diff --git a/builtin/rm.c b/builtin/rm.c index c848dad1d0..9b59ab3a64 100644 --- a/builtin/rm.c +++ b/builtin/rm.c @@ -59,6 +59,21 @@ static void print_error_files(struct string_list *files_list, } } +static void error_removing_concrete_submodules(struct string_list *files, int *errs) +{ + print_error_files(files, + Q_("the following submodule (or one of its nested " + "submodules)\n" + "uses a .git directory:", + "the following submodules (or one of its nested " + "submodules)\n" + "use a .git directory:", files->nr), + _("\n(use 'rm -rf' if you really want to remove " + "it including all of its history)"), + errs); + string_list_clear(files, 0); +} + static int check_submodules_use_gitfiles(void) { int i; @@ -68,7 +83,7 @@ static int check_submodules_use_gitfiles(void) for (i = 0; i < list.nr; i++) { const char *name = list.entry[i].name; int pos; - struct cache_entry *ce; + const struct cache_entry *ce; struct stat st; pos = cache_name_pos(name, strlen(name)); @@ -87,16 +102,8 @@ static int check_submodules_use_gitfiles(void) if (!submodule_uses_gitfile(name)) string_list_append(&files, name); } - print_error_files(&files, - Q_("the following submodule (or one of its nested " - "submodules)\n uses a .git directory:", - "the following submodules (or one of its nested " - "submodules)\n use a .git directory:", - files.nr), - _("\n(use 'rm -rf' if you really want to remove " - "it including all of its history)"), - &errs); - string_list_clear(&files, 0); + + error_removing_concrete_submodules(&files, &errs); return errs; } @@ -121,7 +128,7 @@ static int check_local_mod(unsigned char *head, int index_only) for (i = 0; i < list.nr; i++) { struct stat st; int pos; - struct cache_entry *ce; + const struct cache_entry *ce; const char *name = list.entry[i].name; unsigned char sha1[20]; unsigned mode; @@ -238,17 +245,9 @@ static int check_local_mod(unsigned char *head, int index_only) " or -f to force removal)"), &errs); string_list_clear(&files_cached, 0); - print_error_files(&files_submodule, - Q_("the following submodule (or one of its nested " - "submodule)\nuses a .git directory:", - "the following submodules (or one of its nested " - "submodule)\nuse a .git directory:", - files_submodule.nr), - _("\n(use 'rm -rf' if you really " - "want to remove it including all " - "of its history)"), - &errs); - string_list_clear(&files_submodule, 0); + + error_removing_concrete_submodules(&files_submodule, &errs); + print_error_files(&files_local, Q_("the following file has local modifications:", "the following files have local modifications:", @@ -269,10 +268,10 @@ static int ignore_unmatch = 0; static struct option builtin_rm_options[] = { OPT__DRY_RUN(&show_only, N_("dry run")), OPT__QUIET(&quiet, N_("do not list removed files")), - OPT_BOOLEAN( 0 , "cached", &index_only, N_("only remove from the index")), + OPT_BOOL( 0 , "cached", &index_only, N_("only remove from the index")), OPT__FORCE(&force, N_("override the up-to-date check")), - OPT_BOOLEAN('r', NULL, &recursive, N_("allow recursive removal")), - OPT_BOOLEAN( 0 , "ignore-unmatch", &ignore_unmatch, + OPT_BOOL('r', NULL, &recursive, N_("allow recursive removal")), + OPT_BOOL( 0 , "ignore-unmatch", &ignore_unmatch, N_("exit with a zero status even if nothing matched")), OPT_END(), }; @@ -320,7 +319,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix) seen = xcalloc(pathspec.nr, 1); for (i = 0; i < active_nr; i++) { - struct cache_entry *ce = active_cache[i]; + const struct cache_entry *ce = active_cache[i]; if (!match_pathspec_depth(&pathspec, ce->name, ce_namelen(ce), 0, seen)) continue; ALLOC_GROW(list.entry, list.nr + 1, list.alloc); @@ -350,7 +349,7 @@ int cmd_rm(int argc, const char **argv, const char *prefix) *original ? original : "."); } - if (! seen_any) + if (!seen_any) exit(0); } diff --git a/builtin/send-pack.c b/builtin/send-pack.c index 152c4ea092..4482f16efb 100644 --- a/builtin/send-pack.c +++ b/builtin/send-pack.c @@ -5,6 +5,7 @@ #include "sideband.h" #include "run-command.h" #include "remote.h" +#include "connect.h" #include "send-pack.h" #include "quote.h" #include "transport.h" @@ -54,6 +55,11 @@ static void print_helper_status(struct ref *ref) msg = "needs force"; break; + case REF_STATUS_REJECT_STALE: + res = "error"; + msg = "stale info"; + break; + case REF_STATUS_REJECT_ALREADY_EXISTS: res = "error"; msg = "already exists"; @@ -102,6 +108,7 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) int flags; unsigned int reject_reasons; int progress = -1; + struct push_cas_option cas = {0}; argv++; for (i = 1; i < argc; i++, argv++) { @@ -164,6 +171,22 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) helper_status = 1; continue; } + if (!strcmp(arg, "--" CAS_OPT_NAME)) { + if (parse_push_cas_option(&cas, NULL, 0) < 0) + exit(1); + continue; + } + if (!strcmp(arg, "--no-" CAS_OPT_NAME)) { + if (parse_push_cas_option(&cas, NULL, 1) < 0) + exit(1); + continue; + } + if (!prefixcmp(arg, "--" CAS_OPT_NAME "=")) { + if (parse_push_cas_option(&cas, + strchr(arg, '=') + 1, 0) < 0) + exit(1); + continue; + } usage(send_pack_usage); } if (!dest) { @@ -224,6 +247,9 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) if (match_push_refs(local_refs, &remote_refs, nr_refspecs, refspecs, flags)) return -1; + if (!is_empty_cas(&cas)) + apply_push_cas(&cas, remote, remote_refs); + set_ref_status_for_push(remote_refs, args.send_mirror, args.force_update); diff --git a/builtin/shortlog.c b/builtin/shortlog.c index 1434f8fee4..ae73d17b6c 100644 --- a/builtin/shortlog.c +++ b/builtin/shortlog.c @@ -224,12 +224,12 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix) int nongit = !startup_info->have_repository; static const struct option options[] = { - OPT_BOOLEAN('n', "numbered", &log.sort_by_number, - N_("sort output according to the number of commits per author")), - OPT_BOOLEAN('s', "summary", &log.summary, - N_("Suppress commit descriptions, only provides commit count")), - OPT_BOOLEAN('e', "email", &log.email, - N_("Show the email address of each author")), + OPT_BOOL('n', "numbered", &log.sort_by_number, + N_("sort output according to the number of commits per author")), + OPT_BOOL('s', "summary", &log.summary, + N_("Suppress commit descriptions, only provides commit count")), + OPT_BOOL('e', "email", &log.email, + N_("Show the email address of each author")), { OPTION_CALLBACK, 'w', NULL, &log, N_("w[,i1[,i2]]"), N_("Linewrap output"), PARSE_OPT_OPTARG, &parse_wrap_args }, OPT_END(), diff --git a/builtin/show-branch.c b/builtin/show-branch.c index 99ec4af224..001f29ca1b 100644 --- a/builtin/show-branch.c +++ b/builtin/show-branch.c @@ -646,35 +646,35 @@ int cmd_show_branch(int ac, const char **av, const char *prefix) int dense = 1; const char *reflog_base = NULL; struct option builtin_show_branch_options[] = { - OPT_BOOLEAN('a', "all", &all_heads, - N_("show remote-tracking and local branches")), - OPT_BOOLEAN('r', "remotes", &all_remotes, - N_("show remote-tracking branches")), + OPT_BOOL('a', "all", &all_heads, + N_("show remote-tracking and local branches")), + OPT_BOOL('r', "remotes", &all_remotes, + N_("show remote-tracking branches")), OPT__COLOR(&showbranch_use_color, N_("color '*!+-' corresponding to the branch")), { OPTION_INTEGER, 0, "more", &extra, N_("n"), N_("show <n> more commits after the common ancestor"), PARSE_OPT_OPTARG, NULL, (intptr_t)1 }, OPT_SET_INT(0, "list", &extra, N_("synonym to more=-1"), -1), - OPT_BOOLEAN(0, "no-name", &no_name, N_("suppress naming strings")), - OPT_BOOLEAN(0, "current", &with_current_branch, - N_("include the current branch")), - OPT_BOOLEAN(0, "sha1-name", &sha1_name, - N_("name commits with their object names")), - OPT_BOOLEAN(0, "merge-base", &merge_base, - N_("show possible merge bases")), - OPT_BOOLEAN(0, "independent", &independent, + OPT_BOOL(0, "no-name", &no_name, N_("suppress naming strings")), + OPT_BOOL(0, "current", &with_current_branch, + N_("include the current branch")), + OPT_BOOL(0, "sha1-name", &sha1_name, + N_("name commits with their object names")), + OPT_BOOL(0, "merge-base", &merge_base, + N_("show possible merge bases")), + OPT_BOOL(0, "independent", &independent, N_("show refs unreachable from any other ref")), OPT_SET_INT(0, "topo-order", &sort_order, N_("show commits in topological order"), REV_SORT_IN_GRAPH_ORDER), - OPT_BOOLEAN(0, "topics", &topics, - N_("show only commits not on the first branch")), + OPT_BOOL(0, "topics", &topics, + N_("show only commits not on the first branch")), OPT_SET_INT(0, "sparse", &dense, N_("show merges reachable from only one tip"), 0), OPT_SET_INT(0, "date-order", &sort_order, - N_("show commits where no parent comes before its " - "children"), + N_("topologically sort, maintaining date order " + "where possible"), REV_SORT_BY_COMMIT_DATE), { OPTION_CALLBACK, 'g', "reflog", &reflog_base, N_("<n>[,<base>]"), N_("show <n> most recent ref-log entries starting at " diff --git a/builtin/show-ref.c b/builtin/show-ref.c index 4a0310da37..9f3f5e370b 100644 --- a/builtin/show-ref.c +++ b/builtin/show-ref.c @@ -31,6 +31,9 @@ static int show_ref(const char *refname, const unsigned char *sha1, int flag, vo const char *hex; unsigned char peeled[20]; + if (show_head && !strcmp(refname, "HEAD")) + goto match; + if (tags_only || heads_only) { int match; @@ -162,15 +165,15 @@ static int help_callback(const struct option *opt, const char *arg, int unset) } static const struct option show_ref_options[] = { - OPT_BOOLEAN(0, "tags", &tags_only, N_("only show tags (can be combined with heads)")), - OPT_BOOLEAN(0, "heads", &heads_only, N_("only show heads (can be combined with tags)")), - OPT_BOOLEAN(0, "verify", &verify, N_("stricter reference checking, " + OPT_BOOL(0, "tags", &tags_only, N_("only show tags (can be combined with heads)")), + OPT_BOOL(0, "heads", &heads_only, N_("only show heads (can be combined with tags)")), + OPT_BOOL(0, "verify", &verify, N_("stricter reference checking, " "requires exact ref path")), - { OPTION_BOOLEAN, 'h', NULL, &show_head, NULL, - N_("show the HEAD reference"), - PARSE_OPT_NOARG | PARSE_OPT_HIDDEN }, - OPT_BOOLEAN(0, "head", &show_head, N_("show the HEAD reference")), - OPT_BOOLEAN('d', "dereference", &deref_tags, + OPT_HIDDEN_BOOL('h', NULL, &show_head, + N_("show the HEAD reference, even if it would be filtered out")), + OPT_BOOL(0, "head", &show_head, + N_("show the HEAD reference, even if it would be filtered out")), + OPT_BOOL('d', "dereference", &deref_tags, N_("dereference tags into object IDs")), { OPTION_CALLBACK, 's', "hash", &abbrev, N_("n"), N_("only show SHA1 hash using <n> digits"), diff --git a/builtin/tag.c b/builtin/tag.c index af3af3f649..b577af562a 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -436,26 +436,26 @@ int cmd_tag(int argc, const char **argv, const char *prefix) struct ref_lock *lock; struct create_tag_options opt; char *cleanup_arg = NULL; - int annotate = 0, force = 0, lines = -1, list = 0, - delete = 0, verify = 0; + int annotate = 0, force = 0, lines = -1; + int cmdmode = 0; const char *msgfile = NULL, *keyid = NULL; struct msg_arg msg = { 0, STRBUF_INIT }; struct commit_list *with_commit = NULL; struct option options[] = { - OPT_BOOLEAN('l', "list", &list, N_("list tag names")), + OPT_CMDMODE('l', "list", &cmdmode, N_("list tag names"), 'l'), { OPTION_INTEGER, 'n', NULL, &lines, N_("n"), N_("print <n> lines of each tag message"), PARSE_OPT_OPTARG, NULL, 1 }, - OPT_BOOLEAN('d', "delete", &delete, N_("delete tags")), - OPT_BOOLEAN('v', "verify", &verify, N_("verify tags")), + OPT_CMDMODE('d', "delete", &cmdmode, N_("delete tags"), 'd'), + OPT_CMDMODE('v', "verify", &cmdmode, N_("verify tags"), 'v'), OPT_GROUP(N_("Tag creation options")), - OPT_BOOLEAN('a', "annotate", &annotate, + OPT_BOOL('a', "annotate", &annotate, N_("annotated tag, needs a message")), OPT_CALLBACK('m', "message", &msg, N_("message"), N_("tag message"), parse_msg_arg), OPT_FILENAME('F', "file", &msgfile, N_("read message from file")), - OPT_BOOLEAN('s', "sign", &opt.sign, N_("annotated and GPG-signed tag")), + OPT_BOOL('s', "sign", &opt.sign, N_("annotated and GPG-signed tag")), OPT_STRING(0, "cleanup", &cleanup_arg, N_("mode"), N_("how to strip spaces and #comments from message")), OPT_STRING('u', "local-user", &keyid, N_("key id"), @@ -489,22 +489,19 @@ int cmd_tag(int argc, const char **argv, const char *prefix) } if (opt.sign) annotate = 1; - if (argc == 0 && !(delete || verify)) - list = 1; + if (argc == 0 && !cmdmode) + cmdmode = 'l'; - if ((annotate || msg.given || msgfile || force) && - (list || delete || verify)) + if ((annotate || msg.given || msgfile || force) && (cmdmode != 0)) usage_with_options(git_tag_usage, options); - if (list + delete + verify > 1) - usage_with_options(git_tag_usage, options); finalize_colopts(&colopts, -1); - if (list && lines != -1) { + if (cmdmode == 'l' && lines != -1) { if (explicitly_enable_column(colopts)) die(_("--column and -n are incompatible")); colopts = 0; } - if (list) { + if (cmdmode == 'l') { int ret; if (column_active(colopts)) { struct column_options copts; @@ -523,9 +520,9 @@ int cmd_tag(int argc, const char **argv, const char *prefix) die(_("--contains option is only allowed with -l.")); if (points_at.nr) die(_("--points-at option is only allowed with -l.")); - if (delete) + if (cmdmode == 'd') return for_each_tag_name(argv, delete_tag); - if (verify) + if (cmdmode == 'v') return for_each_tag_name(argv, verify_tag); if (msg.given || msgfile) { diff --git a/builtin/tar-tree.c b/builtin/tar-tree.c index 3f1e7012db..ba3ffe69a9 100644 --- a/builtin/tar-tree.c +++ b/builtin/tar-tree.c @@ -26,8 +26,8 @@ int cmd_tar_tree(int argc, const char **argv, const char *prefix) * $0 tree-ish basedir ==> * git archive --format-tar --prefix=basedir tree-ish */ - int i; const char **nargv = xcalloc(sizeof(*nargv), argc + 3); + struct strbuf sb = STRBUF_INIT; char *basedir_arg; int nargc = 0; @@ -65,11 +65,10 @@ int cmd_tar_tree(int argc, const char **argv, const char *prefix) fprintf(stderr, "*** \"git tar-tree\" is now deprecated.\n" "*** Running \"git archive\" instead.\n***"); - for (i = 0; i < nargc; i++) { - fputc(' ', stderr); - sq_quote_print(stderr, nargv[i]); - } - fputc('\n', stderr); + sq_quote_argv(&sb, nargv, 0); + strbuf_addch(&sb, '\n'); + fputs(sb.buf, stderr); + strbuf_release(&sb); return cmd_archive(nargc, nargv, prefix); } diff --git a/builtin/update-index.c b/builtin/update-index.c index e795818799..e3a10d706d 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -84,7 +84,7 @@ static int process_lstat_error(const char *path, int err) return error("lstat(\"%s\"): %s", path, strerror(errno)); } -static int add_one_path(struct cache_entry *old, const char *path, int len, struct stat *st) +static int add_one_path(const struct cache_entry *old, const char *path, int len, struct stat *st) { int option, size; struct cache_entry *ce; @@ -143,7 +143,7 @@ static int process_directory(const char *path, int len, struct stat *st) /* Exact match: file or existing gitlink */ if (pos >= 0) { - struct cache_entry *ce = active_cache[pos]; + const struct cache_entry *ce = active_cache[pos]; if (S_ISGITLINK(ce->ce_mode)) { /* Do nothing to the index if there is no HEAD! */ @@ -159,7 +159,7 @@ static int process_directory(const char *path, int len, struct stat *st) /* Inexact match: is there perhaps a subdirectory match? */ pos = -pos-1; while (pos < active_nr) { - struct cache_entry *ce = active_cache[pos++]; + const struct cache_entry *ce = active_cache[pos++]; if (strncmp(ce->name, path, len)) break; @@ -184,7 +184,7 @@ static int process_path(const char *path) { int pos, len; struct stat st; - struct cache_entry *ce; + const struct cache_entry *ce; len = strlen(path); if (has_symlink_leading_path(path, len)) @@ -449,7 +449,7 @@ static int unresolve_one(const char *path) /* already merged */ pos = unmerge_cache_entry_at(pos); if (pos < active_nr) { - struct cache_entry *ce = active_cache[pos]; + const struct cache_entry *ce = active_cache[pos]; if (ce_stage(ce) && ce_namelen(ce) == namelen && !memcmp(ce->name, path, namelen)) @@ -463,7 +463,7 @@ static int unresolve_one(const char *path) */ pos = -pos-1; if (pos < active_nr) { - struct cache_entry *ce = active_cache[pos]; + const struct cache_entry *ce = active_cache[pos]; if (ce_namelen(ce) == namelen && !memcmp(ce->name, path, namelen)) { fprintf(stderr, @@ -560,7 +560,7 @@ static int do_reupdate(int ac, const char **av, has_head = 0; redo: for (pos = 0; pos < active_nr; pos++) { - struct cache_entry *ce = active_cache[pos]; + const struct cache_entry *ce = active_cache[pos]; struct cache_entry *old = NULL; int save_nr; diff --git a/builtin/update-ref.c b/builtin/update-ref.c index 51d2684859..7484d36a65 100644 --- a/builtin/update-ref.c +++ b/builtin/update-ref.c @@ -16,8 +16,8 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix) int delete = 0, no_deref = 0, flags = 0; struct option options[] = { OPT_STRING( 'm', NULL, &msg, N_("reason"), N_("reason of the update")), - OPT_BOOLEAN('d', NULL, &delete, N_("delete the reference")), - OPT_BOOLEAN( 0 , "no-deref", &no_deref, + OPT_BOOL('d', NULL, &delete, N_("delete the reference")), + OPT_BOOL( 0 , "no-deref", &no_deref, N_("update <refname> not the one it points to")), OPT_END(), }; diff --git a/cache-tree.c b/cache-tree.c index 37e4d008b5..0bbec43216 100644 --- a/cache-tree.c +++ b/cache-tree.c @@ -149,7 +149,7 @@ void cache_tree_invalidate_path(struct cache_tree *it, const char *path) cache_tree_invalidate_path(down->cache_tree, slash + 1); } -static int verify_cache(struct cache_entry **cache, +static int verify_cache(const struct cache_entry * const *cache, int entries, int flags) { int i, funny; @@ -158,7 +158,7 @@ static int verify_cache(struct cache_entry **cache, /* Verify that the tree is merged */ funny = 0; for (i = 0; i < entries; i++) { - struct cache_entry *ce = cache[i]; + const struct cache_entry *ce = cache[i]; if (ce_stage(ce)) { if (silent) return -1; @@ -234,7 +234,7 @@ int cache_tree_fully_valid(struct cache_tree *it) } static int update_one(struct cache_tree *it, - struct cache_entry **cache, + const struct cache_entry * const *cache, int entries, const char *base, int baselen, @@ -265,7 +265,7 @@ static int update_one(struct cache_tree *it, */ i = 0; while (i < entries) { - struct cache_entry *ce = cache[i]; + const struct cache_entry *ce = cache[i]; struct cache_tree_sub *sub; const char *path, *slash; int pathlen, sublen, subcnt, subskip; @@ -312,7 +312,7 @@ static int update_one(struct cache_tree *it, i = 0; while (i < entries) { - struct cache_entry *ce = cache[i]; + const struct cache_entry *ce = cache[i]; struct cache_tree_sub *sub; const char *path, *slash; int pathlen, entlen; @@ -397,7 +397,7 @@ static int update_one(struct cache_tree *it, } int cache_tree_update(struct cache_tree *it, - struct cache_entry **cache, + const struct cache_entry * const *cache, int entries, int flags) { @@ -599,8 +599,8 @@ int write_cache_as_tree(unsigned char *sha1, int flags, const char *prefix) was_valid = cache_tree_fully_valid(active_cache_tree); if (!was_valid) { if (cache_tree_update(active_cache_tree, - active_cache, active_nr, - flags) < 0) + (const struct cache_entry * const *)active_cache, + active_nr, flags) < 0) return WRITE_TREE_UNMERGED_INDEX; if (0 <= newfd) { if (!write_cache(newfd, active_cache, active_nr) && @@ -701,5 +701,6 @@ int update_main_cache_tree(int flags) if (!the_index.cache_tree) the_index.cache_tree = cache_tree(); return cache_tree_update(the_index.cache_tree, - the_index.cache, the_index.cache_nr, flags); + (const struct cache_entry * const *)the_index.cache, + the_index.cache_nr, flags); } diff --git a/cache-tree.h b/cache-tree.h index 55d0f59f2b..f1923ad1e9 100644 --- a/cache-tree.h +++ b/cache-tree.h @@ -30,7 +30,7 @@ void cache_tree_write(struct strbuf *, struct cache_tree *root); struct cache_tree *cache_tree_read(const char *buffer, unsigned long size); int cache_tree_fully_valid(struct cache_tree *); -int cache_tree_update(struct cache_tree *, struct cache_entry **, int, int); +int cache_tree_update(struct cache_tree *, const struct cache_entry * const *, int, int); int update_main_cache_tree(int); @@ -431,6 +431,8 @@ extern int path_inside_repo(const char *prefix, const char *path); extern int set_git_dir_init(const char *git_dir, const char *real_git_dir, int); extern int init_db(const char *template_dir, unsigned int flags); +extern void sanitize_stdfds(void); + #define alloc_nr(x) (((x)+16)*3/2) /* @@ -482,7 +484,7 @@ extern int remove_file_from_index(struct index_state *, const char *path); extern int add_to_index(struct index_state *, const char *path, struct stat *, int flags); extern int add_file_to_index(struct index_state *, const char *path, int flags); extern struct cache_entry *make_cache_entry(unsigned int mode, const unsigned char *sha1, const char *path, int stage, int refresh); -extern int ce_same_name(struct cache_entry *a, struct cache_entry *b); +extern int ce_same_name(const struct cache_entry *a, const struct cache_entry *b); extern int index_name_is_other(const struct index_state *, const char *, int); extern void *read_blob_data_from_index(struct index_state *, const char *, unsigned long *); @@ -561,6 +563,7 @@ extern int assume_unchanged; extern int prefer_symlink_refs; extern int log_all_ref_updates; extern int warn_ambiguous_refs; +extern int warn_on_object_refname_ambiguity; extern int shared_repository; extern const char *apply_default_whitespace; extern const char *apply_default_ignorewhitespace; @@ -744,7 +747,7 @@ int is_directory(const char *); const char *real_path(const char *path); const char *real_path_if_valid(const char *path); const char *absolute_path(const char *path); -const char *relative_path(const char *abs, const char *base); +const char *relative_path(const char *in, const char *prefix, struct strbuf *sb); int normalize_path_copy_len(char *dst, const char *src, int *prefix_len); int normalize_path_copy(char *dst, const char *src); int longest_ancestor_length(const char *path, struct string_list *prefixes); @@ -1022,68 +1025,6 @@ struct pack_entry { struct packed_git *p; }; -struct ref { - struct ref *next; - unsigned char old_sha1[20]; - unsigned char new_sha1[20]; - char *symref; - unsigned int - force:1, - forced_update:1, - deletion:1, - matched:1; - - /* - * Order is important here, as we write to FETCH_HEAD - * in numeric order. And the default NOT_FOR_MERGE - * should be 0, so that xcalloc'd structures get it - * by default. - */ - enum { - FETCH_HEAD_MERGE = -1, - FETCH_HEAD_NOT_FOR_MERGE = 0, - FETCH_HEAD_IGNORE = 1 - } fetch_head_status; - - enum { - REF_STATUS_NONE = 0, - REF_STATUS_OK, - REF_STATUS_REJECT_NONFASTFORWARD, - REF_STATUS_REJECT_ALREADY_EXISTS, - REF_STATUS_REJECT_NODELETE, - REF_STATUS_REJECT_FETCH_FIRST, - REF_STATUS_REJECT_NEEDS_FORCE, - REF_STATUS_UPTODATE, - REF_STATUS_REMOTE_REJECT, - REF_STATUS_EXPECTING_REPORT - } status; - char *remote_status; - struct ref *peer_ref; /* when renaming */ - char name[FLEX_ARRAY]; /* more */ -}; - -#define REF_NORMAL (1u << 0) -#define REF_HEADS (1u << 1) -#define REF_TAGS (1u << 2) - -extern struct ref *find_ref_by_name(const struct ref *list, const char *name); - -#define CONNECT_VERBOSE (1u << 0) -extern struct child_process *git_connect(int fd[2], const char *url, const char *prog, int flags); -extern int finish_connect(struct child_process *conn); -extern int git_connection_is_socket(struct child_process *conn); -struct extra_have_objects { - int nr, alloc; - unsigned char (*array)[20]; -}; -extern struct ref **get_remote_heads(int in, char *src_buf, size_t src_len, - struct ref **list, unsigned int flags, - struct extra_have_objects *); -extern int server_supports(const char *feature); -extern int parse_feature_request(const char *features, const char *feature); -extern const char *server_feature_value(const char *feature, int *len_ret); -extern const char *parse_feature_value(const char *feature_list, const char *feature, int *len_ret); - extern struct packed_git *parse_pack_index(unsigned char *sha1, const char *idx_path); /* A hook for count-objects to report invalid files in pack directory */ @@ -1116,7 +1057,9 @@ extern int unpack_object_header(struct packed_git *, struct pack_window **, off_ struct object_info { /* Request */ + enum object_type *typep; unsigned long *sizep; + unsigned long *disk_sizep; /* Response */ enum { @@ -1160,11 +1103,15 @@ extern int update_server_info(int); typedef int (*config_fn_t)(const char *, const char *, void *); extern int git_default_config(const char *, const char *, void *); extern int git_config_from_file(config_fn_t fn, const char *, void *); +extern int git_config_from_buf(config_fn_t fn, const char *name, + const char *buf, size_t len, void *data); extern void git_config_push_parameter(const char *text); extern int git_config_from_parameters(config_fn_t fn, void *data); extern int git_config(config_fn_t fn, void *); extern int git_config_with_options(config_fn_t fn, void *, - const char *filename, int respect_includes); + const char *filename, + const char *blob_ref, + int respect_includes); extern int git_config_early(config_fn_t fn, void *, const char *repo_config); extern int git_parse_ulong(const char *, unsigned long *); extern int git_config_int(const char *, const char *); diff --git a/combine-diff.c b/combine-diff.c index c973f5d07e..3b92c44880 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -10,6 +10,7 @@ #include "refs.h" #include "userdiff.h" #include "sha1-array.h" +#include "revision.h" static struct combine_diff_path *intersect_paths(struct combine_diff_path *curr, int n, int num_parent) { @@ -165,7 +166,7 @@ static struct lline *coalesce_lines(struct lline *base, int *lenbase, /* * Coalesce new lines into base by finding the LCS - * - Create the table to run dynamic programing + * - Create the table to run dynamic programming * - Compute the LCS * - Then reverse read the direction structure: * - If we have MATCH, assign parent to base flag, and consume @@ -1383,7 +1384,7 @@ void diff_tree_combined(const unsigned char *sha1, void diff_tree_combined_merge(const struct commit *commit, int dense, struct rev_info *rev) { - struct commit_list *parent = commit->parents; + struct commit_list *parent = get_saved_parents(rev, commit); struct sha1_array parents = SHA1_ARRAY_INIT; while (parent) { diff --git a/command-list.txt b/command-list.txt index bf83303c48..08b04e2c66 100644 --- a/command-list.txt +++ b/command-list.txt @@ -13,6 +13,7 @@ git-bundle mainporcelain git-cat-file plumbinginterrogators git-check-attr purehelpers git-check-ignore purehelpers +git-check-mailmap purehelpers git-checkout mainporcelain common git-checkout-index plumbingmanipulators git-check-ref-format purehelpers diff --git a/commit-slab.h b/commit-slab.h index 7d481638af..d4c8286470 100644 --- a/commit-slab.h +++ b/commit-slab.h @@ -48,7 +48,7 @@ static void init_ ##slabname## _with_stride(struct slabname *s, \ if (!stride) \ stride = 1; \ s->stride = stride; \ - elem_size = sizeof(struct slabname) * stride; \ + elem_size = sizeof(elemtype) * stride; \ s->slab_size = COMMIT_SLAB_SIZE / elem_size; \ s->slab_count = 0; \ s->slab = NULL; \ @@ -72,11 +72,10 @@ static void clear_ ##slabname(struct slabname *s) \ static elemtype *slabname## _at(struct slabname *s, \ const struct commit *c) \ { \ - int nth_slab, nth_slot, ix; \ + int nth_slab, nth_slot; \ \ - ix = c->index * s->stride; \ - nth_slab = ix / s->slab_size; \ - nth_slot = ix % s->slab_size; \ + nth_slab = c->index / s->slab_size; \ + nth_slot = c->index % s->slab_size; \ \ if (s->slab_count <= nth_slab) { \ int i; \ @@ -89,8 +88,8 @@ static elemtype *slabname## _at(struct slabname *s, \ } \ if (!s->slab[nth_slab]) \ s->slab[nth_slab] = xcalloc(s->slab_size, \ - sizeof(**s->slab)); \ - return &s->slab[nth_slab][nth_slot]; \ + sizeof(**s->slab) * s->stride); \ + return &s->slab[nth_slab][nth_slot * s->stride]; \ } \ \ static int stat_ ##slabname## realloc @@ -377,6 +377,22 @@ unsigned commit_list_count(const struct commit_list *l) return c; } +struct commit_list *copy_commit_list(struct commit_list *list) +{ + struct commit_list *head = NULL; + struct commit_list **pp = &head; + while (list) { + struct commit_list *new; + new = xmalloc(sizeof(struct commit_list)); + new->item = list->item; + new->next = NULL; + *pp = new; + pp = &new->next; + list = list->next; + } + return head; +} + void free_commit_list(struct commit_list *list) { while (list) { @@ -581,7 +597,7 @@ static int compare_commits_by_author_date(const void *a_, const void *b_, return 0; } -static int compare_commits_by_commit_date(const void *a_, const void *b_, void *unused) +int compare_commits_by_commit_date(const void *a_, const void *b_, void *unused) { const struct commit *a = a_, *b = b_; /* newer commits with larger date first */ @@ -1350,10 +1366,15 @@ int commit_tree(const struct strbuf *msg, unsigned char *tree, static int find_invalid_utf8(const char *buf, int len) { int offset = 0; + static const unsigned int max_codepoint[] = { + 0x7f, 0x7ff, 0xffff, 0x10ffff + }; while (len) { unsigned char c = *buf++; int bytes, bad_offset; + unsigned int codepoint; + unsigned int min_val, max_val; len--; offset++; @@ -1374,24 +1395,48 @@ static int find_invalid_utf8(const char *buf, int len) bytes++; } - /* Must be between 1 and 5 more bytes */ - if (bytes < 1 || bytes > 5) + /* + * Must be between 1 and 3 more bytes. Longer sequences result in + * codepoints beyond U+10FFFF, which are guaranteed never to exist. + */ + if (bytes < 1 || 3 < bytes) return bad_offset; /* Do we *have* that many bytes? */ if (len < bytes) return bad_offset; + /* + * Place the encoded bits at the bottom of the value and compute the + * valid range. + */ + codepoint = (c & 0x7f) >> bytes; + min_val = max_codepoint[bytes-1] + 1; + max_val = max_codepoint[bytes]; + offset += bytes; len -= bytes; /* And verify that they are good continuation bytes */ do { + codepoint <<= 6; + codepoint |= *buf & 0x3f; if ((*buf++ & 0xc0) != 0x80) return bad_offset; } while (--bytes); - /* We could/should check the value and length here too */ + /* Reject codepoints that are out of range for the sequence length. */ + if (codepoint < min_val || codepoint > max_val) + return bad_offset; + /* Surrogates are only for UTF-16 and cannot be encoded in UTF-8. */ + if ((codepoint & 0x1ff800) == 0xd800) + return bad_offset; + /* U+xxFFFE and U+xxFFFF are guaranteed non-characters. */ + if ((codepoint & 0xfffe) == 0xfffe) + return bad_offset; + /* So are anything in the range U+FDD0..U+FDEF. */ + if (codepoint >= 0xfdd0 && codepoint <= 0xfdef) + return bad_offset; } return -1; } @@ -1401,9 +1446,6 @@ static int find_invalid_utf8(const char *buf, int len) * * If it isn't, it assumes any non-utf8 characters are Latin1, * and does the conversion. - * - * Fixme: we should probably also disallow overlong forms and - * invalid characters. But we don't do that currently. */ static int verify_utf8(struct strbuf *buf) { @@ -6,6 +6,7 @@ #include "strbuf.h" #include "decorate.h" #include "gpg-interface.h" +#include "string-list.h" struct commit_list { struct commit *item; @@ -61,6 +62,9 @@ struct commit_list *commit_list_insert_by_date(struct commit *item, struct commit_list **list); void commit_list_sort_by_date(struct commit_list **list); +/* Shallow copy of the input list */ +struct commit_list *copy_commit_list(struct commit_list *list); + void free_commit_list(struct commit_list *list); /* Commit formats */ @@ -79,6 +83,9 @@ enum cmit_fmt { }; struct pretty_print_context { + /* + * Callers should tweak these to change the behavior of pp_* functions. + */ enum cmit_fmt fmt; int abbrev; const char *subject; @@ -92,6 +99,13 @@ struct pretty_print_context { const char *output_encoding; struct string_list *mailmap; int color; + struct ident_split *from_ident; + + /* + * Fields below here are manipulated internally by pp_* functions and + * should not be counted on by callers. + */ + struct string_list in_body_headers; }; struct userformat_want { @@ -111,20 +125,20 @@ extern void userformat_find_requirements(const char *fmt, struct userformat_want extern void format_commit_message(const struct commit *commit, const char *format, struct strbuf *sb, const struct pretty_print_context *context); -extern void pretty_print_commit(const struct pretty_print_context *pp, +extern void pretty_print_commit(struct pretty_print_context *pp, const struct commit *commit, struct strbuf *sb); extern void pp_commit_easy(enum cmit_fmt fmt, const struct commit *commit, struct strbuf *sb); -void pp_user_info(const struct pretty_print_context *pp, +void pp_user_info(struct pretty_print_context *pp, const char *what, struct strbuf *sb, const char *line, const char *encoding); -void pp_title_line(const struct pretty_print_context *pp, +void pp_title_line(struct pretty_print_context *pp, const char **msg_p, struct strbuf *sb, const char *encoding, int need_8bit_cte); -void pp_remainder(const struct pretty_print_context *pp, +void pp_remainder(struct pretty_print_context *pp, const char **msg_p, struct strbuf *sb, int indent); @@ -254,4 +268,6 @@ extern void print_commit_list(struct commit_list *list, */ extern void check_commit_signature(const struct commit* commit, struct signature_check *sigc); +int compare_commits_by_commit_date(const void *a_, const void *b_, void *unused); + #endif /* COMMIT_H */ diff --git a/compat/apple-common-crypto.h b/compat/apple-common-crypto.h new file mode 100644 index 0000000000..c8b9b0e1a6 --- /dev/null +++ b/compat/apple-common-crypto.h @@ -0,0 +1,86 @@ +/* suppress inclusion of conflicting openssl functions */ +#define OPENSSL_NO_MD5 +#define HEADER_HMAC_H +#define HEADER_SHA_H +#include <CommonCrypto/CommonHMAC.h> +#define HMAC_CTX CCHmacContext +#define HMAC_Init(hmac, key, len, algo) CCHmacInit(hmac, algo, key, len) +#define HMAC_Update CCHmacUpdate +#define HMAC_Final(hmac, hash, ptr) CCHmacFinal(hmac, hash) +#define HMAC_CTX_cleanup(ignore) +#define EVP_md5(...) kCCHmacAlgMD5 +#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070 +#define APPLE_LION_OR_NEWER +#include <Security/Security.h> +/* Apple's TYPE_BOOL conflicts with config.c */ +#undef TYPE_BOOL +#endif + +#ifdef APPLE_LION_OR_NEWER +#define git_CC_error_check(pattern, err) \ + do { \ + if (err) { \ + die(pattern, (long)CFErrorGetCode(err)); \ + } \ + } while(0) + +#define EVP_EncodeBlock git_CC_EVP_EncodeBlock +static inline int git_CC_EVP_EncodeBlock(unsigned char *out, + const unsigned char *in, int inlen) +{ + CFErrorRef err; + SecTransformRef encoder; + CFDataRef input, output; + CFIndex length; + + encoder = SecEncodeTransformCreate(kSecBase64Encoding, &err); + git_CC_error_check("SecEncodeTransformCreate failed: %ld", err); + + input = CFDataCreate(kCFAllocatorDefault, in, inlen); + SecTransformSetAttribute(encoder, kSecTransformInputAttributeName, + input, &err); + git_CC_error_check("SecTransformSetAttribute failed: %ld", err); + + output = SecTransformExecute(encoder, &err); + git_CC_error_check("SecTransformExecute failed: %ld", err); + + length = CFDataGetLength(output); + CFDataGetBytes(output, CFRangeMake(0, length), out); + + CFRelease(output); + CFRelease(input); + CFRelease(encoder); + + return (int)strlen((const char *)out); +} + +#define EVP_DecodeBlock git_CC_EVP_DecodeBlock +static int inline git_CC_EVP_DecodeBlock(unsigned char *out, + const unsigned char *in, int inlen) +{ + CFErrorRef err; + SecTransformRef decoder; + CFDataRef input, output; + CFIndex length; + + decoder = SecDecodeTransformCreate(kSecBase64Encoding, &err); + git_CC_error_check("SecEncodeTransformCreate failed: %ld", err); + + input = CFDataCreate(kCFAllocatorDefault, in, inlen); + SecTransformSetAttribute(decoder, kSecTransformInputAttributeName, + input, &err); + git_CC_error_check("SecTransformSetAttribute failed: %ld", err); + + output = SecTransformExecute(decoder, &err); + git_CC_error_check("SecTransformExecute failed: %ld", err); + + length = CFDataGetLength(output); + CFDataGetBytes(output, CFRangeMake(0, length), out); + + CFRelease(output); + CFRelease(input); + CFRelease(decoder); + + return (int)strlen((const char *)out); +} +#endif /* APPLE_LION_OR_NEWER */ diff --git a/compat/cygwin.c b/compat/cygwin.c deleted file mode 100644 index 91ce5d4c7a..0000000000 --- a/compat/cygwin.c +++ /dev/null @@ -1,157 +0,0 @@ -#define CYGWIN_C -#define WIN32_LEAN_AND_MEAN -#include <sys/stat.h> -#include <sys/errno.h> -#include "win32.h" -#include "../git-compat-util.h" -#include "../cache.h" /* to read configuration */ - -/* - * Return POSIX permission bits, regardless of core.ignorecygwinfstricks - */ -int cygwin_get_st_mode_bits(const char *path, int *mode) -{ - struct stat st; - if (lstat(path, &st) < 0) - return -1; - *mode = st.st_mode; - return 0; -} - -static inline void filetime_to_timespec(const FILETIME *ft, struct timespec *ts) -{ - long long winTime = ((long long)ft->dwHighDateTime << 32) + - ft->dwLowDateTime; - winTime -= 116444736000000000LL; /* Windows to Unix Epoch conversion */ - /* convert 100-nsecond interval to seconds and nanoseconds */ - ts->tv_sec = (time_t)(winTime/10000000); - ts->tv_nsec = (long)(winTime - ts->tv_sec*10000000LL) * 100; -} - -#define size_to_blocks(s) (((s)+511)/512) - -/* do_stat is a common implementation for cygwin_lstat and cygwin_stat. - * - * To simplify its logic, in the case of cygwin symlinks, this implementation - * falls back to the cygwin version of stat/lstat, which is provided as the - * last argument. - */ -static int do_stat(const char *file_name, struct stat *buf, stat_fn_t cygstat) -{ - WIN32_FILE_ATTRIBUTE_DATA fdata; - - if (file_name[0] == '/') - return cygstat (file_name, buf); - - if (!(errno = get_file_attr(file_name, &fdata))) { - /* - * If the system attribute is set and it is not a directory then - * it could be a symbol link created in the nowinsymlinks mode. - * Normally, Cygwin works in the winsymlinks mode, so this situation - * is very unlikely. For the sake of simplicity of our code, let's - * Cygwin to handle it. - */ - if ((fdata.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM) && - !(fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) - return cygstat(file_name, buf); - - /* fill out the stat structure */ - buf->st_dev = buf->st_rdev = 0; /* not used by Git */ - buf->st_ino = 0; - buf->st_mode = file_attr_to_st_mode(fdata.dwFileAttributes); - buf->st_nlink = 1; - buf->st_uid = buf->st_gid = 0; -#ifdef __CYGWIN_USE_BIG_TYPES__ - buf->st_size = ((_off64_t)fdata.nFileSizeHigh << 32) + - fdata.nFileSizeLow; -#else - buf->st_size = (off_t)fdata.nFileSizeLow; -#endif - buf->st_blocks = size_to_blocks(buf->st_size); - filetime_to_timespec(&fdata.ftLastAccessTime, &buf->st_atim); - filetime_to_timespec(&fdata.ftLastWriteTime, &buf->st_mtim); - filetime_to_timespec(&fdata.ftCreationTime, &buf->st_ctim); - return 0; - } else if (errno == ENOENT) { - /* - * In the winsymlinks mode (which is the default), Cygwin - * emulates symbol links using Windows shortcut files. These - * files are formed by adding .lnk extension. So, if we have - * not found the specified file name, it could be that it is - * a symbol link. Let's Cygwin to deal with that. - */ - return cygstat(file_name, buf); - } - return -1; -} - -/* We provide our own lstat/stat functions, since the provided Cygwin versions - * of these functions are too slow. These stat functions are tailored for Git's - * usage, and therefore they are not meant to be complete and correct emulation - * of lstat/stat functionality. - */ -static int cygwin_lstat(const char *path, struct stat *buf) -{ - return do_stat(path, buf, lstat); -} - -static int cygwin_stat(const char *path, struct stat *buf) -{ - return do_stat(path, buf, stat); -} - - -/* - * At start up, we are trying to determine whether Win32 API or cygwin stat - * functions should be used. The choice is determined by core.ignorecygwinfstricks. - * Reading this option is not always possible immediately as git_dir may - * not be set yet. So until it is set, use cygwin lstat/stat functions. - * However, if core.filemode is set, we must use the Cygwin posix - * stat/lstat as the Windows stat functions do not determine posix filemode. - * - * Note that git_cygwin_config() does NOT call git_default_config() and this - * is deliberate. Many commands read from config to establish initial - * values in variables and later tweak them from elsewhere (e.g. command line). - * init_stat() is called lazily on demand, typically much late in the program, - * and calling git_default_config() from here would break such variables. - */ -static int native_stat = 1; -static int core_filemode = 1; /* matches trust_executable_bit default */ - -static int git_cygwin_config(const char *var, const char *value, void *cb) -{ - if (!strcmp(var, "core.ignorecygwinfstricks")) - native_stat = git_config_bool(var, value); - else if (!strcmp(var, "core.filemode")) - core_filemode = git_config_bool(var, value); - return 0; -} - -static int init_stat(void) -{ - if (have_git_dir() && git_config(git_cygwin_config,NULL)) { - if (!core_filemode && native_stat) { - cygwin_stat_fn = cygwin_stat; - cygwin_lstat_fn = cygwin_lstat; - } else { - cygwin_stat_fn = stat; - cygwin_lstat_fn = lstat; - } - return 0; - } - return 1; -} - -static int cygwin_stat_stub(const char *file_name, struct stat *buf) -{ - return (init_stat() ? stat : *cygwin_stat_fn)(file_name, buf); -} - -static int cygwin_lstat_stub(const char *file_name, struct stat *buf) -{ - return (init_stat() ? lstat : *cygwin_lstat_fn)(file_name, buf); -} - -stat_fn_t cygwin_stat_fn = cygwin_stat_stub; -stat_fn_t cygwin_lstat_fn = cygwin_lstat_stub; - diff --git a/compat/cygwin.h b/compat/cygwin.h deleted file mode 100644 index c04965a2e0..0000000000 --- a/compat/cygwin.h +++ /dev/null @@ -1,14 +0,0 @@ -#include <sys/types.h> -#include <sys/stat.h> - -typedef int (*stat_fn_t)(const char*, struct stat*); -extern stat_fn_t cygwin_stat_fn; -extern stat_fn_t cygwin_lstat_fn; -int cygwin_get_st_mode_bits(const char *path, int *mode); - -#define get_st_mode_bits(p,m) cygwin_get_st_mode_bits((p),(m)) -#ifndef CYGWIN_C -/* cygwin.c needs the original lstat() */ -#define stat(path, buf) (*cygwin_stat_fn)(path, buf) -#define lstat(path, buf) (*cygwin_lstat_fn)(path, buf) -#endif diff --git a/compat/mingw.c b/compat/mingw.c index bb92c436f7..22ee9ef1cf 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -1086,6 +1086,12 @@ int mingw_kill(pid_t pid, int sig) errno = err_win_to_posix(GetLastError()); CloseHandle(h); return -1; + } else if (pid > 0 && sig == 0) { + HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); + if (h) { + CloseHandle(h); + return 0; + } } errno = EINVAL; diff --git a/compat/nedmalloc/Readme.txt b/compat/nedmalloc/Readme.txt index e46d8f112c..07cbf50c0f 100644 --- a/compat/nedmalloc/Readme.txt +++ b/compat/nedmalloc/Readme.txt @@ -97,7 +97,7 @@ Chew for reporting this. v1.04alpha_svn915 7th October 2006: * Fixed failure to unlock thread cache list if allocating a new list failed. -Thanks to Dmitry Chichkov for reporting this. Futher thanks to Aleksey Sanin. +Thanks to Dmitry Chichkov for reporting this. Further thanks to Aleksey Sanin. * Fixed realloc(0, <size>) segfaulting. Thanks to Dmitry Chichkov for reporting this. * Made config defines #ifndef so they can be overridden by the build system. diff --git a/compat/nedmalloc/malloc.c.h b/compat/nedmalloc/malloc.c.h index 5a44dead9d..ed4f1fa5af 100644 --- a/compat/nedmalloc/malloc.c.h +++ b/compat/nedmalloc/malloc.c.h @@ -3602,8 +3602,8 @@ static void internal_malloc_stats(mstate m) { and choose its bk node as its replacement. 2. If x was the last node of its size, but not a leaf node, it must be replaced with a leaf node (not merely one with an open left or - right), to make sure that lefts and rights of descendents - correspond properly to bit masks. We use the rightmost descendent + right), to make sure that lefts and rights of descendants + correspond properly to bit masks. We use the rightmost descendant of x. We could use any other leaf, but this is easy to locate and tends to counteract removal of leftmosts elsewhere, and so keeps paths shorter than minimally guaranteed. This doesn't loop much diff --git a/compat/regex/regcomp.c b/compat/regex/regcomp.c index d0025bd58d..b2c5d465ac 100644 --- a/compat/regex/regcomp.c +++ b/compat/regex/regcomp.c @@ -2617,7 +2617,7 @@ parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa, Build the range expression which starts from START_ELEM, and ends at END_ELEM. The result are written to MBCSET and SBCSET. RANGE_ALLOC is the allocated size of mbcset->range_starts, and - mbcset->range_ends, is a pointer argument sinse we may + mbcset->range_ends, is a pointer argument since we may update it. */ static reg_errcode_t @@ -2788,7 +2788,7 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, const int32_t *symb_table; const unsigned char *extra; - /* Local function for parse_bracket_exp used in _LIBC environement. + /* Local function for parse_bracket_exp used in _LIBC environment. Seek the collating symbol entry correspondings to NAME. Return the index of the symbol in the SYMB_TABLE. */ @@ -2892,11 +2892,11 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, return UINT_MAX; } - /* Local function for parse_bracket_exp used in _LIBC environement. + /* Local function for parse_bracket_exp used in _LIBC environment. Build the range expression which starts from START_ELEM, and ends at END_ELEM. The result are written to MBCSET and SBCSET. RANGE_ALLOC is the allocated size of mbcset->range_starts, and - mbcset->range_ends, is a pointer argument sinse we may + mbcset->range_ends, is a pointer argument since we may update it. */ auto inline reg_errcode_t @@ -2976,11 +2976,11 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, return REG_NOERROR; } - /* Local function for parse_bracket_exp used in _LIBC environement. + /* Local function for parse_bracket_exp used in _LIBC environment. Build the collating element which is represented by NAME. The result are written to MBCSET and SBCSET. COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a - pointer argument sinse we may update it. */ + pointer argument since we may update it. */ auto inline reg_errcode_t __attribute ((always_inline)) @@ -3419,7 +3419,7 @@ parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, Build the equivalence class which is represented by NAME. The result are written to MBCSET and SBCSET. EQUIV_CLASS_ALLOC is the allocated size of mbcset->equiv_classes, - is a pointer argument sinse we may update it. */ + is a pointer argument since we may update it. */ static reg_errcode_t #ifdef RE_ENABLE_I18N @@ -3515,7 +3515,7 @@ build_equiv_class (bitset_t sbcset, const unsigned char *name) Build the character class which is represented by NAME. The result are written to MBCSET and SBCSET. CHAR_CLASS_ALLOC is the allocated size of mbcset->char_classes, - is a pointer argument sinse we may update it. */ + is a pointer argument since we may update it. */ static reg_errcode_t #ifdef RE_ENABLE_I18N diff --git a/compat/regex/regexec.c b/compat/regex/regexec.c index 0cd6e0ef98..eb5e1d4439 100644 --- a/compat/regex/regexec.c +++ b/compat/regex/regexec.c @@ -455,7 +455,7 @@ re_search_stub (struct re_pattern_buffer *bufp, rval = 0; - /* I hope we needn't fill ther regs with -1's when no match was found. */ + /* I hope we needn't fill their regs with -1's when no match was found. */ if (result != REG_NOERROR) rval = -1; else if (regs != NULL) @@ -1071,7 +1071,7 @@ acquire_init_state_context (reg_errcode_t *err, const re_match_context_t *mctx, FL_LONGEST_MATCH means we want the POSIX longest matching. If P_MATCH_FIRST is not NULL, and the match fails, it is set to the next place where we may want to try matching. - Note that the matcher assume that the maching starts from the current + Note that the matcher assume that the matching starts from the current index of the buffer. */ static int @@ -2239,7 +2239,7 @@ sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx, dfa->nexts[node_idx])) /* The node can't accept the `multi byte', or the destination was already thrown away, then the node - could't accept the current input `multi byte'. */ + couldn't accept the current input `multi byte'. */ naccepted = 0; /* Otherwise, it is sure that the node could accept `naccepted' bytes input. */ diff --git a/compat/unsetenv.c b/compat/unsetenv.c index 4ea18569c2..bf5fd7063b 100644 --- a/compat/unsetenv.c +++ b/compat/unsetenv.c @@ -2,6 +2,9 @@ void gitunsetenv (const char *name) { +#if !defined(__MINGW32__) + extern char **environ; +#endif int src, dst; size_t nmln; @@ -10,20 +10,69 @@ #include "strbuf.h" #include "quote.h" -typedef struct config_file { - struct config_file *prev; - FILE *f; +struct config_source { + struct config_source *prev; + union { + FILE *file; + struct config_buf { + const char *buf; + size_t len; + size_t pos; + } buf; + } u; const char *name; + int die_on_error; int linenr; int eof; struct strbuf value; struct strbuf var; -} config_file; -static config_file *cf; + int (*do_fgetc)(struct config_source *c); + int (*do_ungetc)(int c, struct config_source *conf); + long (*do_ftell)(struct config_source *c); +}; + +static struct config_source *cf; static int zlib_compression_seen; +static int config_file_fgetc(struct config_source *conf) +{ + return fgetc(conf->u.file); +} + +static int config_file_ungetc(int c, struct config_source *conf) +{ + return ungetc(c, conf->u.file); +} + +static long config_file_ftell(struct config_source *conf) +{ + return ftell(conf->u.file); +} + + +static int config_buf_fgetc(struct config_source *conf) +{ + if (conf->u.buf.pos < conf->u.buf.len) + return conf->u.buf.buf[conf->u.buf.pos++]; + + return EOF; +} + +static int config_buf_ungetc(int c, struct config_source *conf) +{ + if (conf->u.buf.pos > 0) + return conf->u.buf.buf[--conf->u.buf.pos]; + + return EOF; +} + +static long config_buf_ftell(struct config_source *conf) +{ + return conf->u.buf.pos; +} + #define MAX_INCLUDE_DEPTH 10 static const char include_depth_advice[] = "exceeded maximum include depth (%d) while including\n" @@ -168,27 +217,22 @@ int git_config_from_parameters(config_fn_t fn, void *data) static int get_next_char(void) { - int c; - FILE *f; - - c = '\n'; - if (cf && ((f = cf->f) != NULL)) { - c = fgetc(f); - if (c == '\r') { - /* DOS like systems */ - c = fgetc(f); - if (c != '\n') { - ungetc(c, f); - c = '\r'; - } - } - if (c == '\n') - cf->linenr++; - if (c == EOF) { - cf->eof = 1; - c = '\n'; + int c = cf->do_fgetc(cf); + + if (c == '\r') { + /* DOS like systems */ + c = cf->do_fgetc(cf); + if (c != '\n') { + cf->do_ungetc(c, cf); + c = '\r'; } } + if (c == '\n') + cf->linenr++; + if (c == EOF) { + cf->eof = 1; + c = '\n'; + } return c; } @@ -339,7 +383,7 @@ static int get_base_var(struct strbuf *name) } } -static int git_parse_file(config_fn_t fn, void *data) +static int git_parse_source(config_fn_t fn, void *data) { int comment = 0; int baselen = 0; @@ -399,7 +443,10 @@ static int git_parse_file(config_fn_t fn, void *data) if (get_value(fn, data, var) < 0) break; } - die("bad config file line %d in %s", cf->linenr, cf->name); + if (cf->die_on_error) + die("bad config file line %d in %s", cf->linenr, cf->name); + else + return error("bad config file line %d in %s", cf->linenr, cf->name); } static int parse_unit_factor(const char *end, uintmax_t *val) @@ -906,6 +953,33 @@ int git_default_config(const char *var, const char *value, void *dummy) return 0; } +/* + * All source specific fields in the union, die_on_error, name and the callbacks + * fgetc, ungetc, ftell of top need to be initialized before calling + * this function. + */ +static int do_config_from(struct config_source *top, config_fn_t fn, void *data) +{ + int ret; + + /* push config-file parsing state stack */ + top->prev = cf; + top->linenr = 1; + top->eof = 0; + strbuf_init(&top->value, 1024); + strbuf_init(&top->var, 1024); + cf = top; + + ret = git_parse_source(fn, data); + + /* pop config-file parsing state stack */ + strbuf_release(&top->value); + strbuf_release(&top->var); + cf = top->prev; + + return ret; +} + int git_config_from_file(config_fn_t fn, const char *filename, void *data) { int ret; @@ -913,30 +987,74 @@ int git_config_from_file(config_fn_t fn, const char *filename, void *data) ret = -1; if (f) { - config_file top; + struct config_source top; - /* push config-file parsing state stack */ - top.prev = cf; - top.f = f; + top.u.file = f; top.name = filename; - top.linenr = 1; - top.eof = 0; - strbuf_init(&top.value, 1024); - strbuf_init(&top.var, 1024); - cf = ⊤ - - ret = git_parse_file(fn, data); + top.die_on_error = 1; + top.do_fgetc = config_file_fgetc; + top.do_ungetc = config_file_ungetc; + top.do_ftell = config_file_ftell; - /* pop config-file parsing state stack */ - strbuf_release(&top.value); - strbuf_release(&top.var); - cf = top.prev; + ret = do_config_from(&top, fn, data); fclose(f); } return ret; } +int git_config_from_buf(config_fn_t fn, const char *name, const char *buf, + size_t len, void *data) +{ + struct config_source top; + + top.u.buf.buf = buf; + top.u.buf.len = len; + top.u.buf.pos = 0; + top.name = name; + top.die_on_error = 0; + top.do_fgetc = config_buf_fgetc; + top.do_ungetc = config_buf_ungetc; + top.do_ftell = config_buf_ftell; + + return do_config_from(&top, fn, data); +} + +static int git_config_from_blob_sha1(config_fn_t fn, + const char *name, + const unsigned char *sha1, + void *data) +{ + enum object_type type; + char *buf; + unsigned long size; + int ret; + + buf = read_sha1_file(sha1, &type, &size); + if (!buf) + return error("unable to load config blob object '%s'", name); + if (type != OBJ_BLOB) { + free(buf); + return error("reference '%s' does not point to a blob", name); + } + + ret = git_config_from_buf(fn, name, buf, size, data); + free(buf); + + return ret; +} + +static int git_config_from_blob_ref(config_fn_t fn, + const char *name, + void *data) +{ + unsigned char sha1[20]; + + if (get_sha1(name, sha1) < 0) + return error("unable to resolve config blob '%s'", name); + return git_config_from_blob_sha1(fn, name, sha1, data); +} + const char *git_etc_gitconfig(void) { static const char *system_wide; @@ -1002,7 +1120,9 @@ int git_config_early(config_fn_t fn, void *data, const char *repo_config) } int git_config_with_options(config_fn_t fn, void *data, - const char *filename, int respect_includes) + const char *filename, + const char *blob_ref, + int respect_includes) { char *repo_config = NULL; int ret; @@ -1021,6 +1141,8 @@ int git_config_with_options(config_fn_t fn, void *data, */ if (filename) return git_config_from_file(fn, filename, data); + else if (blob_ref) + return git_config_from_blob_ref(fn, blob_ref, data); repo_config = git_pathdup("config"); ret = git_config_early(fn, data, repo_config); @@ -1031,7 +1153,7 @@ int git_config_with_options(config_fn_t fn, void *data, int git_config(config_fn_t fn, void *data) { - return git_config_with_options(fn, data, NULL, 1); + return git_config_with_options(fn, data, NULL, NULL, 1); } /* @@ -1063,7 +1185,6 @@ static int store_aux(const char *key, const char *value, void *cb) { const char *ep; size_t section_len; - FILE *f = cf->f; switch (store.state) { case KEY_SEEN: @@ -1075,7 +1196,7 @@ static int store_aux(const char *key, const char *value, void *cb) return 1; } - store.offset[store.seen] = ftell(f); + store.offset[store.seen] = cf->do_ftell(cf); store.seen++; } break; @@ -1102,19 +1223,19 @@ static int store_aux(const char *key, const char *value, void *cb) * Do not increment matches: this is no match, but we * just made sure we are in the desired section. */ - store.offset[store.seen] = ftell(f); + store.offset[store.seen] = cf->do_ftell(cf); /* fallthru */ case SECTION_END_SEEN: case START: if (matches(key, value)) { - store.offset[store.seen] = ftell(f); + store.offset[store.seen] = cf->do_ftell(cf); store.state = KEY_SEEN; store.seen++; } else { if (strrchr(key, '.') - key == store.baselen && !strncmp(key, store.key, store.baselen)) { store.state = SECTION_SEEN; - store.offset[store.seen] = ftell(f); + store.offset[store.seen] = cf->do_ftell(cf); } } } diff --git a/config.mak.uname b/config.mak.uname index 7ac541e9eb..b27f51d486 100644 --- a/config.mak.uname +++ b/config.mak.uname @@ -159,18 +159,18 @@ ifeq ($(uname_O),Cygwin) NO_SYMLINK_HEAD = YesPlease NO_IPV6 = YesPlease OLD_ICONV = UnfortunatelyYes + NO_THREAD_SAFE_PREAD = YesPlease + # There are conflicting reports about this. + # On some boxes NO_MMAP is needed, and not so elsewhere. + # Try commenting this out if you suspect MMAP is more efficient + NO_MMAP = YesPlease + else + NO_REGEX = UnfortunatelyYes endif - NO_THREAD_SAFE_PREAD = YesPlease NEEDS_LIBICONV = YesPlease NO_FAST_WORKING_DIRECTORY = UnfortunatelyYes - NO_TRUSTABLE_FILEMODE = UnfortunatelyYes NO_ST_BLOCKS_IN_STRUCT_STAT = YesPlease - # There are conflicting reports about this. - # On some boxes NO_MMAP is needed, and not so elsewhere. - # Try commenting this out if you suspect MMAP is more efficient - NO_MMAP = YesPlease X = .exe - COMPAT_OBJS += compat/cygwin.o UNRELIABLE_FSTAT = UnfortunatelyYes SPARSE_FLAGS = -isystem /usr/include/w32api -Wno-one-bit-signed-bitfield endif @@ -5,6 +5,7 @@ #include "refs.h" #include "run-command.h" #include "remote.h" +#include "connect.h" #include "url.h" static char *server_capabilities; diff --git a/connect.h b/connect.h new file mode 100644 index 0000000000..9dff25cad4 --- /dev/null +++ b/connect.h @@ -0,0 +1,13 @@ +#ifndef CONNECT_H +#define CONNECT_H + +#define CONNECT_VERBOSE (1u << 0) +extern struct child_process *git_connect(int fd[2], const char *url, const char *prog, int flags); +extern int finish_connect(struct child_process *conn); +extern int git_connection_is_socket(struct child_process *conn); +extern int server_supports(const char *feature); +extern int parse_feature_request(const char *features, const char *feature); +extern const char *server_feature_value(const char *feature, int *len_ret); +extern const char *parse_feature_value(const char *feature_list, const char *feature, int *len_ret); + +#endif diff --git a/contrib/ciabot/ciabot.py b/contrib/ciabot/ciabot.py index 36b5665ff8..befa0c3967 100755 --- a/contrib/ciabot/ciabot.py +++ b/contrib/ciabot/ciabot.py @@ -70,7 +70,7 @@ tinyifier = "http://tinyurl.com/api-create.php?url=" # The template used to generate the XML messages to CIA. You can make # visible changes to the IRC-bot notification lines by hacking this. -# The default will produce a notfication line that looks like this: +# The default will produce a notification line that looks like this: # # ${project}: ${author} ${repo}:${branch} * ${rev} ${files}: ${logmsg} ${url} # diff --git a/contrib/ciabot/ciabot.sh b/contrib/ciabot/ciabot.sh index 3fbbc534ae..dfb71a1a15 100755 --- a/contrib/ciabot/ciabot.sh +++ b/contrib/ciabot/ciabot.sh @@ -39,7 +39,7 @@ # done # # The reason for the tac call is that git rev-list emits commits from -# most recent to least - better to ship notifactions from oldest to newest. +# most recent to least - better to ship notifications from oldest to newest. # # Configuration variables affecting this script: # @@ -64,7 +64,7 @@ # down. It is unknown whether this is still an issue in 2010, but # XML-RPC would be annoying to do from sh in any case. (XML-RPC does # have the advantage that it guarantees notification of multiple commits -# shpped from an update in their actual order.) +# shipped from an update in their actual order.) # # The project as known to CIA. You can set this with a -p option, diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index fa3ae1e853..e1b7313072 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -648,6 +648,7 @@ __git_list_porcelain_commands () cat-file) : plumbing;; check-attr) : plumbing;; check-ignore) : plumbing;; + check-mailmap) : plumbing;; check-ref-format) : plumbing;; checkout-index) : plumbing;; commit-tree) : plumbing;; @@ -1957,7 +1958,6 @@ _git_config () core.fileMode core.fsyncobjectfiles core.gitProxy - core.ignoreCygwinFSTricks core.ignoreStat core.ignorecase core.logAllRefUpdates @@ -2580,7 +2580,7 @@ if [[ -n ${ZSH_VERSION-} ]]; then --*=*|*.) ;; *) c="$c " ;; esac - array+=("$c") + array[${#array[@]}+1]="$c" done compset -P '*[=:]' compadd -Q -S '' -p "${2-}" -a -- array && _ret=0 diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh index a81ef5a482..d6c61b2bde 100644 --- a/contrib/completion/git-prompt.sh +++ b/contrib/completion/git-prompt.sh @@ -84,6 +84,10 @@ # the colored output of "git status -sb" and are available only when # using __git_ps1 for PROMPT_COMMAND or precmd. +# check whether printf supports -v +__git_printf_supports_v= +printf -v __git_printf_supports_v -- '%s' yes >/dev/null 2>&1 + # stores the divergence from upstream in $p # used by GIT_PS1_SHOWUPSTREAM __git_ps1_show_upstream () @@ -433,7 +437,7 @@ __git_ps1 () local gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p" if [ $pcmode = yes ]; then - if [[ -n ${ZSH_VERSION-} ]]; then + if [ "${__git_printf_supports_v-}" != yes ]; then gitstring=$(printf -- "$printf_format" "$gitstring") else printf -v gitstring -- "$printf_format" "$gitstring" diff --git a/contrib/contacts/git-contacts b/contrib/contacts/git-contacts new file mode 100755 index 0000000000..d80f7d1b6e --- /dev/null +++ b/contrib/contacts/git-contacts @@ -0,0 +1,188 @@ +#!/usr/bin/perl + +# List people who might be interested in a patch. Useful as the argument to +# git-send-email --cc-cmd option, and in other situations. +# +# Usage: git contacts <file | rev-list option> ... + +use strict; +use warnings; +use IPC::Open2; + +my $since = '5-years-ago'; +my $min_percent = 10; +my $labels_rx = qr/Signed-off-by|Reviewed-by|Acked-by|Cc/i; +my %seen; + +sub format_contact { + my ($name, $email) = @_; + return "$name <$email>"; +} + +sub parse_commit { + my ($commit, $data) = @_; + my $contacts = $commit->{contacts}; + my $inbody = 0; + for (split(/^/m, $data)) { + if (not $inbody) { + if (/^author ([^<>]+) <(\S+)> .+$/) { + $contacts->{format_contact($1, $2)} = 1; + } elsif (/^$/) { + $inbody = 1; + } + } elsif (/^$labels_rx:\s+([^<>]+)\s+<(\S+?)>$/o) { + $contacts->{format_contact($1, $2)} = 1; + } + } +} + +sub import_commits { + my ($commits) = @_; + return unless %$commits; + my $pid = open2 my $reader, my $writer, qw(git cat-file --batch); + for my $id (keys(%$commits)) { + print $writer "$id\n"; + my $line = <$reader>; + if ($line =~ /^([0-9a-f]{40}) commit (\d+)/) { + my ($cid, $len) = ($1, $2); + die "expected $id but got $cid\n" unless $id eq $cid; + my $data; + # cat-file emits newline after data, so read len+1 + read $reader, $data, $len + 1; + parse_commit($commits->{$id}, $data); + } + } + close $reader; + close $writer; + waitpid($pid, 0); + die "git-cat-file error: $?\n" if $?; +} + +sub get_blame { + my ($commits, $source, $start, $len, $from) = @_; + $len = 1 unless defined($len); + return if $len == 0; + open my $f, '-|', + qw(git blame --porcelain -C), '-L', "$start,+$len", + '--since', $since, "$from^", '--', $source or die; + while (<$f>) { + if (/^([0-9a-f]{40}) \d+ \d+ \d+$/) { + my $id = $1; + $commits->{$id} = { id => $id, contacts => {} } + unless $seen{$id}; + $seen{$id} = 1; + } + } + close $f; +} + +sub scan_patches { + my ($commits, $id, $f) = @_; + my $source; + while (<$f>) { + if (/^From ([0-9a-f]{40}) Mon Sep 17 00:00:00 2001$/) { + $id = $1; + $seen{$id} = 1; + } + next unless $id; + if (m{^--- (?:a/(.+)|/dev/null)$}) { + $source = $1; + } elsif (/^--- /) { + die "Cannot parse hunk source: $_\n"; + } elsif (/^@@ -(\d+)(?:,(\d+))?/ && $source) { + get_blame($commits, $source, $1, $2, $id); + } + } +} + +sub scan_patch_file { + my ($commits, $file) = @_; + open my $f, '<', $file or die "read failure: $file: $!\n"; + scan_patches($commits, undef, $f); + close $f; +} + +sub parse_rev_args { + my @args = @_; + open my $f, '-|', + qw(git rev-parse --revs-only --default HEAD --symbolic), @args + or die; + my @revs; + while (<$f>) { + chomp; + push @revs, $_; + } + close $f; + return @revs if scalar(@revs) != 1; + return "^$revs[0]", 'HEAD' unless $revs[0] =~ /^-/; + return $revs[0], 'HEAD'; +} + +sub scan_rev_args { + my ($commits, $args) = @_; + my @revs = parse_rev_args(@$args); + open my $f, '-|', qw(git rev-list --reverse), @revs or die; + while (<$f>) { + chomp; + my $id = $_; + $seen{$id} = 1; + open my $g, '-|', qw(git show -C --oneline), $id or die; + scan_patches($commits, $id, $g); + close $g; + } + close $f; +} + +sub mailmap_contacts { + my ($contacts) = @_; + my %mapped; + my $pid = open2 my $reader, my $writer, qw(git check-mailmap --stdin); + for my $contact (keys(%$contacts)) { + print $writer "$contact\n"; + my $canonical = <$reader>; + chomp $canonical; + $mapped{$canonical} += $contacts->{$contact}; + } + close $reader; + close $writer; + waitpid($pid, 0); + die "git-check-mailmap error: $?\n" if $?; + return \%mapped; +} + +if (!@ARGV) { + die "No input revisions or patch files\n"; +} + +my (@files, @rev_args); +for (@ARGV) { + if (-e) { + push @files, $_; + } else { + push @rev_args, $_; + } +} + +my %commits; +for (@files) { + scan_patch_file(\%commits, $_); +} +if (@rev_args) { + scan_rev_args(\%commits, \@rev_args) +} +import_commits(\%commits); + +my $contacts = {}; +for my $commit (values %commits) { + for my $contact (keys %{$commit->{contacts}}) { + $contacts->{$contact}++; + } +} +$contacts = mailmap_contacts($contacts); + +my $ncommits = scalar(keys %commits); +for my $contact (keys %$contacts) { + my $percent = $contacts->{$contact} * 100 / $ncommits; + next if $percent < $min_percent; + print "$contact\n"; +} diff --git a/contrib/contacts/git-contacts.txt b/contrib/contacts/git-contacts.txt new file mode 100644 index 0000000000..dd914d1261 --- /dev/null +++ b/contrib/contacts/git-contacts.txt @@ -0,0 +1,94 @@ +git-contacts(1) +=============== + +NAME +---- +git-contacts - List people who might be interested in a set of changes + + +SYNOPSIS +-------- +[verse] +'git contacts' (<patch>|<range>|<rev>)... + + +DESCRIPTION +----------- + +Given a set of changes, specified as patch files or revisions, determine people +who might be interested in those changes. This is done by consulting the +history of each patch or revision hunk to find people mentioned by commits +which touched the lines of files under consideration. + +Input consists of one or more patch files or revision arguments. A revision +argument can be a range or a single `<rev>` which is interpreted as +`<rev>..HEAD`, thus the same revision arguments are accepted as for +linkgit:git-format-patch[1]. Patch files and revision arguments can be combined +in the same invocation. + +This command can be useful for determining the list of people with whom to +discuss proposed changes, or for finding the list of recipients to Cc: when +submitting a patch series via `git send-email`. For the latter case, `git +contacts` can be used as the argument to `git send-email`'s `--cc-cmd` option. + + +DISCUSSION +---------- + +`git blame` is invoked for each hunk in a patch file or revision. For each +commit mentioned by `git blame`, the commit message is consulted for people who +authored, reviewed, signed, acknowledged, or were Cc:'d. Once the list of +participants is known, each person's relevance is computed by considering how +many commits mentioned that person compared with the total number of commits +under consideration. The final output consists only of participants who exceed +a minimum threshold of participation. + + +OUTPUT +------ + +For each person of interest, a single line is output, terminated by a newline. +If the person's name is known, ``Name $$<user@host>$$'' is printed; otherwise +only ``$$<user@host>$$'' is printed. + + +EXAMPLES +-------- + +* Consult patch files: ++ +------------ +$ git contacts feature/*.patch +------------ + +* Revision range: ++ +------------ +$ git contacts R1..R2 +------------ + +* From a single revision to `HEAD`: ++ +------------ +$ git contacts origin +------------ + +* Helper for `git send-email`: ++ +------------ +$ git send-email --cc-cmd='git contacts' feature/*.patch +------------ + + +LIMITATIONS +----------- + +Several conditions controlling a person's significance are currently +hard-coded, such as minimum participation level (10%), blame date-limiting (5 +years), and `-C` level for detecting moved and copied lines (a single `-C`). In +the future, these conditions may become configurable. + + +GIT +--- +Part of the linkgit:git[1] suite diff --git a/contrib/examples/git-log.sh b/contrib/examples/git-log.sh new file mode 100755 index 0000000000..c2ea71cf14 --- /dev/null +++ b/contrib/examples/git-log.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# +# Copyright (c) 2005 Linus Torvalds +# + +USAGE='[--max-count=<n>] [<since>..<limit>] [--pretty=<format>] [git-rev-list options]' +SUBDIRECTORY_OK='Yes' +. git-sh-setup + +revs=$(git-rev-parse --revs-only --no-flags --default HEAD "$@") || exit +[ "$revs" ] || { + die "No HEAD ref" +} +git-rev-list --pretty $(git-rev-parse --default HEAD "$@") | +LESS=-S ${PAGER:-less} diff --git a/contrib/examples/git-whatchanged.sh b/contrib/examples/git-whatchanged.sh new file mode 100755 index 0000000000..1fb9feb348 --- /dev/null +++ b/contrib/examples/git-whatchanged.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +USAGE='[-p] [--max-count=<n>] [<since>..<limit>] [--pretty=<format>] [-m] [git-diff-tree options] [git-rev-list options]' +SUBDIRECTORY_OK='Yes' +. git-sh-setup + +diff_tree_flags=$(git-rev-parse --sq --no-revs --flags "$@") || exit +case "$0" in +*whatchanged) + count= + test -z "$diff_tree_flags" && + diff_tree_flags=$(git-repo-config --get whatchanged.difftree) + diff_tree_default_flags='-c -M --abbrev' ;; +*show) + count=-n1 + test -z "$diff_tree_flags" && + diff_tree_flags=$(git-repo-config --get show.difftree) + diff_tree_default_flags='--cc --always' ;; +esac +test -z "$diff_tree_flags" && + diff_tree_flags="$diff_tree_default_flags" + +rev_list_args=$(git-rev-parse --sq --default HEAD --revs-only "$@") && +diff_tree_args=$(git-rev-parse --sq --no-revs --no-flags "$@") && + +eval "git-rev-list $count $rev_list_args" | +eval "git-diff-tree --stdin --pretty -r $diff_tree_flags $diff_tree_args" | +LESS="$LESS -S" ${PAGER:-less} diff --git a/contrib/hg-to-git/hg-to-git.py b/contrib/hg-to-git/hg-to-git.py index 232625a7b7..60dec86d37 100755 --- a/contrib/hg-to-git/hg-to-git.py +++ b/contrib/hg-to-git/hg-to-git.py @@ -225,7 +225,7 @@ for cset in range(int(tip) + 1): os.system('git ls-files -x .hg --deleted | git update-index --remove --stdin') # commit - os.system(getgitenv(user, date) + 'git commit --allow-empty -a -F %s' % filecomment) + os.system(getgitenv(user, date) + 'git commit --allow-empty --allow-empty-message -a -F %s' % filecomment) os.unlink(filecomment) # tag diff --git a/contrib/hooks/multimail/README b/contrib/hooks/multimail/README new file mode 100644 index 0000000000..9904396710 --- /dev/null +++ b/contrib/hooks/multimail/README @@ -0,0 +1,486 @@ + git-multimail + ============= + +git-multimail is a tool for sending notification emails on pushes to a +Git repository. It includes a Python module called git_multimail.py, +which can either be used as a hook script directly or can be imported +as a Python module into another script. + +git-multimail is derived from the Git project's old +contrib/hooks/post-receive-email, and is mostly compatible with that +script. See README.migrate-from-post-receive-email for details about +the differences and for how to migrate from post-receive-email to +git-multimail. + +git-multimail, like the rest of the Git project, is licensed under +GPLv2 (see the COPYING file for details). + +Please note: although, as a convenience, git-multimail may be +distributed along with the main Git project, development of +git-multimail takes place in its own, separate project. See section +"Getting involved" below for more information. + + +By default, for each push received by the repository, git-multimail: + +1. Outputs one email summarizing each reference that was changed. + These "reference change" (called "refchange" below) emails describe + the nature of the change (e.g., was the reference created, deleted, + fast-forwarded, etc.) and include a one-line summary of each commit + that was added to the reference. + +2. Outputs one email for each new commit that was introduced by the + reference change. These "commit" emails include a list of the + files changed by the commit, followed by the diffs of files + modified by the commit. The commit emails are threaded to the + corresponding reference change email via "In-Reply-To". This style + (similar to the "git format-patch" style used on the Git mailing + list) makes it easy to scan through the emails, jump to patches + that need further attention, and write comments about specific + commits. Commits are handled in reverse topological order (i.e., + parents shown before children). For example, + + [git] branch master updated + + [git] 01/08: doc: fix xref link from api docs to manual pages + + [git] 02/08: api-credentials.txt: show the big picture first + + [git] 03/08: api-credentials.txt: mention credential.helper explicitly + + [git] 04/08: api-credentials.txt: add "see also" section + + [git] 05/08: t3510 (cherry-pick-sequence): add missing '&&' + + [git] 06/08: Merge branch 'rr/maint-t3510-cascade-fix' + + [git] 07/08: Merge branch 'mm/api-credentials-doc' + + [git] 08/08: Git 1.7.11-rc2 + + Each commit appears in exactly one commit email, the first time + that it is pushed to the repository. If a commit is later merged + into another branch, then a one-line summary of the commit is + included in the reference change email (as usual), but no + additional commit email is generated. + + By default, reference change emails have their "Reply-To" field set + to the person who pushed the change, and commit emails have their + "Reply-To" field set to the author of the commit. + +3. Output one "announce" mail for each new annotated tag, including + information about the tag and optionally a shortlog describing the + changes since the previous tag. Such emails might be useful if you + use annotated tags to mark releases of your project. + + +Requirements +------------ + +* Python 2.x, version 2.4 or later. No non-standard Python modules + are required. git-multimail does *not* currently work with Python + 3.x. + + The example scripts invoke Python using the following shebang line + (following PEP 394 [1]): + + #! /usr/bin/env python2 + + If your system's Python2 interpreter is not in your PATH or is not + called "python2", you can change the lines accordingly. Or you can + invoke the Python interpreter explicitly, for example via a tiny + shell script like + + #! /bin/sh + /usr/local/bin/python /path/to/git_multimail.py "$@" + +* The "git" command must be in your PATH. git-multimail is known to + work with Git versions back to 1.7.1. (Earlier versions have not + been tested; if you do so, please report your results.) + +* To send emails using the default configuration, a standard sendmail + program must be located at '/usr/sbin/sendmail' and configured + correctly to send emails. If this is not the case, see the + multimailhook.mailer configuration variable below for how to + configure git-multimail to send emails via an SMTP server. + + +Invocation +---------- + +git_multimail.py is designed to be used as a "post-receive" hook in a +Git repository (see githooks(5)). Link or copy it to +$GIT_DIR/hooks/post-receive within the repository for which email +notifications are desired. Usually it should be installed on the +central repository for a project, to which all commits are eventually +pushed. + +For use on pre-v1.5.1 Git servers, git_multimail.py can also work as +an "update" hook, taking its arguments on the command line. To use +this script in this manner, link or copy it to $GIT_DIR/hooks/update. +Please note that the script is not completely reliable in this mode +[2]. + +Alternatively, git_multimail.py can be imported as a Python module +into your own Python post-receive script. This method is a bit more +work, but allows the behavior of the hook to be customized using +arbitrary Python code. For example, you can use a custom environment +(perhaps inheriting from GenericEnvironment or GitoliteEnvironment) to + +* change how the user who did the push is determined + +* read users' email addresses from an LDAP server or from a database + +* decide which users should be notified about which commits based on + the contents of the commits (e.g., for users who want to be notified + only about changes affecting particular files or subdirectories) + +Or you can change how emails are sent by writing your own Mailer +class. The "post-receive" script in this directory demonstrates how +to use git_multimail.py as a Python module. (If you make interesting +changes of this type, please consider sharing them with the +community.) + + +Configuration +------------- + +By default, git-multimail mostly takes its configuration from the +following "git config" settings: + +multimailhook.environment + + This describes the general environment of the repository. + Currently supported values: + + "generic" -- the username of the pusher is read from $USER and the + repository name is derived from the repository's path. + + "gitolite" -- the username of the pusher is read from $GL_USER and + the repository name from $GL_REPO. + + If neither of these environments is suitable for your setup, then + you can implement a Python class that inherits from Environment + and instantiate it via a script that looks like the example + post-receive script. + + The environment value can be specified on the command line using + the --environment option. If it is not specified on the command + line or by multimailhook.environment, then it defaults to + "gitolite" if the environment contains variables $GL_USER and + $GL_REPO; otherwise "generic". + +multimailhook.repoName + + A short name of this Git repository, to be used in various places + in the notification email text. The default is to use $GL_REPO + for gitolite repositories, or otherwise to derive this value from + the repository path name. + +multimailhook.mailinglist + + The list of email addresses to which notification emails should be + sent, as RFC 2822 email addresses separated by commas. This + configuration option can be multivalued. Leave it unset or set it + to the empty string to not send emails by default. The next few + settings can be used to configure specific address lists for + specific types of notification email. + +multimailhook.refchangeList + + The list of email addresses to which summary emails about + reference changes should be sent, as RFC 2822 email addresses + separated by commas. This configuration option can be + multivalued. The default is the value in + multimailhook.mailinglist. Set this value to the empty string to + prevent reference change emails from being sent. + +multimailhook.announceList + + The list of email addresses to which emails about new annotated + tags should be sent, as RFC 2822 email addresses separated by + commas. This configuration option can be multivalued. The + default is the value in multimailhook.refchangelist or + multimailhook.mailinglist. Set this value to the empty string to + prevent annotated tag announcement emails from being sent. + +multimailhook.commitList + + The list of email addresses to which emails about individual new + commits should be sent, as RFC 2822 email addresses separated by + commas. This configuration option can be multivalued. The + default is the value in multimailhook.mailinglist. Set this value + to the empty string to prevent notification emails about + individual commits from being sent. + +multimailhook.announceShortlog + + If this option is set to true, then emails about changes to + annotated tags include a shortlog of changes since the previous + tag. This can be useful if the annotated tags represent releases; + then the shortlog will be a kind of rough summary of what has + happened since the last release. But if your tagging policy is + not so straightforward, then the shortlog might be confusing + rather than useful. Default is false. + +multimailhook.refchangeShowLog + + If this option is set to true, then summary emails about reference + changes will include a detailed log of the added commits in + addition to the one line summary. The log is generated by running + "git log" with the options specified in multimailhook.logOpts. + Default is false. + +multimailhook.mailer + + This option changes the way emails are sent. Accepted values are: + + - sendmail (the default): use the command /usr/sbin/sendmail or + /usr/lib/sendmail (or sendmailCommand, if configured). This + mode can be further customized via the following options: + + multimailhook.sendmailCommand + + The command used by mailer "sendmail" to send emails. Shell + quoting is allowed in the value of this setting, but remember that + Git requires double-quotes to be escaped; e.g., + + git config multimailhook.sendmailcommand '/usr/sbin/sendmail -t -F \"Git Repo\"' + + Default is '/usr/sbin/sendmail -t' or '/usr/lib/sendmail + -t' (depending on which file is present and executable). + + multimailhook.envelopeSender + + If set then pass this value to sendmail via the -f option to set + the envelope sender address. + + - smtp: use Python's smtplib. This is useful when the sendmail + command is not available on the system. This mode can be + further customized via the following options: + + multimailhook.smtpServer + + The name of the SMTP server to connect to. The value can + also include a colon and a port number; e.g., + "mail.example.com:25". Default is 'localhost' using port + 25. + + multimailhook.envelopeSender + + The sender address to be passed to the SMTP server. If + unset, then the value of multimailhook.from is used. + +multimailhook.from + + If set then use this value in the From: field of generated emails. + If unset, then use the repository's user configuration (user.name + and user.email). If user.email is also unset, then use + multimailhook.envelopeSender. + +multimailhook.administrator + + The name and/or email address of the administrator of the Git + repository; used in FOOTER_TEMPLATE. Default is + multimailhook.envelopesender if it is set; otherwise a generic + string is used. + +multimailhook.emailPrefix + + All emails have this string prepended to their subjects, to aid + email filtering (though filtering based on the X-Git-* email + headers is probably more robust). Default is the short name of + the repository in square brackets; e.g., "[myrepo]". + +multimailhook.emailMaxLines + + The maximum number of lines that should be included in the body of + a generated email. If not specified, there is no limit. Lines + beyond the limit are suppressed and counted, and a final line is + added indicating the number of suppressed lines. + +multimailhook.emailMaxLineLength + + The maximum length of a line in the email body. Lines longer than + this limit are truncated to this length with a trailing " [...]" + added to indicate the missing text. The default is 500, because + (a) diffs with longer lines are probably from binary files, for + which a diff is useless, and (b) even if a text file has such long + lines, the diffs are probably unreadable anyway. To disable line + truncation, set this option to 0. + +multimailhook.maxCommitEmails + + The maximum number of commit emails to send for a given change. + When the number of patches is larger that this value, only the + summary refchange email is sent. This can avoid accidental + mailbombing, for example on an initial push. To disable commit + emails limit, set this option to 0. The default is 500. + +multimailhook.emailStrictUTF8 + + If this boolean option is set to "true", then the main part of the + email body is forced to be valid UTF-8. Any characters that are + not valid UTF-8 are converted to the Unicode replacement + character, U+FFFD. The default is "true". + +multimailhook.diffOpts + + Options passed to "git diff-tree" when generating the summary + information for ReferenceChange emails. Default is "--stat + --summary --find-copies-harder". Add -p to those options to + include a unified diff of changes in addition to the usual summary + output. Shell quoting is allowed; see multimailhook.logOpts for + details. + +multimailhook.logOpts + + Options passed to "git log" to generate additional info for + reference change emails (used only if refchangeShowLog is set). + For example, adding --graph will show the graph of revisions, -p + will show the complete diff, etc. The default is empty. + + Shell quoting is allowed; for example, a log format that contains + spaces can be specified using something like: + + git config multimailhook.logopts '--pretty=format:"%h %aN <%aE>%n%s%n%n%b%n"' + + If you want to set this by editing your configuration file + directly, remember that Git requires double-quotes to be escaped + (see git-config(1) for more information): + + [multimailhook] + logopts = --pretty=format:\"%h %aN <%aE>%n%s%n%n%b%n\" + +multimailhook.emailDomain + + Domain name appended to the username of the person doing the push + to convert it into an email address (via "%s@%s" % (username, + emaildomain)). More complicated schemes can be implemented by + overriding Environment and overriding its get_pusher_email() + method. + +multimailhook.replyTo +multimailhook.replyToCommit +multimailhook.replyToRefchange + + Addresses to use in the Reply-To: field for commit emails + (replyToCommit) and refchange emails (replyToRefchange). + multimailhook.replyTo is used as default when replyToCommit or + replyToRefchange is not set. The value for these variables can be + either: + + - An email address, which will be used directly. + + - The value "pusher", in which case the pusher's address (if + available) will be used. This is the default for refchange + emails. + + - The value "author" (meaningful only for replyToCommit), in which + case the commit author's address will be used. This is the + default for commit emails. + + - The value "none", in which case the Reply-To: field will be + omitted. + + +Email filtering aids +-------------------- + +All emails include extra headers to enable fine tuned filtering and +give information for debugging. All emails include the headers +"X-Git-Repo", "X-Git-Refname", and "X-Git-Reftype". ReferenceChange +emails also include headers "X-Git-Oldrev" and "X-Git-Newrev"; +Revision emails also include header "X-Git-Rev". + + +Customizing email contents +-------------------------- + +git-multimail mostly generates emails by expanding templates. The +templates can be customized. To avoid the need to edit +git_multimail.py directly, the preferred way to change the templates +is to write a separate Python script that imports git_multimail.py as +a module, then replaces the templates in place. See the provided +post-receive script for an example of how this is done. + + +Customizing git-multimail for your environment +---------------------------------------------- + +git-multimail is mostly customized via an "environment" that describes +the local environment in which Git is running. Two types of +environment are built in: + +* GenericEnvironment: a stand-alone Git repository. + +* GitoliteEnvironment: a Git repository that is managed by gitolite + [3]. For such repositories, the identity of the pusher is read from + environment variable $GL_USER, and the name of the repository is + read from $GL_REPO (if it is not overridden by + multimailhook.reponame). + +By default, git-multimail assumes GitoliteEnvironment if $GL_USER and +$GL_REPO are set, and otherwise assumes GenericEnvironment. +Alternatively, you can choose one of these two environments explicitly +by setting a "multimailhook.environment" config setting (which can +have the value "generic" or "gitolite") or by passing an --environment +option to the script. + +If you need to customize the script in ways that are not supported by +the existing environments, you can define your own environment class +class using arbitrary Python code. To do so, you need to import +git_multimail.py as a Python module, as demonstrated by the example +post-receive script. Then implement your environment class; it should +usually inherit from one of the existing Environment classes and +possibly one or more of the EnvironmentMixin classes. Then set the +"environment" variable to an instance of your own environment class +and pass it to run_as_post_receive_hook(). + +The standard environment classes, GenericEnvironment and +GitoliteEnvironment, are in fact themselves put together out of a +number of mixin classes, each of which handles one aspect of the +customization. For the finest control over your configuration, you +can specify exactly which mixin classes your own environment class +should inherit from, and override individual methods (or even add your +own mixin classes) to implement entirely new behaviors. If you +implement any mixins that might be useful to other people, please +consider sharing them with the community! + + +Getting involved +---------------- + +git-multimail is an open-source project, built by volunteers. We +would welcome your help! + +The current maintainer is Michael Haggerty <mhagger@alum.mit.edu>. + +General discussion of git-multimail takes place on the main Git +mailing list, + + git@vger.kernel.org + +Please CC emails regarding git-multimail to me so that I don't +overlook them. + +The git-multimail project itself is currently hosted on GitHub: + + https://github.com/mhagger/git-multimail + +We use the GitHub issue tracker to keep track of bugs and feature +requests, and GitHub pull requests to exchange patches (though, if you +prefer, you can send patches via the Git mailing list with cc to me). + +Please note that although a copy of git-multimail will probably be +distributed in the "contrib" section of the main Git project, +development takes place in the separate git-multimail repository on +GitHub! (Whenever enough changes to git-multimail have accumulated, a +new code-drop of git-multimail will be submitted for inclusion in the +Git project.) + + +Footnotes +--------- + +[1] http://www.python.org/dev/peps/pep-0394/ + +[2] Because of the way information is passed to update hooks, the + script's method of determining whether a commit has already been + seen does not work when it is used as an "update" script. In + particular, no notification email will be generated for a new + commit that is added to multiple references in the same push. + +[3] https://github.com/sitaramc/gitolite diff --git a/contrib/hooks/multimail/README.Git b/contrib/hooks/multimail/README.Git new file mode 100644 index 0000000000..9c2e66a69a --- /dev/null +++ b/contrib/hooks/multimail/README.Git @@ -0,0 +1,15 @@ +This copy of git-multimail is distributed as part of the "contrib" +section of the Git project as a convenience to Git users. +git-multimail is developed as an independent project at the following +website: + + https://github.com/mhagger/git-multimail + +The version in this directory was obtained from the upstream project +on 2013-07-14 and consists of the "git-multimail" subdirectory from +revision + + 1a5cb09c698a74d15a715a86b09ead5f56bf4b06 + +Please see the README file in this directory for information about how +to report bugs or contribute to git-multimail. diff --git a/contrib/hooks/multimail/README.migrate-from-post-receive-email b/contrib/hooks/multimail/README.migrate-from-post-receive-email new file mode 100644 index 0000000000..1e6a976699 --- /dev/null +++ b/contrib/hooks/multimail/README.migrate-from-post-receive-email @@ -0,0 +1,145 @@ +git-multimail is close to, but not exactly, a plug-in replacement for +the old Git project script contrib/hooks/post-receive-email. This +document describes the differences and explains how to configure +git-multimail to get behavior closest to that of post-receive-email. + +If you are in a hurry +===================== + +A script called migrate-mailhook-config is included with +git-multimail. If you run this script within a Git repository that is +configured to use post-receive-email, it will convert the +configuration settings into the approximate equivalent settings for +git-multimail. For more information, run + + migrate-mailhook-config --help + + +Configuration differences +========================= + +* The names of the config options for git-multimail are in namespace + "multimailhook.*" instead of "hooks.*". (Editorial comment: + post-receive-email should never have used such a generic top-level + namespace.) + +* In emails about new annotated tags, post-receive-email includes a + shortlog of all changes since the previous annotated tag. To get + this behavior with git-multimail, you need to set + multimailhook.announceshortlog to true: + + git config multimailhook.announceshortlog true + +* multimailhook.commitlist -- This is a new configuration variable. + Recipients listed here will receive a separate email for each new + commit. However, if this variable is *not* set, it defaults to the + value of multimailhook.mailinglist. Therefore, if you *don't* want + the members of multimailhook.mailinglist to receive one email per + commit, then set this value to the empty string: + + git config multimailhook.commitlist '' + +* multimailhook.emailprefix -- If this value is not set, then the + subjects of generated emails are prefixed with the short name of the + repository enclosed in square brackets; e.g., "[myrepo]". + post-receive-email defaults to prefix "[SCM]" if this option is not + set. So if you were using the old default and want to retain it + (for example, to avoid having to change your email filters), set + this variable explicitly to the old value: + + git config multimailhook.emailprefix "[SCM]" + +* The "multimailhook.showrev" configuration option is not supported. + Its main use is obsoleted by the one-email-per-commit feature of + git-multimail. + + +Other differences +================= + +This section describes other differences in the behavior of +git-multimail vs. post-receive-email. For full details, please refer +to the main README file: + +* One email per commit. For each reference change, the script first + outputs one email summarizing the reference change (including + one-line summaries of the new commits), then it outputs a separate + email for each new commit that was introduced, including patches. + These one-email-per-commit emails go to the addresses listed in + multimailhook.commitlist. post-receive-email sends only one email + for each *reference* that is changed, no matter how many commits + were added to the reference. + +* Better algorithm for detecting new commits. post-receive-email + processes one reference change at a time, which causes it to fail to + describe new commits that were included in multiple branches. For + example, if a single push adds the "*" commits in the diagram below, + then post-receive-email would never include the details of the two + commits that are common to "master" and "branch" in its + notifications. + + o---o---o---*---*---* <-- master + \ + *---* <-- branch + + git-multimail analyzes all reference modifications to determine + which commits were not present before the change, therefore avoiding + that error. + +* In reference change emails, git-multimail tells which commits have + been added to the reference vs. are entirely new to the repository, + and which commits that have been omitted from the reference + vs. entirely discarded from the repository. + +* The environment in which Git is running can be configured via an + "Environment" abstraction. + +* Built-in support for Gitolite-managed repositories. + +* Instead of using full SHA1 object names in emails, git-multimail + mostly uses abbreviated SHA1s, plus one-line log message summaries + where appropriate. + +* In the schematic diagrams that explain non-fast-forward commits, + git-multimail shows the names of the branches involved. + +* The emails generated by git-multimail include the name of the Git + repository that was modified; this is convenient for recipients who + are monitoring multiple repositories. + +* git-multimail allows the email "From" addresses to be configured. + +* The recipients lists (multimailhook.mailinglist, + multimailhook.refchangelist, multimailhook.announcelist, and + multimailhook.commitlist) can be comma-separated values and/or + multivalued settings in the config file; e.g., + + [multimailhook] + mailinglist = mr.brown@example.com, mr.black@example.com + announcelist = Him <him@example.com> + announcelist = Jim <jim@example.com> + announcelist = pop@example.com + + This might make it easier to maintain short recipients lists without + requiring full-fledged mailing list software. + +* By default, git-multimail sets email "Reply-To" headers to reply to + the pusher (for reference updates) and to the author (for commit + notifications). By default, the pusher's email address is + constructed by appending "multimailhook.emaildomain" to the pusher's + username. + +* The generated emails contain a configurable footer. By default, it + lists the name of the administrator who should be contacted to + unsubscribe from notification emails. + +* New option multimailhook.emailmaxlinelength to limit the length of + lines in the main part of the email body. The default limit is 500 + characters. + +* New option multimailhook.emailstrictutf8 to ensure that the main + part of the email body is valid UTF-8. Invalid characters are + turned into the Unicode replacement character, U+FFFD. By default + this option is turned on. + +* Written in Python. Easier to add new features. diff --git a/contrib/hooks/multimail/git_multimail.py b/contrib/hooks/multimail/git_multimail.py new file mode 100755 index 0000000000..81c6a51706 --- /dev/null +++ b/contrib/hooks/multimail/git_multimail.py @@ -0,0 +1,2393 @@ +#! /usr/bin/env python2 + +# Copyright (c) 2012,2013 Michael Haggerty +# Derived from contrib/hooks/post-receive-email, which is +# Copyright (c) 2007 Andy Parkins +# and also includes contributions by other authors. +# +# This file is part of git-multimail. +# +# git-multimail is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License version +# 2 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see +# <http://www.gnu.org/licenses/>. + +"""Generate notification emails for pushes to a git repository. + +This hook sends emails describing changes introduced by pushes to a +git repository. For each reference that was changed, it emits one +ReferenceChange email summarizing how the reference was changed, +followed by one Revision email for each new commit that was introduced +by the reference change. + +Each commit is announced in exactly one Revision email. If the same +commit is merged into another branch in the same or a later push, then +the ReferenceChange email will list the commit's SHA1 and its one-line +summary, but no new Revision email will be generated. + +This script is designed to be used as a "post-receive" hook in a git +repository (see githooks(5)). It can also be used as an "update" +script, but this usage is not completely reliable and is deprecated. + +To help with debugging, this script accepts a --stdout option, which +causes the emails to be written to standard output rather than sent +using sendmail. + +See the accompanying README file for the complete documentation. + +""" + +import sys +import os +import re +import bisect +import subprocess +import shlex +import optparse +import smtplib + +try: + from email.utils import make_msgid + from email.utils import getaddresses + from email.utils import formataddr + from email.header import Header +except ImportError: + # Prior to Python 2.5, the email module used different names: + from email.Utils import make_msgid + from email.Utils import getaddresses + from email.Utils import formataddr + from email.Header import Header + + +DEBUG = False + +ZEROS = '0' * 40 +LOGBEGIN = '- Log -----------------------------------------------------------------\n' +LOGEND = '-----------------------------------------------------------------------\n' + + +# It is assumed in many places that the encoding is uniformly UTF-8, +# so changing these constants is unsupported. But define them here +# anyway, to make it easier to find (at least most of) the places +# where the encoding is important. +(ENCODING, CHARSET) = ('UTF-8', 'utf-8') + + +REF_CREATED_SUBJECT_TEMPLATE = ( + '%(emailprefix)s%(refname_type)s %(short_refname)s created' + ' (now %(newrev_short)s)' + ) +REF_UPDATED_SUBJECT_TEMPLATE = ( + '%(emailprefix)s%(refname_type)s %(short_refname)s updated' + ' (%(oldrev_short)s -> %(newrev_short)s)' + ) +REF_DELETED_SUBJECT_TEMPLATE = ( + '%(emailprefix)s%(refname_type)s %(short_refname)s deleted' + ' (was %(oldrev_short)s)' + ) + +REFCHANGE_HEADER_TEMPLATE = """\ +To: %(recipients)s +Subject: %(subject)s +MIME-Version: 1.0 +Content-Type: text/plain; charset=%(charset)s +Content-Transfer-Encoding: 8bit +Message-ID: %(msgid)s +From: %(fromaddr)s +Reply-To: %(reply_to)s +X-Git-Repo: %(repo_shortname)s +X-Git-Refname: %(refname)s +X-Git-Reftype: %(refname_type)s +X-Git-Oldrev: %(oldrev)s +X-Git-Newrev: %(newrev)s +Auto-Submitted: auto-generated +""" + +REFCHANGE_INTRO_TEMPLATE = """\ +This is an automated email from the git hooks/post-receive script. + +%(pusher)s pushed a change to %(refname_type)s %(short_refname)s +in repository %(repo_shortname)s. + +""" + + +FOOTER_TEMPLATE = """\ + +-- \n\ +To stop receiving notification emails like this one, please contact +%(administrator)s. +""" + + +REWIND_ONLY_TEMPLATE = """\ +This update removed existing revisions from the reference, leaving the +reference pointing at a previous point in the repository history. + + * -- * -- N %(refname)s (%(newrev_short)s) + \\ + O -- O -- O (%(oldrev_short)s) + +Any revisions marked "omits" are not gone; other references still +refer to them. Any revisions marked "discards" are gone forever. +""" + + +NON_FF_TEMPLATE = """\ +This update added new revisions after undoing existing revisions. +That is to say, some revisions that were in the old version of the +%(refname_type)s are not in the new version. This situation occurs +when a user --force pushes a change and generates a repository +containing something like this: + + * -- * -- B -- O -- O -- O (%(oldrev_short)s) + \\ + N -- N -- N %(refname)s (%(newrev_short)s) + +You should already have received notification emails for all of the O +revisions, and so the following emails describe only the N revisions +from the common base, B. + +Any revisions marked "omits" are not gone; other references still +refer to them. Any revisions marked "discards" are gone forever. +""" + + +NO_NEW_REVISIONS_TEMPLATE = """\ +No new revisions were added by this update. +""" + + +DISCARDED_REVISIONS_TEMPLATE = """\ +This change permanently discards the following revisions: +""" + + +NO_DISCARDED_REVISIONS_TEMPLATE = """\ +The revisions that were on this %(refname_type)s are still contained in +other references; therefore, this change does not discard any commits +from the repository. +""" + + +NEW_REVISIONS_TEMPLATE = """\ +The %(tot)s revisions listed above as "new" are entirely new to this +repository and will be described in separate emails. The revisions +listed as "adds" were already present in the repository and have only +been added to this reference. + +""" + + +TAG_CREATED_TEMPLATE = """\ + at %(newrev_short)-9s (%(newrev_type)s) +""" + + +TAG_UPDATED_TEMPLATE = """\ +*** WARNING: tag %(short_refname)s was modified! *** + + from %(oldrev_short)-9s (%(oldrev_type)s) + to %(newrev_short)-9s (%(newrev_type)s) +""" + + +TAG_DELETED_TEMPLATE = """\ +*** WARNING: tag %(short_refname)s was deleted! *** + +""" + + +# The template used in summary tables. It looks best if this uses the +# same alignment as TAG_CREATED_TEMPLATE and TAG_UPDATED_TEMPLATE. +BRIEF_SUMMARY_TEMPLATE = """\ +%(action)10s %(rev_short)-9s %(text)s +""" + + +NON_COMMIT_UPDATE_TEMPLATE = """\ +This is an unusual reference change because the reference did not +refer to a commit either before or after the change. We do not know +how to provide full information about this reference change. +""" + + +REVISION_HEADER_TEMPLATE = """\ +To: %(recipients)s +Subject: %(emailprefix)s%(num)02d/%(tot)02d: %(oneline)s +MIME-Version: 1.0 +Content-Type: text/plain; charset=%(charset)s +Content-Transfer-Encoding: 8bit +From: %(fromaddr)s +Reply-To: %(reply_to)s +In-Reply-To: %(reply_to_msgid)s +References: %(reply_to_msgid)s +X-Git-Repo: %(repo_shortname)s +X-Git-Refname: %(refname)s +X-Git-Reftype: %(refname_type)s +X-Git-Rev: %(rev)s +Auto-Submitted: auto-generated +""" + +REVISION_INTRO_TEMPLATE = """\ +This is an automated email from the git hooks/post-receive script. + +%(pusher)s pushed a commit to %(refname_type)s %(short_refname)s +in repository %(repo_shortname)s. + +""" + + +REVISION_FOOTER_TEMPLATE = FOOTER_TEMPLATE + + +class CommandError(Exception): + def __init__(self, cmd, retcode): + self.cmd = cmd + self.retcode = retcode + Exception.__init__( + self, + 'Command "%s" failed with retcode %s' % (' '.join(cmd), retcode,) + ) + + +class ConfigurationException(Exception): + pass + + +def read_git_output(args, input=None, keepends=False, **kw): + """Read the output of a Git command.""" + + return read_output( + ['git', '-c', 'i18n.logoutputencoding=%s' % (ENCODING,)] + args, + input=input, keepends=keepends, **kw + ) + + +def read_output(cmd, input=None, keepends=False, **kw): + if input: + stdin = subprocess.PIPE + else: + stdin = None + p = subprocess.Popen( + cmd, stdin=stdin, stdout=subprocess.PIPE, stderr=subprocess.PIPE, **kw + ) + (out, err) = p.communicate(input) + retcode = p.wait() + if retcode: + raise CommandError(cmd, retcode) + if not keepends: + out = out.rstrip('\n\r') + return out + + +def read_git_lines(args, keepends=False, **kw): + """Return the lines output by Git command. + + Return as single lines, with newlines stripped off.""" + + return read_git_output(args, keepends=True, **kw).splitlines(keepends) + + +class Config(object): + def __init__(self, section, git_config=None): + """Represent a section of the git configuration. + + If git_config is specified, it is passed to "git config" in + the GIT_CONFIG environment variable, meaning that "git config" + will read the specified path rather than the Git default + config paths.""" + + self.section = section + if git_config: + self.env = os.environ.copy() + self.env['GIT_CONFIG'] = git_config + else: + self.env = None + + @staticmethod + def _split(s): + """Split NUL-terminated values.""" + + words = s.split('\0') + assert words[-1] == '' + return words[:-1] + + def get(self, name, default=None): + try: + values = self._split(read_git_output( + ['config', '--get', '--null', '%s.%s' % (self.section, name)], + env=self.env, keepends=True, + )) + assert len(values) == 1 + return values[0] + except CommandError: + return default + + def get_bool(self, name, default=None): + try: + value = read_git_output( + ['config', '--get', '--bool', '%s.%s' % (self.section, name)], + env=self.env, + ) + except CommandError: + return default + return value == 'true' + + def get_all(self, name, default=None): + """Read a (possibly multivalued) setting from the configuration. + + Return the result as a list of values, or default if the name + is unset.""" + + try: + return self._split(read_git_output( + ['config', '--get-all', '--null', '%s.%s' % (self.section, name)], + env=self.env, keepends=True, + )) + except CommandError, e: + if e.retcode == 1: + # "the section or key is invalid"; i.e., there is no + # value for the specified key. + return default + else: + raise + + def get_recipients(self, name, default=None): + """Read a recipients list from the configuration. + + Return the result as a comma-separated list of email + addresses, or default if the option is unset. If the setting + has multiple values, concatenate them with comma separators.""" + + lines = self.get_all(name, default=None) + if lines is None: + return default + return ', '.join(line.strip() for line in lines) + + def set(self, name, value): + read_git_output( + ['config', '%s.%s' % (self.section, name), value], + env=self.env, + ) + + def add(self, name, value): + read_git_output( + ['config', '--add', '%s.%s' % (self.section, name), value], + env=self.env, + ) + + def has_key(self, name): + return self.get_all(name, default=None) is not None + + def unset_all(self, name): + try: + read_git_output( + ['config', '--unset-all', '%s.%s' % (self.section, name)], + env=self.env, + ) + except CommandError, e: + if e.retcode == 5: + # The name doesn't exist, which is what we wanted anyway... + pass + else: + raise + + def set_recipients(self, name, value): + self.unset_all(name) + for pair in getaddresses([value]): + self.add(name, formataddr(pair)) + + +def generate_summaries(*log_args): + """Generate a brief summary for each revision requested. + + log_args are strings that will be passed directly to "git log" as + revision selectors. Iterate over (sha1_short, subject) for each + commit specified by log_args (subject is the first line of the + commit message as a string without EOLs).""" + + cmd = [ + 'log', '--abbrev', '--format=%h %s', + ] + list(log_args) + ['--'] + for line in read_git_lines(cmd): + yield tuple(line.split(' ', 1)) + + +def limit_lines(lines, max_lines): + for (index, line) in enumerate(lines): + if index < max_lines: + yield line + + if index >= max_lines: + yield '... %d lines suppressed ...\n' % (index + 1 - max_lines,) + + +def limit_linelength(lines, max_linelength): + for line in lines: + # Don't forget that lines always include a trailing newline. + if len(line) > max_linelength + 1: + line = line[:max_linelength - 7] + ' [...]\n' + yield line + + +class CommitSet(object): + """A (constant) set of object names. + + The set should be initialized with full SHA1 object names. The + __contains__() method returns True iff its argument is an + abbreviation of any the names in the set.""" + + def __init__(self, names): + self._names = sorted(names) + + def __len__(self): + return len(self._names) + + def __contains__(self, sha1_abbrev): + """Return True iff this set contains sha1_abbrev (which might be abbreviated).""" + + i = bisect.bisect_left(self._names, sha1_abbrev) + return i < len(self) and self._names[i].startswith(sha1_abbrev) + + +class GitObject(object): + def __init__(self, sha1, type=None): + if sha1 == ZEROS: + self.sha1 = self.type = self.commit_sha1 = None + else: + self.sha1 = sha1 + self.type = type or read_git_output(['cat-file', '-t', self.sha1]) + + if self.type == 'commit': + self.commit_sha1 = self.sha1 + elif self.type == 'tag': + try: + self.commit_sha1 = read_git_output( + ['rev-parse', '--verify', '%s^0' % (self.sha1,)] + ) + except CommandError: + # Cannot deref tag to determine commit_sha1 + self.commit_sha1 = None + else: + self.commit_sha1 = None + + self.short = read_git_output(['rev-parse', '--short', sha1]) + + def get_summary(self): + """Return (sha1_short, subject) for this commit.""" + + if not self.sha1: + raise ValueError('Empty commit has no summary') + + return iter(generate_summaries('--no-walk', self.sha1)).next() + + def __eq__(self, other): + return isinstance(other, GitObject) and self.sha1 == other.sha1 + + def __hash__(self): + return hash(self.sha1) + + def __nonzero__(self): + return bool(self.sha1) + + def __str__(self): + return self.sha1 or ZEROS + + +class Change(object): + """A Change that has been made to the Git repository. + + Abstract class from which both Revisions and ReferenceChanges are + derived. A Change knows how to generate a notification email + describing itself.""" + + def __init__(self, environment): + self.environment = environment + self._values = None + + def _compute_values(self): + """Return a dictionary {keyword : expansion} for this Change. + + Derived classes overload this method to add more entries to + the return value. This method is used internally by + get_values(). The return value should always be a new + dictionary.""" + + return self.environment.get_values() + + def get_values(self, **extra_values): + """Return a dictionary {keyword : expansion} for this Change. + + Return a dictionary mapping keywords to the values that they + should be expanded to for this Change (used when interpolating + template strings). If any keyword arguments are supplied, add + those to the return value as well. The return value is always + a new dictionary.""" + + if self._values is None: + self._values = self._compute_values() + + values = self._values.copy() + if extra_values: + values.update(extra_values) + return values + + def expand(self, template, **extra_values): + """Expand template. + + Expand the template (which should be a string) using string + interpolation of the values for this Change. If any keyword + arguments are provided, also include those in the keywords + available for interpolation.""" + + return template % self.get_values(**extra_values) + + def expand_lines(self, template, **extra_values): + """Break template into lines and expand each line.""" + + values = self.get_values(**extra_values) + for line in template.splitlines(True): + yield line % values + + def expand_header_lines(self, template, **extra_values): + """Break template into lines and expand each line as an RFC 2822 header. + + Encode values and split up lines that are too long. Silently + skip lines that contain references to unknown variables.""" + + values = self.get_values(**extra_values) + for line in template.splitlines(): + (name, value) = line.split(':', 1) + + try: + value = value % values + except KeyError, e: + if DEBUG: + sys.stderr.write( + 'Warning: unknown variable %r in the following line; line skipped:\n' + ' %s\n' + % (e.args[0], line,) + ) + else: + try: + h = Header(value, header_name=name) + except UnicodeDecodeError: + h = Header(value, header_name=name, charset=CHARSET, errors='replace') + for splitline in ('%s: %s\n' % (name, h.encode(),)).splitlines(True): + yield splitline + + def generate_email_header(self): + """Generate the RFC 2822 email headers for this Change, a line at a time. + + The output should not include the trailing blank line.""" + + raise NotImplementedError() + + def generate_email_intro(self): + """Generate the email intro for this Change, a line at a time. + + The output will be used as the standard boilerplate at the top + of the email body.""" + + raise NotImplementedError() + + def generate_email_body(self): + """Generate the main part of the email body, a line at a time. + + The text in the body might be truncated after a specified + number of lines (see multimailhook.emailmaxlines).""" + + raise NotImplementedError() + + def generate_email_footer(self): + """Generate the footer of the email, a line at a time. + + The footer is always included, irrespective of + multimailhook.emailmaxlines.""" + + raise NotImplementedError() + + def generate_email(self, push, body_filter=None): + """Generate an email describing this change. + + Iterate over the lines (including the header lines) of an + email describing this change. If body_filter is not None, + then use it to filter the lines that are intended for the + email body.""" + + for line in self.generate_email_header(): + yield line + yield '\n' + for line in self.generate_email_intro(): + yield line + + body = self.generate_email_body(push) + if body_filter is not None: + body = body_filter(body) + for line in body: + yield line + + for line in self.generate_email_footer(): + yield line + + +class Revision(Change): + """A Change consisting of a single git commit.""" + + def __init__(self, reference_change, rev, num, tot): + Change.__init__(self, reference_change.environment) + self.reference_change = reference_change + self.rev = rev + self.change_type = self.reference_change.change_type + self.refname = self.reference_change.refname + self.num = num + self.tot = tot + self.author = read_git_output(['log', '--no-walk', '--format=%aN <%aE>', self.rev.sha1]) + self.recipients = self.environment.get_revision_recipients(self) + + def _compute_values(self): + values = Change._compute_values(self) + + oneline = read_git_output( + ['log', '--format=%s', '--no-walk', self.rev.sha1] + ) + + values['rev'] = self.rev.sha1 + values['rev_short'] = self.rev.short + values['change_type'] = self.change_type + values['refname'] = self.refname + values['short_refname'] = self.reference_change.short_refname + values['refname_type'] = self.reference_change.refname_type + values['reply_to_msgid'] = self.reference_change.msgid + values['num'] = self.num + values['tot'] = self.tot + values['recipients'] = self.recipients + values['oneline'] = oneline + values['author'] = self.author + + reply_to = self.environment.get_reply_to_commit(self) + if reply_to: + values['reply_to'] = reply_to + + return values + + def generate_email_header(self): + for line in self.expand_header_lines(REVISION_HEADER_TEMPLATE): + yield line + + def generate_email_intro(self): + for line in self.expand_lines(REVISION_INTRO_TEMPLATE): + yield line + + def generate_email_body(self, push): + """Show this revision.""" + + return read_git_lines( + [ + 'log', '-C', + '--stat', '-p', '--cc', + '-1', self.rev.sha1, + ], + keepends=True, + ) + + def generate_email_footer(self): + return self.expand_lines(REVISION_FOOTER_TEMPLATE) + + +class ReferenceChange(Change): + """A Change to a Git reference. + + An abstract class representing a create, update, or delete of a + Git reference. Derived classes handle specific types of reference + (e.g., tags vs. branches). These classes generate the main + reference change email summarizing the reference change and + whether it caused any any commits to be added or removed. + + ReferenceChange objects are usually created using the static + create() method, which has the logic to decide which derived class + to instantiate.""" + + REF_RE = re.compile(r'^refs\/(?P<area>[^\/]+)\/(?P<shortname>.*)$') + + @staticmethod + def create(environment, oldrev, newrev, refname): + """Return a ReferenceChange object representing the change. + + Return an object that represents the type of change that is being + made. oldrev and newrev should be SHA1s or ZEROS.""" + + old = GitObject(oldrev) + new = GitObject(newrev) + rev = new or old + + # The revision type tells us what type the commit is, combined with + # the location of the ref we can decide between + # - working branch + # - tracking branch + # - unannotated tag + # - annotated tag + m = ReferenceChange.REF_RE.match(refname) + if m: + area = m.group('area') + short_refname = m.group('shortname') + else: + area = '' + short_refname = refname + + if rev.type == 'tag': + # Annotated tag: + klass = AnnotatedTagChange + elif rev.type == 'commit': + if area == 'tags': + # Non-annotated tag: + klass = NonAnnotatedTagChange + elif area == 'heads': + # Branch: + klass = BranchChange + elif area == 'remotes': + # Tracking branch: + sys.stderr.write( + '*** Push-update of tracking branch %r\n' + '*** - incomplete email generated.\n' + % (refname,) + ) + klass = OtherReferenceChange + else: + # Some other reference namespace: + sys.stderr.write( + '*** Push-update of strange reference %r\n' + '*** - incomplete email generated.\n' + % (refname,) + ) + klass = OtherReferenceChange + else: + # Anything else (is there anything else?) + sys.stderr.write( + '*** Unknown type of update to %r (%s)\n' + '*** - incomplete email generated.\n' + % (refname, rev.type,) + ) + klass = OtherReferenceChange + + return klass( + environment, + refname=refname, short_refname=short_refname, + old=old, new=new, rev=rev, + ) + + def __init__(self, environment, refname, short_refname, old, new, rev): + Change.__init__(self, environment) + self.change_type = { + (False, True) : 'create', + (True, True) : 'update', + (True, False) : 'delete', + }[bool(old), bool(new)] + self.refname = refname + self.short_refname = short_refname + self.old = old + self.new = new + self.rev = rev + self.msgid = make_msgid() + self.diffopts = environment.diffopts + self.logopts = environment.logopts + self.showlog = environment.refchange_showlog + + def _compute_values(self): + values = Change._compute_values(self) + + values['change_type'] = self.change_type + values['refname_type'] = self.refname_type + values['refname'] = self.refname + values['short_refname'] = self.short_refname + values['msgid'] = self.msgid + values['recipients'] = self.recipients + values['oldrev'] = str(self.old) + values['oldrev_short'] = self.old.short + values['newrev'] = str(self.new) + values['newrev_short'] = self.new.short + + if self.old: + values['oldrev_type'] = self.old.type + if self.new: + values['newrev_type'] = self.new.type + + reply_to = self.environment.get_reply_to_refchange(self) + if reply_to: + values['reply_to'] = reply_to + + return values + + def get_subject(self): + template = { + 'create' : REF_CREATED_SUBJECT_TEMPLATE, + 'update' : REF_UPDATED_SUBJECT_TEMPLATE, + 'delete' : REF_DELETED_SUBJECT_TEMPLATE, + }[self.change_type] + return self.expand(template) + + def generate_email_header(self): + for line in self.expand_header_lines( + REFCHANGE_HEADER_TEMPLATE, subject=self.get_subject(), + ): + yield line + + def generate_email_intro(self): + for line in self.expand_lines(REFCHANGE_INTRO_TEMPLATE): + yield line + + def generate_email_body(self, push): + """Call the appropriate body-generation routine. + + Call one of generate_create_summary() / + generate_update_summary() / generate_delete_summary().""" + + change_summary = { + 'create' : self.generate_create_summary, + 'delete' : self.generate_delete_summary, + 'update' : self.generate_update_summary, + }[self.change_type](push) + for line in change_summary: + yield line + + for line in self.generate_revision_change_summary(push): + yield line + + def generate_email_footer(self): + return self.expand_lines(FOOTER_TEMPLATE) + + def generate_revision_change_log(self, new_commits_list): + if self.showlog: + yield '\n' + yield 'Detailed log of new commits:\n\n' + for line in read_git_lines( + ['log', '--no-walk'] + + self.logopts + + new_commits_list + + ['--'], + keepends=True, + ): + yield line + + def generate_revision_change_summary(self, push): + """Generate a summary of the revisions added/removed by this change.""" + + if self.new.commit_sha1 and not self.old.commit_sha1: + # A new reference was created. List the new revisions + # brought by the new reference (i.e., those revisions that + # were not in the repository before this reference + # change). + sha1s = list(push.get_new_commits(self)) + sha1s.reverse() + tot = len(sha1s) + new_revisions = [ + Revision(self, GitObject(sha1), num=i+1, tot=tot) + for (i, sha1) in enumerate(sha1s) + ] + + if new_revisions: + yield self.expand('This %(refname_type)s includes the following new commits:\n') + yield '\n' + for r in new_revisions: + (sha1, subject) = r.rev.get_summary() + yield r.expand( + BRIEF_SUMMARY_TEMPLATE, action='new', text=subject, + ) + yield '\n' + for line in self.expand_lines(NEW_REVISIONS_TEMPLATE, tot=tot): + yield line + for line in self.generate_revision_change_log([r.rev.sha1 for r in new_revisions]): + yield line + else: + for line in self.expand_lines(NO_NEW_REVISIONS_TEMPLATE): + yield line + + elif self.new.commit_sha1 and self.old.commit_sha1: + # A reference was changed to point at a different commit. + # List the revisions that were removed and/or added *from + # that reference* by this reference change, along with a + # diff between the trees for its old and new values. + + # List of the revisions that were added to the branch by + # this update. Note this list can include revisions that + # have already had notification emails; we want such + # revisions in the summary even though we will not send + # new notification emails for them. + adds = list(generate_summaries( + '--topo-order', '--reverse', '%s..%s' + % (self.old.commit_sha1, self.new.commit_sha1,) + )) + + # List of the revisions that were removed from the branch + # by this update. This will be empty except for + # non-fast-forward updates. + discards = list(generate_summaries( + '%s..%s' % (self.new.commit_sha1, self.old.commit_sha1,) + )) + + if adds: + new_commits_list = push.get_new_commits(self) + else: + new_commits_list = [] + new_commits = CommitSet(new_commits_list) + + if discards: + discarded_commits = CommitSet(push.get_discarded_commits(self)) + else: + discarded_commits = CommitSet([]) + + if discards and adds: + for (sha1, subject) in discards: + if sha1 in discarded_commits: + action = 'discards' + else: + action = 'omits' + yield self.expand( + BRIEF_SUMMARY_TEMPLATE, action=action, + rev_short=sha1, text=subject, + ) + for (sha1, subject) in adds: + if sha1 in new_commits: + action = 'new' + else: + action = 'adds' + yield self.expand( + BRIEF_SUMMARY_TEMPLATE, action=action, + rev_short=sha1, text=subject, + ) + yield '\n' + for line in self.expand_lines(NON_FF_TEMPLATE): + yield line + + elif discards: + for (sha1, subject) in discards: + if sha1 in discarded_commits: + action = 'discards' + else: + action = 'omits' + yield self.expand( + BRIEF_SUMMARY_TEMPLATE, action=action, + rev_short=sha1, text=subject, + ) + yield '\n' + for line in self.expand_lines(REWIND_ONLY_TEMPLATE): + yield line + + elif adds: + (sha1, subject) = self.old.get_summary() + yield self.expand( + BRIEF_SUMMARY_TEMPLATE, action='from', + rev_short=sha1, text=subject, + ) + for (sha1, subject) in adds: + if sha1 in new_commits: + action = 'new' + else: + action = 'adds' + yield self.expand( + BRIEF_SUMMARY_TEMPLATE, action=action, + rev_short=sha1, text=subject, + ) + + yield '\n' + + if new_commits: + for line in self.expand_lines(NEW_REVISIONS_TEMPLATE, tot=len(new_commits)): + yield line + for line in self.generate_revision_change_log(new_commits_list): + yield line + else: + for line in self.expand_lines(NO_NEW_REVISIONS_TEMPLATE): + yield line + + # The diffstat is shown from the old revision to the new + # revision. This is to show the truth of what happened in + # this change. There's no point showing the stat from the + # base to the new revision because the base is effectively a + # random revision at this point - the user will be interested + # in what this revision changed - including the undoing of + # previous revisions in the case of non-fast-forward updates. + yield '\n' + yield 'Summary of changes:\n' + for line in read_git_lines( + ['diff-tree'] + + self.diffopts + + ['%s..%s' % (self.old.commit_sha1, self.new.commit_sha1,)], + keepends=True, + ): + yield line + + elif self.old.commit_sha1 and not self.new.commit_sha1: + # A reference was deleted. List the revisions that were + # removed from the repository by this reference change. + + sha1s = list(push.get_discarded_commits(self)) + tot = len(sha1s) + discarded_revisions = [ + Revision(self, GitObject(sha1), num=i+1, tot=tot) + for (i, sha1) in enumerate(sha1s) + ] + + if discarded_revisions: + for line in self.expand_lines(DISCARDED_REVISIONS_TEMPLATE): + yield line + yield '\n' + for r in discarded_revisions: + (sha1, subject) = r.rev.get_summary() + yield r.expand( + BRIEF_SUMMARY_TEMPLATE, action='discards', text=subject, + ) + else: + for line in self.expand_lines(NO_DISCARDED_REVISIONS_TEMPLATE): + yield line + + elif not self.old.commit_sha1 and not self.new.commit_sha1: + for line in self.expand_lines(NON_COMMIT_UPDATE_TEMPLATE): + yield line + + def generate_create_summary(self, push): + """Called for the creation of a reference.""" + + # This is a new reference and so oldrev is not valid + (sha1, subject) = self.new.get_summary() + yield self.expand( + BRIEF_SUMMARY_TEMPLATE, action='at', + rev_short=sha1, text=subject, + ) + yield '\n' + + def generate_update_summary(self, push): + """Called for the change of a pre-existing branch.""" + + return iter([]) + + def generate_delete_summary(self, push): + """Called for the deletion of any type of reference.""" + + (sha1, subject) = self.old.get_summary() + yield self.expand( + BRIEF_SUMMARY_TEMPLATE, action='was', + rev_short=sha1, text=subject, + ) + yield '\n' + + +class BranchChange(ReferenceChange): + refname_type = 'branch' + + def __init__(self, environment, refname, short_refname, old, new, rev): + ReferenceChange.__init__( + self, environment, + refname=refname, short_refname=short_refname, + old=old, new=new, rev=rev, + ) + self.recipients = environment.get_refchange_recipients(self) + + +class AnnotatedTagChange(ReferenceChange): + refname_type = 'annotated tag' + + def __init__(self, environment, refname, short_refname, old, new, rev): + ReferenceChange.__init__( + self, environment, + refname=refname, short_refname=short_refname, + old=old, new=new, rev=rev, + ) + self.recipients = environment.get_announce_recipients(self) + self.show_shortlog = environment.announce_show_shortlog + + ANNOTATED_TAG_FORMAT = ( + '%(*objectname)\n' + '%(*objecttype)\n' + '%(taggername)\n' + '%(taggerdate)' + ) + + def describe_tag(self, push): + """Describe the new value of an annotated tag.""" + + # Use git for-each-ref to pull out the individual fields from + # the tag + [tagobject, tagtype, tagger, tagged] = read_git_lines( + ['for-each-ref', '--format=%s' % (self.ANNOTATED_TAG_FORMAT,), self.refname], + ) + + yield self.expand( + BRIEF_SUMMARY_TEMPLATE, action='tagging', + rev_short=tagobject, text='(%s)' % (tagtype,), + ) + if tagtype == 'commit': + # If the tagged object is a commit, then we assume this is a + # release, and so we calculate which tag this tag is + # replacing + try: + prevtag = read_git_output(['describe', '--abbrev=0', '%s^' % (self.new,)]) + except CommandError: + prevtag = None + if prevtag: + yield ' replaces %s\n' % (prevtag,) + else: + prevtag = None + yield ' length %s bytes\n' % (read_git_output(['cat-file', '-s', tagobject]),) + + yield ' tagged by %s\n' % (tagger,) + yield ' on %s\n' % (tagged,) + yield '\n' + + # Show the content of the tag message; this might contain a + # change log or release notes so is worth displaying. + yield LOGBEGIN + contents = list(read_git_lines(['cat-file', 'tag', self.new.sha1], keepends=True)) + contents = contents[contents.index('\n') + 1:] + if contents and contents[-1][-1:] != '\n': + contents.append('\n') + for line in contents: + yield line + + if self.show_shortlog and tagtype == 'commit': + # Only commit tags make sense to have rev-list operations + # performed on them + yield '\n' + if prevtag: + # Show changes since the previous release + revlist = read_git_output( + ['rev-list', '--pretty=short', '%s..%s' % (prevtag, self.new,)], + keepends=True, + ) + else: + # No previous tag, show all the changes since time + # began + revlist = read_git_output( + ['rev-list', '--pretty=short', '%s' % (self.new,)], + keepends=True, + ) + for line in read_git_lines(['shortlog'], input=revlist, keepends=True): + yield line + + yield LOGEND + yield '\n' + + def generate_create_summary(self, push): + """Called for the creation of an annotated tag.""" + + for line in self.expand_lines(TAG_CREATED_TEMPLATE): + yield line + + for line in self.describe_tag(push): + yield line + + def generate_update_summary(self, push): + """Called for the update of an annotated tag. + + This is probably a rare event and may not even be allowed.""" + + for line in self.expand_lines(TAG_UPDATED_TEMPLATE): + yield line + + for line in self.describe_tag(push): + yield line + + def generate_delete_summary(self, push): + """Called when a non-annotated reference is updated.""" + + for line in self.expand_lines(TAG_DELETED_TEMPLATE): + yield line + + yield self.expand(' tag was %(oldrev_short)s\n') + yield '\n' + + +class NonAnnotatedTagChange(ReferenceChange): + refname_type = 'tag' + + def __init__(self, environment, refname, short_refname, old, new, rev): + ReferenceChange.__init__( + self, environment, + refname=refname, short_refname=short_refname, + old=old, new=new, rev=rev, + ) + self.recipients = environment.get_refchange_recipients(self) + + def generate_create_summary(self, push): + """Called for the creation of an annotated tag.""" + + for line in self.expand_lines(TAG_CREATED_TEMPLATE): + yield line + + def generate_update_summary(self, push): + """Called when a non-annotated reference is updated.""" + + for line in self.expand_lines(TAG_UPDATED_TEMPLATE): + yield line + + def generate_delete_summary(self, push): + """Called when a non-annotated reference is updated.""" + + for line in self.expand_lines(TAG_DELETED_TEMPLATE): + yield line + + for line in ReferenceChange.generate_delete_summary(self, push): + yield line + + +class OtherReferenceChange(ReferenceChange): + refname_type = 'reference' + + def __init__(self, environment, refname, short_refname, old, new, rev): + # We use the full refname as short_refname, because otherwise + # the full name of the reference would not be obvious from the + # text of the email. + ReferenceChange.__init__( + self, environment, + refname=refname, short_refname=refname, + old=old, new=new, rev=rev, + ) + self.recipients = environment.get_refchange_recipients(self) + + +class Mailer(object): + """An object that can send emails.""" + + def send(self, lines, to_addrs): + """Send an email consisting of lines. + + lines must be an iterable over the lines constituting the + header and body of the email. to_addrs is a list of recipient + addresses (can be needed even if lines already contains a + "To:" field). It can be either a string (comma-separated list + of email addresses) or a Python list of individual email + addresses. + + """ + + raise NotImplementedError() + + +class SendMailer(Mailer): + """Send emails using 'sendmail -t'.""" + + SENDMAIL_CANDIDATES = [ + '/usr/sbin/sendmail', + '/usr/lib/sendmail', + ] + + @staticmethod + def find_sendmail(): + for path in SendMailer.SENDMAIL_CANDIDATES: + if os.access(path, os.X_OK): + return path + else: + raise ConfigurationException( + 'No sendmail executable found. ' + 'Try setting multimailhook.sendmailCommand.' + ) + + def __init__(self, command=None, envelopesender=None): + """Construct a SendMailer instance. + + command should be the command and arguments used to invoke + sendmail, as a list of strings. If an envelopesender is + provided, it will also be passed to the command, via '-f + envelopesender'.""" + + if command: + self.command = command[:] + else: + self.command = [self.find_sendmail(), '-t'] + + if envelopesender: + self.command.extend(['-f', envelopesender]) + + def send(self, lines, to_addrs): + try: + p = subprocess.Popen(self.command, stdin=subprocess.PIPE) + except OSError, e: + sys.stderr.write( + '*** Cannot execute command: %s\n' % ' '.join(self.command) + + '*** %s\n' % str(e) + + '*** Try setting multimailhook.mailer to "smtp"\n' + '*** to send emails without using the sendmail command.\n' + ) + sys.exit(1) + try: + p.stdin.writelines(lines) + except: + sys.stderr.write( + '*** Error while generating commit email\n' + '*** - mail sending aborted.\n' + ) + p.terminate() + raise + else: + p.stdin.close() + retcode = p.wait() + if retcode: + raise CommandError(self.command, retcode) + + +class SMTPMailer(Mailer): + """Send emails using Python's smtplib.""" + + def __init__(self, envelopesender, smtpserver): + if not envelopesender: + sys.stderr.write( + 'fatal: git_multimail: cannot use SMTPMailer without a sender address.\n' + 'please set either multimailhook.envelopeSender or user.email\n' + ) + sys.exit(1) + self.envelopesender = envelopesender + self.smtpserver = smtpserver + try: + self.smtp = smtplib.SMTP(self.smtpserver) + except Exception, e: + sys.stderr.write('*** Error establishing SMTP connection to %s***\n' % self.smtpserver) + sys.stderr.write('*** %s\n' % str(e)) + sys.exit(1) + + def __del__(self): + self.smtp.quit() + + def send(self, lines, to_addrs): + try: + msg = ''.join(lines) + # turn comma-separated list into Python list if needed. + if isinstance(to_addrs, basestring): + to_addrs = [email for (name, email) in getaddresses([to_addrs])] + self.smtp.sendmail(self.envelopesender, to_addrs, msg) + except Exception, e: + sys.stderr.write('*** Error sending email***\n') + sys.stderr.write('*** %s\n' % str(e)) + self.smtp.quit() + sys.exit(1) + + +class OutputMailer(Mailer): + """Write emails to an output stream, bracketed by lines of '=' characters. + + This is intended for debugging purposes.""" + + SEPARATOR = '=' * 75 + '\n' + + def __init__(self, f): + self.f = f + + def send(self, lines, to_addrs): + self.f.write(self.SEPARATOR) + self.f.writelines(lines) + self.f.write(self.SEPARATOR) + + +def get_git_dir(): + """Determine GIT_DIR. + + Determine GIT_DIR either from the GIT_DIR environment variable or + from the working directory, using Git's usual rules.""" + + try: + return read_git_output(['rev-parse', '--git-dir']) + except CommandError: + sys.stderr.write('fatal: git_multimail: not in a git directory\n') + sys.exit(1) + + +class Environment(object): + """Describes the environment in which the push is occurring. + + An Environment object encapsulates information about the local + environment. For example, it knows how to determine: + + * the name of the repository to which the push occurred + + * what user did the push + + * what users want to be informed about various types of changes. + + An Environment object is expected to have the following methods: + + get_repo_shortname() + + Return a short name for the repository, for display + purposes. + + get_repo_path() + + Return the absolute path to the Git repository. + + get_emailprefix() + + Return a string that will be prefixed to every email's + subject. + + get_pusher() + + Return the username of the person who pushed the changes. + This value is used in the email body to indicate who + pushed the change. + + get_pusher_email() (may return None) + + Return the email address of the person who pushed the + changes. The value should be a single RFC 2822 email + address as a string; e.g., "Joe User <user@example.com>" + if available, otherwise "user@example.com". If set, the + value is used as the Reply-To address for refchange + emails. If it is impossible to determine the pusher's + email, this attribute should be set to None (in which case + no Reply-To header will be output). + + get_sender() + + Return the address to be used as the 'From' email address + in the email envelope. + + get_fromaddr() + + Return the 'From' email address used in the email 'From:' + headers. (May be a full RFC 2822 email address like 'Joe + User <user@example.com>'.) + + get_administrator() + + Return the name and/or email of the repository + administrator. This value is used in the footer as the + person to whom requests to be removed from the + notification list should be sent. Ideally, it should + include a valid email address. + + get_reply_to_refchange() + get_reply_to_commit() + + Return the address to use in the email "Reply-To" header, + as a string. These can be an RFC 2822 email address, or + None to omit the "Reply-To" header. + get_reply_to_refchange() is used for refchange emails; + get_reply_to_commit() is used for individual commit + emails. + + They should also define the following attributes: + + announce_show_shortlog (bool) + + True iff announce emails should include a shortlog. + + refchange_showlog (bool) + + True iff refchanges emails should include a detailed log. + + diffopts (list of strings) + + The options that should be passed to 'git diff' for the + summary email. The value should be a list of strings + representing words to be passed to the command. + + logopts (list of strings) + + Analogous to diffopts, but contains options passed to + 'git log' when generating the detailed log for a set of + commits (see refchange_showlog) + + """ + + REPO_NAME_RE = re.compile(r'^(?P<name>.+?)(?:\.git)$') + + def __init__(self, osenv=None): + self.osenv = osenv or os.environ + self.announce_show_shortlog = False + self.maxcommitemails = 500 + self.diffopts = ['--stat', '--summary', '--find-copies-harder'] + self.logopts = [] + self.refchange_showlog = False + + self.COMPUTED_KEYS = [ + 'administrator', + 'charset', + 'emailprefix', + 'fromaddr', + 'pusher', + 'pusher_email', + 'repo_path', + 'repo_shortname', + 'sender', + ] + + self._values = None + + def get_repo_shortname(self): + """Use the last part of the repo path, with ".git" stripped off if present.""" + + basename = os.path.basename(os.path.abspath(self.get_repo_path())) + m = self.REPO_NAME_RE.match(basename) + if m: + return m.group('name') + else: + return basename + + def get_pusher(self): + raise NotImplementedError() + + def get_pusher_email(self): + return None + + def get_administrator(self): + return 'the administrator of this repository' + + def get_emailprefix(self): + return '' + + def get_repo_path(self): + if read_git_output(['rev-parse', '--is-bare-repository']) == 'true': + path = get_git_dir() + else: + path = read_git_output(['rev-parse', '--show-toplevel']) + return os.path.abspath(path) + + def get_charset(self): + return CHARSET + + def get_values(self): + """Return a dictionary {keyword : expansion} for this Environment. + + This method is called by Change._compute_values(). The keys + in the returned dictionary are available to be used in any of + the templates. The dictionary is created by calling + self.get_NAME() for each of the attributes named in + COMPUTED_KEYS and recording those that do not return None. + The return value is always a new dictionary.""" + + if self._values is None: + values = {} + + for key in self.COMPUTED_KEYS: + value = getattr(self, 'get_%s' % (key,))() + if value is not None: + values[key] = value + + self._values = values + + return self._values.copy() + + def get_refchange_recipients(self, refchange): + """Return the recipients for notifications about refchange. + + Return the list of email addresses to which notifications + about the specified ReferenceChange should be sent.""" + + raise NotImplementedError() + + def get_announce_recipients(self, annotated_tag_change): + """Return the recipients for notifications about annotated_tag_change. + + Return the list of email addresses to which notifications + about the specified AnnotatedTagChange should be sent.""" + + raise NotImplementedError() + + def get_reply_to_refchange(self, refchange): + return self.get_pusher_email() + + def get_revision_recipients(self, revision): + """Return the recipients for messages about revision. + + Return the list of email addresses to which notifications + about the specified Revision should be sent. This method + could be overridden, for example, to take into account the + contents of the revision when deciding whom to notify about + it. For example, there could be a scheme for users to express + interest in particular files or subdirectories, and only + receive notification emails for revisions that affecting those + files.""" + + raise NotImplementedError() + + def get_reply_to_commit(self, revision): + return revision.author + + def filter_body(self, lines): + """Filter the lines intended for an email body. + + lines is an iterable over the lines that would go into the + email body. Filter it (e.g., limit the number of lines, the + line length, character set, etc.), returning another iterable. + See FilterLinesEnvironmentMixin and MaxlinesEnvironmentMixin + for classes implementing this functionality.""" + + return lines + + +class ConfigEnvironmentMixin(Environment): + """A mixin that sets self.config to its constructor's config argument. + + This class's constructor consumes the "config" argument. + + Mixins that need to inspect the config should inherit from this + class (1) to make sure that "config" is still in the constructor + arguments with its own constructor runs and/or (2) to be sure that + self.config is set after construction.""" + + def __init__(self, config, **kw): + super(ConfigEnvironmentMixin, self).__init__(**kw) + self.config = config + + +class ConfigOptionsEnvironmentMixin(ConfigEnvironmentMixin): + """An Environment that reads most of its information from "git config".""" + + def __init__(self, config, **kw): + super(ConfigOptionsEnvironmentMixin, self).__init__( + config=config, **kw + ) + + self.announce_show_shortlog = config.get_bool( + 'announceshortlog', default=self.announce_show_shortlog + ) + + self.refchange_showlog = config.get_bool( + 'refchangeshowlog', default=self.refchange_showlog + ) + + maxcommitemails = config.get('maxcommitemails') + if maxcommitemails is not None: + try: + self.maxcommitemails = int(maxcommitemails) + except ValueError: + sys.stderr.write( + '*** Malformed value for multimailhook.maxCommitEmails: %s\n' % maxcommitemails + + '*** Expected a number. Ignoring.\n' + ) + + diffopts = config.get('diffopts') + if diffopts is not None: + self.diffopts = shlex.split(diffopts) + + logopts = config.get('logopts') + if logopts is not None: + self.logopts = shlex.split(logopts) + + reply_to = config.get('replyTo') + self.__reply_to_refchange = config.get('replyToRefchange', default=reply_to) + if ( + self.__reply_to_refchange is not None + and self.__reply_to_refchange.lower() == 'author' + ): + raise ConfigurationException( + '"author" is not an allowed setting for replyToRefchange' + ) + self.__reply_to_commit = config.get('replyToCommit', default=reply_to) + + def get_administrator(self): + return ( + self.config.get('administrator') + or self.get_sender() + or super(ConfigOptionsEnvironmentMixin, self).get_administrator() + ) + + def get_repo_shortname(self): + return ( + self.config.get('reponame') + or super(ConfigOptionsEnvironmentMixin, self).get_repo_shortname() + ) + + def get_emailprefix(self): + emailprefix = self.config.get('emailprefix') + if emailprefix and emailprefix.strip(): + return emailprefix.strip() + ' ' + else: + return '[%s] ' % (self.get_repo_shortname(),) + + def get_sender(self): + return self.config.get('envelopesender') + + def get_fromaddr(self): + fromaddr = self.config.get('from') + if fromaddr: + return fromaddr + else: + config = Config('user') + fromname = config.get('name', default='') + fromemail = config.get('email', default='') + if fromemail: + return formataddr([fromname, fromemail]) + else: + return self.get_sender() + + def get_reply_to_refchange(self, refchange): + if self.__reply_to_refchange is None: + return super(ConfigOptionsEnvironmentMixin, self).get_reply_to_refchange(refchange) + elif self.__reply_to_refchange.lower() == 'pusher': + return self.get_pusher_email() + elif self.__reply_to_refchange.lower() == 'none': + return None + else: + return self.__reply_to_refchange + + def get_reply_to_commit(self, revision): + if self.__reply_to_commit is None: + return super(ConfigOptionsEnvironmentMixin, self).get_reply_to_commit(revision) + elif self.__reply_to_commit.lower() == 'author': + return revision.get_author() + elif self.__reply_to_commit.lower() == 'pusher': + return self.get_pusher_email() + elif self.__reply_to_commit.lower() == 'none': + return None + else: + return self.__reply_to_commit + + +class FilterLinesEnvironmentMixin(Environment): + """Handle encoding and maximum line length of body lines. + + emailmaxlinelength (int or None) + + The maximum length of any single line in the email body. + Longer lines are truncated at that length with ' [...]' + appended. + + strict_utf8 (bool) + + If this field is set to True, then the email body text is + expected to be UTF-8. Any invalid characters are + converted to U+FFFD, the Unicode replacement character + (encoded as UTF-8, of course). + + """ + + def __init__(self, strict_utf8=True, emailmaxlinelength=500, **kw): + super(FilterLinesEnvironmentMixin, self).__init__(**kw) + self.__strict_utf8 = strict_utf8 + self.__emailmaxlinelength = emailmaxlinelength + + def filter_body(self, lines): + lines = super(FilterLinesEnvironmentMixin, self).filter_body(lines) + if self.__strict_utf8: + lines = (line.decode(ENCODING, 'replace') for line in lines) + # Limit the line length in Unicode-space to avoid + # splitting characters: + if self.__emailmaxlinelength: + lines = limit_linelength(lines, self.__emailmaxlinelength) + lines = (line.encode(ENCODING, 'replace') for line in lines) + elif self.__emailmaxlinelength: + lines = limit_linelength(lines, self.__emailmaxlinelength) + + return lines + + +class ConfigFilterLinesEnvironmentMixin( + ConfigEnvironmentMixin, + FilterLinesEnvironmentMixin, + ): + """Handle encoding and maximum line length based on config.""" + + def __init__(self, config, **kw): + strict_utf8 = config.get_bool('emailstrictutf8', default=None) + if strict_utf8 is not None: + kw['strict_utf8'] = strict_utf8 + + emailmaxlinelength = config.get('emailmaxlinelength') + if emailmaxlinelength is not None: + kw['emailmaxlinelength'] = int(emailmaxlinelength) + + super(ConfigFilterLinesEnvironmentMixin, self).__init__( + config=config, **kw + ) + + +class MaxlinesEnvironmentMixin(Environment): + """Limit the email body to a specified number of lines.""" + + def __init__(self, emailmaxlines, **kw): + super(MaxlinesEnvironmentMixin, self).__init__(**kw) + self.__emailmaxlines = emailmaxlines + + def filter_body(self, lines): + lines = super(MaxlinesEnvironmentMixin, self).filter_body(lines) + if self.__emailmaxlines: + lines = limit_lines(lines, self.__emailmaxlines) + return lines + + +class ConfigMaxlinesEnvironmentMixin( + ConfigEnvironmentMixin, + MaxlinesEnvironmentMixin, + ): + """Limit the email body to the number of lines specified in config.""" + + def __init__(self, config, **kw): + emailmaxlines = int(config.get('emailmaxlines', default='0')) + super(ConfigMaxlinesEnvironmentMixin, self).__init__( + config=config, + emailmaxlines=emailmaxlines, + **kw + ) + + +class PusherDomainEnvironmentMixin(ConfigEnvironmentMixin): + """Deduce pusher_email from pusher by appending an emaildomain.""" + + def __init__(self, **kw): + super(PusherDomainEnvironmentMixin, self).__init__(**kw) + self.__emaildomain = self.config.get('emaildomain') + + def get_pusher_email(self): + if self.__emaildomain: + # Derive the pusher's full email address in the default way: + return '%s@%s' % (self.get_pusher(), self.__emaildomain) + else: + return super(PusherDomainEnvironmentMixin, self).get_pusher_email() + + +class StaticRecipientsEnvironmentMixin(Environment): + """Set recipients statically based on constructor parameters.""" + + def __init__( + self, + refchange_recipients, announce_recipients, revision_recipients, + **kw + ): + super(StaticRecipientsEnvironmentMixin, self).__init__(**kw) + + # The recipients for various types of notification emails, as + # RFC 2822 email addresses separated by commas (or the empty + # string if no recipients are configured). Although there is + # a mechanism to choose the recipient lists based on on the + # actual *contents* of the change being reported, we only + # choose based on the *type* of the change. Therefore we can + # compute them once and for all: + self.__refchange_recipients = refchange_recipients + self.__announce_recipients = announce_recipients + self.__revision_recipients = revision_recipients + + def get_refchange_recipients(self, refchange): + return self.__refchange_recipients + + def get_announce_recipients(self, annotated_tag_change): + return self.__announce_recipients + + def get_revision_recipients(self, revision): + return self.__revision_recipients + + +class ConfigRecipientsEnvironmentMixin( + ConfigEnvironmentMixin, + StaticRecipientsEnvironmentMixin + ): + """Determine recipients statically based on config.""" + + def __init__(self, config, **kw): + super(ConfigRecipientsEnvironmentMixin, self).__init__( + config=config, + refchange_recipients=self._get_recipients( + config, 'refchangelist', 'mailinglist', + ), + announce_recipients=self._get_recipients( + config, 'announcelist', 'refchangelist', 'mailinglist', + ), + revision_recipients=self._get_recipients( + config, 'commitlist', 'mailinglist', + ), + **kw + ) + + def _get_recipients(self, config, *names): + """Return the recipients for a particular type of message. + + Return the list of email addresses to which a particular type + of notification email should be sent, by looking at the config + value for "multimailhook.$name" for each of names. Use the + value from the first name that is configured. The return + value is a (possibly empty) string containing RFC 2822 email + addresses separated by commas. If no configuration could be + found, raise a ConfigurationException.""" + + for name in names: + retval = config.get_recipients(name) + if retval is not None: + return retval + if len(names) == 1: + hint = 'Please set "%s.%s"' % (config.section, name) + else: + hint = ( + 'Please set one of the following:\n "%s"' + % ('"\n "'.join('%s.%s' % (config.section, name) for name in names)) + ) + + raise ConfigurationException( + 'The list of recipients for %s is not configured.\n%s' % (names[0], hint) + ) + + +class ProjectdescEnvironmentMixin(Environment): + """Make a "projectdesc" value available for templates. + + By default, it is set to the first line of $GIT_DIR/description + (if that file is present and appears to be set meaningfully).""" + + def __init__(self, **kw): + super(ProjectdescEnvironmentMixin, self).__init__(**kw) + self.COMPUTED_KEYS += ['projectdesc'] + + def get_projectdesc(self): + """Return a one-line descripition of the project.""" + + git_dir = get_git_dir() + try: + projectdesc = open(os.path.join(git_dir, 'description')).readline().strip() + if projectdesc and not projectdesc.startswith('Unnamed repository'): + return projectdesc + except IOError: + pass + + return 'UNNAMED PROJECT' + + +class GenericEnvironmentMixin(Environment): + def get_pusher(self): + return self.osenv.get('USER', 'unknown user') + + +class GenericEnvironment( + ProjectdescEnvironmentMixin, + ConfigMaxlinesEnvironmentMixin, + ConfigFilterLinesEnvironmentMixin, + ConfigRecipientsEnvironmentMixin, + PusherDomainEnvironmentMixin, + ConfigOptionsEnvironmentMixin, + GenericEnvironmentMixin, + Environment, + ): + pass + + +class GitoliteEnvironmentMixin(Environment): + def get_repo_shortname(self): + # The gitolite environment variable $GL_REPO is a pretty good + # repo_shortname (though it's probably not as good as a value + # the user might have explicitly put in his config). + return ( + self.osenv.get('GL_REPO', None) + or super(GitoliteEnvironmentMixin, self).get_repo_shortname() + ) + + def get_pusher(self): + return self.osenv.get('GL_USER', 'unknown user') + + +class GitoliteEnvironment( + ProjectdescEnvironmentMixin, + ConfigMaxlinesEnvironmentMixin, + ConfigFilterLinesEnvironmentMixin, + ConfigRecipientsEnvironmentMixin, + PusherDomainEnvironmentMixin, + ConfigOptionsEnvironmentMixin, + GitoliteEnvironmentMixin, + Environment, + ): + pass + + +class Push(object): + """Represent an entire push (i.e., a group of ReferenceChanges). + + It is easy to figure out what commits were added to a *branch* by + a Reference change: + + git rev-list change.old..change.new + + or removed from a *branch*: + + git rev-list change.new..change.old + + But it is not quite so trivial to determine which entirely new + commits were added to the *repository* by a push and which old + commits were discarded by a push. A big part of the job of this + class is to figure out these things, and to make sure that new + commits are only detailed once even if they were added to multiple + references. + + The first step is to determine the "other" references--those + unaffected by the current push. They are computed by + Push._compute_other_ref_sha1s() by listing all references then + removing any affected by this push. + + The commits contained in the repository before this push were + + git rev-list other1 other2 other3 ... change1.old change2.old ... + + Where "changeN.old" is the old value of one of the references + affected by this push. + + The commits contained in the repository after this push are + + git rev-list other1 other2 other3 ... change1.new change2.new ... + + The commits added by this push are the difference between these + two sets, which can be written + + git rev-list \ + ^other1 ^other2 ... \ + ^change1.old ^change2.old ... \ + change1.new change2.new ... + + The commits removed by this push can be computed by + + git rev-list \ + ^other1 ^other2 ... \ + ^change1.new ^change2.new ... \ + change1.old change2.old ... + + The last point is that it is possible that other pushes are + occurring simultaneously to this one, so reference values can + change at any time. It is impossible to eliminate all race + conditions, but we reduce the window of time during which problems + can occur by translating reference names to SHA1s as soon as + possible and working with SHA1s thereafter (because SHA1s are + immutable).""" + + # A map {(changeclass, changetype) : integer} specifying the order + # that reference changes will be processed if multiple reference + # changes are included in a single push. The order is significant + # mostly because new commit notifications are threaded together + # with the first reference change that includes the commit. The + # following order thus causes commits to be grouped with branch + # changes (as opposed to tag changes) if possible. + SORT_ORDER = dict( + (value, i) for (i, value) in enumerate([ + (BranchChange, 'update'), + (BranchChange, 'create'), + (AnnotatedTagChange, 'update'), + (AnnotatedTagChange, 'create'), + (NonAnnotatedTagChange, 'update'), + (NonAnnotatedTagChange, 'create'), + (BranchChange, 'delete'), + (AnnotatedTagChange, 'delete'), + (NonAnnotatedTagChange, 'delete'), + (OtherReferenceChange, 'update'), + (OtherReferenceChange, 'create'), + (OtherReferenceChange, 'delete'), + ]) + ) + + def __init__(self, changes): + self.changes = sorted(changes, key=self._sort_key) + + # The SHA-1s of commits referred to by references unaffected + # by this push: + other_ref_sha1s = self._compute_other_ref_sha1s() + + self._old_rev_exclusion_spec = self._compute_rev_exclusion_spec( + other_ref_sha1s.union( + change.old.sha1 + for change in self.changes + if change.old.type in ['commit', 'tag'] + ) + ) + self._new_rev_exclusion_spec = self._compute_rev_exclusion_spec( + other_ref_sha1s.union( + change.new.sha1 + for change in self.changes + if change.new.type in ['commit', 'tag'] + ) + ) + + @classmethod + def _sort_key(klass, change): + return (klass.SORT_ORDER[change.__class__, change.change_type], change.refname,) + + def _compute_other_ref_sha1s(self): + """Return the GitObjects referred to by references unaffected by this push.""" + + # The refnames being changed by this push: + updated_refs = set( + change.refname + for change in self.changes + ) + + # The SHA-1s of commits referred to by all references in this + # repository *except* updated_refs: + sha1s = set() + fmt = ( + '%(objectname) %(objecttype) %(refname)\n' + '%(*objectname) %(*objecttype) %(refname)' + ) + for line in read_git_lines(['for-each-ref', '--format=%s' % (fmt,)]): + (sha1, type, name) = line.split(' ', 2) + if sha1 and type == 'commit' and name not in updated_refs: + sha1s.add(sha1) + + return sha1s + + def _compute_rev_exclusion_spec(self, sha1s): + """Return an exclusion specification for 'git rev-list'. + + git_objects is an iterable over GitObject instances. Return a + string that can be passed to the standard input of 'git + rev-list --stdin' to exclude all of the commits referred to by + git_objects.""" + + return ''.join( + ['^%s\n' % (sha1,) for sha1 in sorted(sha1s)] + ) + + def get_new_commits(self, reference_change=None): + """Return a list of commits added by this push. + + Return a list of the object names of commits that were added + by the part of this push represented by reference_change. If + reference_change is None, then return a list of *all* commits + added by this push.""" + + if not reference_change: + new_revs = sorted( + change.new.sha1 + for change in self.changes + if change.new + ) + elif not reference_change.new.commit_sha1: + return [] + else: + new_revs = [reference_change.new.commit_sha1] + + cmd = ['rev-list', '--stdin'] + new_revs + return read_git_lines(cmd, input=self._old_rev_exclusion_spec) + + def get_discarded_commits(self, reference_change): + """Return a list of commits discarded by this push. + + Return a list of the object names of commits that were + entirely discarded from the repository by the part of this + push represented by reference_change.""" + + if not reference_change.old.commit_sha1: + return [] + else: + old_revs = [reference_change.old.commit_sha1] + + cmd = ['rev-list', '--stdin'] + old_revs + return read_git_lines(cmd, input=self._new_rev_exclusion_spec) + + def send_emails(self, mailer, body_filter=None): + """Use send all of the notification emails needed for this push. + + Use send all of the notification emails (including reference + change emails and commit emails) needed for this push. Send + the emails using mailer. If body_filter is not None, then use + it to filter the lines that are intended for the email + body.""" + + # The sha1s of commits that were introduced by this push. + # They will be removed from this set as they are processed, to + # guarantee that one (and only one) email is generated for + # each new commit. + unhandled_sha1s = set(self.get_new_commits()) + for change in self.changes: + # Check if we've got anyone to send to + if not change.recipients: + sys.stderr.write( + '*** no recipients configured so no email will be sent\n' + '*** for %r update %s->%s\n' + % (change.refname, change.old.sha1, change.new.sha1,) + ) + else: + sys.stderr.write('Sending notification emails to: %s\n' % (change.recipients,)) + mailer.send(change.generate_email(self, body_filter), change.recipients) + + sha1s = [] + for sha1 in reversed(list(self.get_new_commits(change))): + if sha1 in unhandled_sha1s: + sha1s.append(sha1) + unhandled_sha1s.remove(sha1) + + max_emails = change.environment.maxcommitemails + if max_emails and len(sha1s) > max_emails: + sys.stderr.write( + '*** Too many new commits (%d), not sending commit emails.\n' % len(sha1s) + + '*** Try setting multimailhook.maxCommitEmails to a greater value\n' + + '*** Currently, multimailhook.maxCommitEmails=%d\n' % max_emails + ) + return + + for (num, sha1) in enumerate(sha1s): + rev = Revision(change, GitObject(sha1), num=num+1, tot=len(sha1s)) + if rev.recipients: + mailer.send(rev.generate_email(self, body_filter), rev.recipients) + + # Consistency check: + if unhandled_sha1s: + sys.stderr.write( + 'ERROR: No emails were sent for the following new commits:\n' + ' %s\n' + % ('\n '.join(sorted(unhandled_sha1s)),) + ) + + +def run_as_post_receive_hook(environment, mailer): + changes = [] + for line in sys.stdin: + (oldrev, newrev, refname) = line.strip().split(' ', 2) + changes.append( + ReferenceChange.create(environment, oldrev, newrev, refname) + ) + push = Push(changes) + push.send_emails(mailer, body_filter=environment.filter_body) + + +def run_as_update_hook(environment, mailer, refname, oldrev, newrev): + changes = [ + ReferenceChange.create( + environment, + read_git_output(['rev-parse', '--verify', oldrev]), + read_git_output(['rev-parse', '--verify', newrev]), + refname, + ), + ] + push = Push(changes) + push.send_emails(mailer, body_filter=environment.filter_body) + + +def choose_mailer(config, environment): + mailer = config.get('mailer', default='sendmail') + + if mailer == 'smtp': + smtpserver = config.get('smtpserver', default='localhost') + mailer = SMTPMailer( + envelopesender=(environment.get_sender() or environment.get_fromaddr()), + smtpserver=smtpserver, + ) + elif mailer == 'sendmail': + command = config.get('sendmailcommand') + if command: + command = shlex.split(command) + mailer = SendMailer(command=command, envelopesender=environment.get_sender()) + else: + sys.stderr.write( + 'fatal: multimailhook.mailer is set to an incorrect value: "%s"\n' % mailer + + 'please use one of "smtp" or "sendmail".\n' + ) + sys.exit(1) + return mailer + + +KNOWN_ENVIRONMENTS = { + 'generic' : GenericEnvironmentMixin, + 'gitolite' : GitoliteEnvironmentMixin, + } + + +def choose_environment(config, osenv=None, env=None, recipients=None): + if not osenv: + osenv = os.environ + + environment_mixins = [ + ProjectdescEnvironmentMixin, + ConfigMaxlinesEnvironmentMixin, + ConfigFilterLinesEnvironmentMixin, + PusherDomainEnvironmentMixin, + ConfigOptionsEnvironmentMixin, + ] + environment_kw = { + 'osenv' : osenv, + 'config' : config, + } + + if not env: + env = config.get('environment') + + if not env: + if 'GL_USER' in osenv and 'GL_REPO' in osenv: + env = 'gitolite' + else: + env = 'generic' + + environment_mixins.append(KNOWN_ENVIRONMENTS[env]) + + if recipients: + environment_mixins.insert(0, StaticRecipientsEnvironmentMixin) + environment_kw['refchange_recipients'] = recipients + environment_kw['announce_recipients'] = recipients + environment_kw['revision_recipients'] = recipients + else: + environment_mixins.insert(0, ConfigRecipientsEnvironmentMixin) + + environment_klass = type( + 'EffectiveEnvironment', + tuple(environment_mixins) + (Environment,), + {}, + ) + return environment_klass(**environment_kw) + + +def main(args): + parser = optparse.OptionParser( + description=__doc__, + usage='%prog [OPTIONS]\n or: %prog [OPTIONS] REFNAME OLDREV NEWREV', + ) + + parser.add_option( + '--environment', '--env', action='store', type='choice', + choices=['generic', 'gitolite'], default=None, + help=( + 'Choose type of environment is in use. Default is taken from ' + 'multimailhook.environment if set; otherwise "generic".' + ), + ) + parser.add_option( + '--stdout', action='store_true', default=False, + help='Output emails to stdout rather than sending them.', + ) + parser.add_option( + '--recipients', action='store', default=None, + help='Set list of email recipients for all types of emails.', + ) + parser.add_option( + '--show-env', action='store_true', default=False, + help=( + 'Write to stderr the values determined for the environment ' + '(intended for debugging purposes).' + ), + ) + + (options, args) = parser.parse_args(args) + + config = Config('multimailhook') + + try: + environment = choose_environment( + config, osenv=os.environ, + env=options.environment, + recipients=options.recipients, + ) + + if options.show_env: + sys.stderr.write('Environment values:\n') + for (k,v) in sorted(environment.get_values().items()): + sys.stderr.write(' %s : %r\n' % (k,v)) + sys.stderr.write('\n') + + if options.stdout: + mailer = OutputMailer(sys.stdout) + else: + mailer = choose_mailer(config, environment) + + # Dual mode: if arguments were specified on the command line, run + # like an update hook; otherwise, run as a post-receive hook. + if args: + if len(args) != 3: + parser.error('Need zero or three non-option arguments') + (refname, oldrev, newrev) = args + run_as_update_hook(environment, mailer, refname, oldrev, newrev) + else: + run_as_post_receive_hook(environment, mailer) + except ConfigurationException, e: + sys.exit(str(e)) + + +if __name__ == '__main__': + main(sys.argv[1:]) diff --git a/contrib/hooks/multimail/migrate-mailhook-config b/contrib/hooks/multimail/migrate-mailhook-config new file mode 100755 index 0000000000..04eeaac413 --- /dev/null +++ b/contrib/hooks/multimail/migrate-mailhook-config @@ -0,0 +1,269 @@ +#! /usr/bin/env python2 + +"""Migrate a post-receive-email configuration to be usable with git_multimail.py. + +See README.migrate-from-post-receive-email for more information. + +""" + +import sys +import optparse + +from git_multimail import CommandError +from git_multimail import Config +from git_multimail import read_output + + +OLD_NAMES = [ + 'mailinglist', + 'announcelist', + 'envelopesender', + 'emailprefix', + 'showrev', + 'emailmaxlines', + 'diffopts', + ] + +NEW_NAMES = [ + 'environment', + 'reponame', + 'mailinglist', + 'refchangelist', + 'commitlist', + 'announcelist', + 'announceshortlog', + 'envelopesender', + 'administrator', + 'emailprefix', + 'emailmaxlines', + 'diffopts', + 'emaildomain', + ] + + +INFO = """\ + +SUCCESS! + +Your post-receive-email configuration has been converted to +git-multimail format. Please see README and +README.migrate-from-post-receive-email to learn about other +git-multimail configuration possibilities. + +For example, git-multimail has the following new options with no +equivalent in post-receive-email. You might want to read about them +to see if they would be useful in your situation: + +""" + + +def _check_old_config_exists(old): + """Check that at least one old configuration value is set.""" + + for name in OLD_NAMES: + if old.has_key(name): + return True + + return False + + +def _check_new_config_clear(new): + """Check that none of the new configuration names are set.""" + + retval = True + for name in NEW_NAMES: + if new.has_key(name): + if retval: + sys.stderr.write('INFO: The following configuration values already exist:\n\n') + sys.stderr.write(' "%s.%s"\n' % (new.section, name)) + retval = False + + return retval + + +def erase_values(config, names): + for name in names: + if config.has_key(name): + try: + sys.stderr.write('...unsetting "%s.%s"\n' % (config.section, name)) + config.unset_all(name) + except CommandError: + sys.stderr.write( + '\nWARNING: could not unset "%s.%s". ' + 'Perhaps it is not set at the --local level?\n\n' + % (config.section, name) + ) + + +def is_section_empty(section, local): + """Return True iff the specified configuration section is empty. + + Iff local is True, use the --local option when invoking 'git + config'.""" + + if local: + local_option = ['--local'] + else: + local_option = [] + + try: + read_output( + ['git', 'config'] + + local_option + + ['--get-regexp', '^%s\.' % (section,)] + ) + except CommandError, e: + if e.retcode == 1: + # This means that no settings were found. + return True + else: + raise + else: + return False + + +def remove_section_if_empty(section): + """If the specified configuration section is empty, delete it.""" + + try: + empty = is_section_empty(section, local=True) + except CommandError: + # Older versions of git do not support the --local option, so + # if the first attempt fails, try without --local. + try: + empty = is_section_empty(section, local=False) + except CommandError: + sys.stderr.write( + '\nINFO: If configuration section "%s.*" is empty, you might want ' + 'to delete it.\n\n' + % (section,) + ) + return + + if empty: + sys.stderr.write('...removing section "%s.*"\n' % (section,)) + read_output(['git', 'config', '--remove-section', section]) + else: + sys.stderr.write( + '\nINFO: Configuration section "%s.*" still has contents. ' + 'It will not be deleted.\n\n' + % (section,) + ) + + +def migrate_config(strict=False, retain=False, overwrite=False): + old = Config('hooks') + new = Config('multimailhook') + if not _check_old_config_exists(old): + sys.exit( + 'Your repository has no post-receive-email configuration. ' + 'Nothing to do.' + ) + if not _check_new_config_clear(new): + if overwrite: + sys.stderr.write('\nWARNING: Erasing the above values...\n\n') + erase_values(new, NEW_NAMES) + else: + sys.exit( + '\nERROR: Refusing to overwrite existing values. Use the --overwrite\n' + 'option to continue anyway.' + ) + + name = 'showrev' + if old.has_key(name): + msg = 'git-multimail does not support "%s.%s"' % (old.section, name,) + if strict: + sys.exit( + 'ERROR: %s.\n' + 'Please unset that value then try again, or run without --strict.' + % (msg,) + ) + else: + sys.stderr.write('\nWARNING: %s (ignoring).\n\n' % (msg,)) + + for name in ['mailinglist', 'announcelist']: + if old.has_key(name): + sys.stderr.write( + '...copying "%s.%s" to "%s.%s"\n' % (old.section, name, new.section, name) + ) + new.set_recipients(name, old.get_recipients(name)) + + if strict: + sys.stderr.write( + '...setting "%s.commitlist" to the empty string\n' % (new.section,) + ) + new.set_recipients('commitlist', '') + sys.stderr.write( + '...setting "%s.announceshortlog" to "true"\n' % (new.section,) + ) + new.set('announceshortlog', 'true') + + for name in ['envelopesender', 'emailmaxlines', 'diffopts']: + if old.has_key(name): + sys.stderr.write( + '...copying "%s.%s" to "%s.%s"\n' % (old.section, name, new.section, name) + ) + new.set(name, old.get(name)) + + name = 'emailprefix' + if old.has_key(name): + sys.stderr.write( + '...copying "%s.%s" to "%s.%s"\n' % (old.section, name, new.section, name) + ) + new.set(name, old.get(name)) + elif strict: + sys.stderr.write( + '...setting "%s.%s" to "[SCM]" to preserve old subject lines\n' + % (new.section, name) + ) + new.set(name, '[SCM]') + + if not retain: + erase_values(old, OLD_NAMES) + remove_section_if_empty(old.section) + + sys.stderr.write(INFO) + for name in NEW_NAMES: + if name not in OLD_NAMES: + sys.stderr.write(' "%s.%s"\n' % (new.section, name,)) + sys.stderr.write('\n') + + +def main(args): + parser = optparse.OptionParser( + description=__doc__, + usage='%prog [OPTIONS]', + ) + + parser.add_option( + '--strict', action='store_true', default=False, + help=( + 'Slavishly configure git-multimail as closely as possible to ' + 'the post-receive-email configuration. Default is to turn ' + 'on some new features that have no equivalent in post-receive-email.' + ), + ) + parser.add_option( + '--retain', action='store_true', default=False, + help=( + 'Retain the post-receive-email configuration values. ' + 'Default is to delete them after the new values are set.' + ), + ) + parser.add_option( + '--overwrite', action='store_true', default=False, + help=( + 'Overwrite any existing git-multimail configuration settings. ' + 'Default is to abort if such settings already exist.' + ), + ) + + (options, args) = parser.parse_args(args) + + if args: + parser.error('Unexpected arguments: %s' % (' '.join(args),)) + + migrate_config(strict=options.strict, retain=options.retain, overwrite=options.overwrite) + + +main(sys.argv[1:]) diff --git a/contrib/hooks/multimail/post-receive b/contrib/hooks/multimail/post-receive new file mode 100755 index 0000000000..93ebb437d1 --- /dev/null +++ b/contrib/hooks/multimail/post-receive @@ -0,0 +1,90 @@ +#! /usr/bin/env python2 + +"""Example post-receive hook based on git-multimail. + +This script is a simple example of a post-receive hook implemented +using git_multimail.py as a Python module. It is intended to be +customized before use; see the comments in the script to help you get +started. + +It is possible to use git_multimail.py itself as a post-receive or +update hook, configured via git config settings and/or command-line +parameters. But for more flexibility, it can also be imported as a +Python module by a custom post-receive script as done here. The +latter has the following advantages: + +* The tool's behavior can be customized using arbitrary Python code, + without having to edit git_multimail.py. + +* Configuration settings can be read from other sources; for example, + user names and email addresses could be read from LDAP or from a + database. Or the settings can even be hardcoded in the importing + Python script, if this is preferred. + +This script is a very basic example of how to use git_multimail.py as +a module. The comments below explain some of the points at which the +script's behavior could be changed or customized. + +""" + +import sys +import os + +# If necessary, add the path to the directory containing +# git_multimail.py to the Python path as follows. (This is not +# necessary if git_multimail.py is in the same directory as this +# script): + +#LIBDIR = 'path/to/directory/containing/module' +#sys.path.insert(0, LIBDIR) + +import git_multimail + + +# It is possible to modify the output templates here; e.g.: + +#git_multimail.FOOTER_TEMPLATE = """\ +# +#-- \n\ +#This email was generated by the wonderful git-multimail tool. +#""" + + +# Specify which "git config" section contains the configuration for +# git-multimail: +config = git_multimail.Config('multimailhook') + + +# Select the type of environment: +environment = git_multimail.GenericEnvironment(config=config) +#environment = git_multimail.GitoliteEnvironment(config=config) + + +# Choose the method of sending emails based on the git config: +mailer = git_multimail.choose_mailer(config, environment) + +# Alternatively, you may hardcode the mailer using code like one of +# the following: + +# Use "/usr/sbin/sendmail -t" to send emails. The envelopesender +# argument is optional: +#mailer = git_multimail.SendMailer( +# command=['/usr/sbin/sendmail', '-t'], +# envelopesender='git-repo@example.com', +# ) + +# Use Python's smtplib to send emails. Both arguments are required. +#mailer = git_multimail.SMTPMailer( +# envelopesender='git-repo@example.com', +# # The smtpserver argument can also include a port number; e.g., +# # smtpserver='mail.example.com:25' +# smtpserver='mail.example.com', +# ) + +# OutputMailer is intended only for testing; it writes the emails to +# the specified file stream. +#mailer = git_multimail.OutputMailer(sys.stdout) + + +# Read changes from stdin and send notification emails: +git_multimail.run_as_post_receive_hook(environment, mailer) diff --git a/contrib/hooks/post-receive-email b/contrib/hooks/post-receive-email index 0e5b72d7f1..153115029d 100755 --- a/contrib/hooks/post-receive-email +++ b/contrib/hooks/post-receive-email @@ -2,10 +2,19 @@ # # Copyright (c) 2007 Andy Parkins # -# An example hook script to mail out commit update information. This hook -# sends emails listing new revisions to the repository introduced by the -# change being reported. The rule is that (for branch updates) each commit -# will appear on one email and one email only. +# An example hook script to mail out commit update information. +# +# NOTE: This script is no longer under active development. There +# is another script, git-multimail, which is more capable and +# configurable and is largely backwards-compatible with this script; +# please see "contrib/hooks/multimail/". For instructions on how to +# migrate from post-receive-email to git-multimail, please see +# "README.migrate-from-post-receive-email" in that directory. +# +# This hook sends emails listing new revisions to the repository +# introduced by the change being reported. The rule is that (for +# branch updates) each commit will appear on one email and one email +# only. # # This hook is stored in the contrib/hooks directory. Your distribution # will have put this somewhere standard. You should make this script diff --git a/contrib/mw-to-git/.gitignore b/contrib/mw-to-git/.gitignore index b9196555e5..ae545b013d 100644 --- a/contrib/mw-to-git/.gitignore +++ b/contrib/mw-to-git/.gitignore @@ -1 +1,2 @@ git-remote-mediawiki +git-mw diff --git a/contrib/mw-to-git/Git/Mediawiki.pm b/contrib/mw-to-git/Git/Mediawiki.pm new file mode 100644 index 0000000000..d13c4dfa7d --- /dev/null +++ b/contrib/mw-to-git/Git/Mediawiki.pm @@ -0,0 +1,100 @@ +package Git::Mediawiki; + +use 5.008; +use strict; +use Git; + +BEGIN { + +our ($VERSION, @ISA, @EXPORT, @EXPORT_OK); + +# Totally unstable API. +$VERSION = '0.01'; + +require Exporter; + +@ISA = qw(Exporter); + +@EXPORT = (); + +# Methods which can be called as standalone functions as well: +@EXPORT_OK = qw(clean_filename smudge_filename connect_maybe + EMPTY HTTP_CODE_OK HTTP_CODE_PAGE_NOT_FOUND); +} + +# Mediawiki filenames can contain forward slashes. This variable decides by which pattern they should be replaced +use constant SLASH_REPLACEMENT => '%2F'; + +# Used to test for empty strings +use constant EMPTY => q{}; + +# HTTP codes +use constant HTTP_CODE_OK => 200; +use constant HTTP_CODE_PAGE_NOT_FOUND => 404; + +sub clean_filename { + my $filename = shift; + $filename =~ s{@{[SLASH_REPLACEMENT]}}{/}g; + # [, ], |, {, and } are forbidden by MediaWiki, even URL-encoded. + # Do a variant of URL-encoding, i.e. looks like URL-encoding, + # but with _ added to prevent MediaWiki from thinking this is + # an actual special character. + $filename =~ s/[\[\]\{\}\|]/sprintf("_%%_%x", ord($&))/ge; + # If we use the uri escape before + # we should unescape here, before anything + + return $filename; +} + +sub smudge_filename { + my $filename = shift; + $filename =~ s{/}{@{[SLASH_REPLACEMENT]}}g; + $filename =~ s/ /_/g; + # Decode forbidden characters encoded in clean_filename + $filename =~ s/_%_([0-9a-fA-F][0-9a-fA-F])/sprintf('%c', hex($1))/ge; + return $filename; +} + +sub connect_maybe { + my $wiki = shift; + if ($wiki) { + return $wiki; + } + + my $remote_name = shift; + my $remote_url = shift; + my ($wiki_login, $wiki_password, $wiki_domain); + + $wiki_login = Git::config("remote.${remote_name}.mwLogin"); + $wiki_password = Git::config("remote.${remote_name}.mwPassword"); + $wiki_domain = Git::config("remote.${remote_name}.mwDomain"); + + $wiki = MediaWiki::API->new; + $wiki->{config}->{api_url} = "${remote_url}/api.php"; + if ($wiki_login) { + my %credential = ( + 'url' => $remote_url, + 'username' => $wiki_login, + 'password' => $wiki_password + ); + Git::credential(\%credential); + my $request = {lgname => $credential{username}, + lgpassword => $credential{password}, + lgdomain => $wiki_domain}; + if ($wiki->login($request)) { + Git::credential(\%credential, 'approve'); + print {*STDERR} qq(Logged in mediawiki user "$credential{username}".\n); + } else { + print {*STDERR} qq(Failed to log in mediawiki user "$credential{username}" on ${remote_url}\n); + print {*STDERR} ' (error ' . + $wiki->{error}->{code} . ': ' . + $wiki->{error}->{details} . ")\n"; + Git::credential(\%credential, 'reject'); + exit 1; + } + } + + return $wiki; +} + +1; # Famous last words diff --git a/contrib/mw-to-git/Makefile b/contrib/mw-to-git/Makefile index 1fb2424481..76fcd4defc 100644 --- a/contrib/mw-to-git/Makefile +++ b/contrib/mw-to-git/Makefile @@ -2,18 +2,43 @@ # Copyright (C) 2013 # Matthieu Moy <Matthieu.Moy@imag.fr> # -## Build git-remote-mediawiki +# To build and test: +# +# make +# bin-wrapper/git mw preview Some_page.mw +# bin-wrapper/git clone mediawiki::http://example.com/wiki/ +# +# To install, run Git's toplevel 'make install' then run: +# +# make install +GIT_MEDIAWIKI_PM=Git/Mediawiki.pm SCRIPT_PERL=git-remote-mediawiki.perl +SCRIPT_PERL+=git-mw.perl GIT_ROOT_DIR=../.. HERE=contrib/mw-to-git/ SCRIPT_PERL_FULL=$(patsubst %,$(HERE)/%,$(SCRIPT_PERL)) +INSTLIBDIR=$(shell $(MAKE) -C $(GIT_ROOT_DIR)/perl \ + -s --no-print-directory instlibdir) all: build -build install clean: - $(MAKE) -C $(GIT_ROOT_DIR) SCRIPT_PERL=$(SCRIPT_PERL_FULL) \ - $@-perl-script +install_pm: + install $(GIT_MEDIAWIKI_PM) $(INSTLIBDIR)/$(GIT_MEDIAWIKI_PM) + +build: + $(MAKE) -C $(GIT_ROOT_DIR) SCRIPT_PERL="$(SCRIPT_PERL_FULL)" \ + build-perl-script + +install: install_pm + $(MAKE) -C $(GIT_ROOT_DIR) SCRIPT_PERL="$(SCRIPT_PERL_FULL)" \ + install-perl-script + +clean: + $(MAKE) -C $(GIT_ROOT_DIR) SCRIPT_PERL="$(SCRIPT_PERL_FULL)" \ + clean-perl-script + rm $(INSTLIBDIR)/$(GIT_MEDIAWIKI_PM) + perlcritic: perlcritic -2 *.perl diff --git a/contrib/mw-to-git/bin-wrapper/git b/contrib/mw-to-git/bin-wrapper/git new file mode 100755 index 0000000000..6663ae57e8 --- /dev/null +++ b/contrib/mw-to-git/bin-wrapper/git @@ -0,0 +1,14 @@ +#!/bin/sh + +# git executable wrapper script for Git-Mediawiki to run tests without +# installing all the scripts and perl packages. + +GIT_ROOT_DIR=../../.. +GIT_EXEC_PATH=$(cd "$(dirname "$0")" && cd ${GIT_ROOT_DIR} && pwd) + +GITPERLLIB="$GIT_EXEC_PATH"'/contrib/mw-to-git'"${GITPERLLIB:+:$GITPERLLIB}" +PATH="$GIT_EXEC_PATH"'/contrib/mw-to-git:'"$PATH" + +export GITPERLLIB PATH + +exec "${GIT_EXEC_PATH}/bin-wrappers/git" "$@" diff --git a/contrib/mw-to-git/git-mw.perl b/contrib/mw-to-git/git-mw.perl new file mode 100755 index 0000000000..28df3ee321 --- /dev/null +++ b/contrib/mw-to-git/git-mw.perl @@ -0,0 +1,368 @@ +#!/usr/bin/perl + +# Copyright (C) 2013 +# Benoit Person <benoit.person@ensimag.imag.fr> +# Celestin Matte <celestin.matte@ensimag.imag.fr> +# License: GPL v2 or later + +# Set of tools for git repo with a mediawiki remote. +# Documentation & bugtracker: https://github.com/moy/Git-Mediawiki/ + +use strict; +use warnings; + +use Getopt::Long; +use URI::URL qw(url); +use LWP::UserAgent; +use HTML::TreeBuilder; + +use Git; +use MediaWiki::API; +use Git::Mediawiki qw(clean_filename connect_maybe + EMPTY HTTP_CODE_PAGE_NOT_FOUND); + +# By default, use UTF-8 to communicate with Git and the user +binmode STDERR, ':encoding(UTF-8)'; +binmode STDOUT, ':encoding(UTF-8)'; + +# Global parameters +my $verbose = 0; +sub v_print { + if ($verbose) { + return print {*STDERR} @_; + } + return; +} + +# Preview parameters +my $file_name = EMPTY; +my $remote_name = EMPTY; +my $preview_file_name = EMPTY; +my $autoload = 0; +sub file { + $file_name = shift; + return $file_name; +} + +my %commands = ( + 'help' => + [\&help, {}, \&help], + 'preview' => + [\&preview, { + '<>' => \&file, + 'output|o=s' => \$preview_file_name, + 'remote|r=s' => \$remote_name, + 'autoload|a' => \$autoload + }, \&preview_help] +); + +# Search for sub-command +my $cmd = $commands{'help'}; +for (0..@ARGV-1) { + if (defined $commands{$ARGV[$_]}) { + $cmd = $commands{$ARGV[$_]}; + splice @ARGV, $_, 1; + last; + } +}; +GetOptions( %{$cmd->[1]}, + 'help|h' => \&{$cmd->[2]}, + 'verbose|v' => \$verbose); + +# Launch command +&{$cmd->[0]}; + +############################# Preview Functions ################################ + +sub preview_help { + print {*STDOUT} <<'END'; +USAGE: git mw preview [--remote|-r <remote name>] [--autoload|-a] + [--output|-o <output filename>] [--verbose|-v] + <blob> | <filename> + +DESCRIPTION: +Preview is an utiliy to preview local content of a mediawiki repo as if it was +pushed on the remote. + +For that, preview searches for the remote name of the current branch's +upstream if --remote is not set. If that remote is not found or if it +is not a mediawiki, it lists all mediawiki remotes configured and asks +you to replay your command with the --remote option set properly. + +Then, it searches for a file named 'filename'. If it's not found in +the current dir, it will assume it's a blob. + +The content retrieved in the file (or in the blob) will then be parsed +by the remote mediawiki and combined with a template retrieved from +the mediawiki. + +Finally, preview will save the HTML result in a file. and autoload it +in your default web browser if the option --autoload is present. + +OPTIONS: + -r <remote name>, --remote <remote name> + If the remote is a mediawiki, the template and the parse engine + used for the preview will be those of that remote. + If not, a list of valid remotes will be shown. + + -a, --autoload + Try to load the HTML output in a new tab (or new window) of your + default web browser. + + -o <output filename>, --output <output filename> + Change the HTML output filename. Default filename is based on the + input filename with its extension replaced by '.html'. + + -v, --verbose + Show more information on what's going on under the hood. +END + exit; +} + +sub preview { + my $wiki; + my ($remote_url, $wiki_page_name); + my ($new_content, $template); + my $file_content; + + if ($file_name eq EMPTY) { + die "Missing file argument, see `git mw help`\n"; + } + + v_print("### Selecting remote\n"); + if ($remote_name eq EMPTY) { + $remote_name = find_upstream_remote_name(); + if ($remote_name) { + $remote_url = mediawiki_remote_url_maybe($remote_name); + } + + if (! $remote_url) { + my @valid_remotes = find_mediawiki_remotes(); + + if ($#valid_remotes == 0) { + print {*STDERR} "No mediawiki remote in this repo. \n"; + exit 1; + } else { + my $remotes_list = join("\n\t", @valid_remotes); + print {*STDERR} <<"MESSAGE"; +There are multiple mediawiki remotes, which of: + ${remotes_list} +do you want ? Use the -r option to specify the remote. +MESSAGE + } + + exit 1; + } + } else { + if (!is_valid_remote($remote_name)) { + die "${remote_name} is not a remote\n"; + } + + $remote_url = mediawiki_remote_url_maybe($remote_name); + if (! $remote_url) { + die "${remote_name} is not a mediawiki remote\n"; + } + } + v_print("selected remote:\n\tname: ${remote_name}\n\turl: ${remote_url}\n"); + + $wiki = connect_maybe($wiki, $remote_name, $remote_url); + + # Read file content + if (! -e $file_name) { + $file_content = git_cmd_try { + Git::command('cat-file', 'blob', $file_name); } + "%s failed w/ code %d"; + + if ($file_name =~ /(.+):(.+)/) { + $file_name = $2; + } + } else { + open my $read_fh, "<", $file_name + or die "could not open ${file_name}: $!\n"; + $file_content = do { local $/ = undef; <$read_fh> }; + close $read_fh + or die "unable to close: $!\n"; + } + + v_print("### Retrieving template\n"); + ($wiki_page_name = clean_filename($file_name)) =~ s/\.[^.]+$//; + $template = get_template($remote_url, $wiki_page_name); + + v_print("### Parsing local content\n"); + $new_content = $wiki->api({ + action => 'parse', + text => $file_content, + title => $wiki_page_name + }, { + skip_encoding => 1 + }) or die "No response from remote mediawiki\n"; + $new_content = $new_content->{'parse'}->{'text'}->{'*'}; + + v_print("### Merging contents\n"); + if ($preview_file_name eq EMPTY) { + ($preview_file_name = $file_name) =~ s/\.[^.]+$/.html/; + } + open(my $save_fh, '>:encoding(UTF-8)', $preview_file_name) + or die "Could not open: $!\n"; + print {$save_fh} merge_contents($template, $new_content, $remote_url); + close($save_fh) + or die "Could not close: $!\n"; + + v_print("### Results\n"); + if ($autoload) { + v_print("Launching browser w/ file: ${preview_file_name}"); + system('git', 'web--browse', $preview_file_name); + } else { + print {*STDERR} "Preview file saved as: ${preview_file_name}\n"; + } + + exit; +} + +# uses global scope variable: $remote_name +sub merge_contents { + my $template = shift; + my $content = shift; + my $remote_url = shift; + my ($content_tree, $html_tree, $mw_content_text); + my $template_content_id = 'bodyContent'; + + $html_tree = HTML::TreeBuilder->new; + $html_tree->parse($template); + + $content_tree = HTML::TreeBuilder->new; + $content_tree->parse($content); + + $template_content_id = Git::config("remote.${remote_name}.mwIDcontent") + || $template_content_id; + v_print("Using '${template_content_id}' as the content ID\n"); + + $mw_content_text = $html_tree->look_down('id', $template_content_id); + if (!defined $mw_content_text) { + print {*STDERR} <<"CONFIG"; +Could not combine the new content with the template. You might want to +configure `mediawiki.IDContent` in your config: + git config --add remote.${remote_name}.mwIDcontent <id> +and re-run the command afterward. +CONFIG + exit 1; + } + $mw_content_text->delete_content(); + $mw_content_text->push_content($content_tree); + + make_links_absolute($html_tree, $remote_url); + + return $html_tree->as_HTML; +} + +sub make_links_absolute { + my $html_tree = shift; + my $remote_url = shift; + for (@{ $html_tree->extract_links() }) { + my ($link, $element, $attr) = @{ $_ }; + my $url = url($link)->canonical; + if ($url !~ /#/) { + $element->attr($attr, URI->new_abs($url, $remote_url)); + } + } + return $html_tree; +} + +sub is_valid_remote { + my $remote = shift; + my @remotes = git_cmd_try { + Git::command('remote') } + "%s failed w/ code %d"; + my $found_remote = 0; + foreach my $remote (@remotes) { + if ($remote eq $remote) { + $found_remote = 1; + last; + } + } + return $found_remote; +} + +sub find_mediawiki_remotes { + my @remotes = git_cmd_try { + Git::command('remote'); } + "%s failed w/ code %d"; + my $remote_url; + my @valid_remotes = (); + foreach my $remote (@remotes) { + $remote_url = mediawiki_remote_url_maybe($remote); + if ($remote_url) { + push(@valid_remotes, $remote); + } + } + return @valid_remotes; +} + +sub find_upstream_remote_name { + my $current_branch = git_cmd_try { + Git::command_oneline('symbolic-ref', '--short', 'HEAD') } + "%s failed w/ code %d"; + return Git::config("branch.${current_branch}.remote"); +} + +sub mediawiki_remote_url_maybe { + my $remote = shift; + + # Find remote url + my $remote_url = Git::config("remote.${remote}.url"); + if ($remote_url =~ s/mediawiki::(.*)/$1/) { + return url($remote_url)->canonical; + } + + return; +} + +sub get_template { + my $url = shift; + my $page_name = shift; + my ($req, $res, $code, $url_after); + + $req = LWP::UserAgent->new; + if ($verbose) { + $req->show_progress(1); + } + + $res = $req->get("${url}/index.php?title=${page_name}"); + if (!$res->is_success) { + $code = $res->code; + $url_after = $res->request()->uri(); # resolve all redirections + if ($code == HTTP_CODE_PAGE_NOT_FOUND) { + if ($verbose) { + print {*STDERR} <<"WARNING"; +Warning: Failed to retrieve '$page_name'. Create it on the mediawiki if you want +all the links to work properly. +Trying to use the mediawiki homepage as a fallback template ... +WARNING + } + + # LWP automatically redirects GET request + $res = $req->get("${url}/index.php"); + if (!$res->is_success) { + $url_after = $res->request()->uri(); # resolve all redirections + die "Failed to get homepage @ ${url_after} w/ code ${code}\n"; + } + } else { + die "Failed to get '${page_name}' @ ${url_after} w/ code ${code}\n"; + } + } + + return $res->decoded_content; +} + +############################## Help Functions ################################## + +sub help { + print {*STDOUT} <<'END'; +usage: git mw <command> <args> + +git mw commands are: + help Display help information about git mw + preview Parse and render local file into HTML +END + exit; +} diff --git a/contrib/mw-to-git/git-remote-mediawiki.perl b/contrib/mw-to-git/git-remote-mediawiki.perl index d09f5da668..f8d7d2ca6c 100755 --- a/contrib/mw-to-git/git-remote-mediawiki.perl +++ b/contrib/mw-to-git/git-remote-mediawiki.perl @@ -14,6 +14,8 @@ use strict; use MediaWiki::API; use Git; +use Git::Mediawiki qw(clean_filename smudge_filename connect_maybe + EMPTY HTTP_CODE_OK); use DateTime::Format::ISO8601; use warnings; @@ -23,9 +25,6 @@ binmode STDOUT, ':encoding(UTF-8)'; use URI::Escape; -# Mediawiki filenames can contain forward slashes. This variable decides by which pattern they should be replaced -use constant SLASH_REPLACEMENT => '%2F'; - # It's not always possible to delete pages (may require some # privileges). Deleted pages are replaced with this content. use constant DELETED_CONTENT => "[[Category:Deleted]]\n"; @@ -40,8 +39,6 @@ use constant NULL_SHA1 => '0000000000000000000000000000000000000000'; # Used on Git's side to reflect empty edit messages on the wiki use constant EMPTY_MESSAGE => '*Empty MediaWiki Message*'; -use constant EMPTY => q{}; - # Number of pages taken into account at once in submodule get_mw_page_list use constant SLICE_SIZE => 50; @@ -50,8 +47,6 @@ use constant SLICE_SIZE => 50; # the number of links to be returned (500 links max). use constant BATCH_SIZE => 10; -use constant HTTP_CODE_OK => 200; - if (@ARGV != 2) { exit_error_usage(); } @@ -199,37 +194,6 @@ sub parse_command { # MediaWiki API instance, created lazily. my $mediawiki; -sub mw_connect_maybe { - if ($mediawiki) { - return; - } - $mediawiki = MediaWiki::API->new; - $mediawiki->{config}->{api_url} = "${url}/api.php"; - if ($wiki_login) { - my %credential = ( - 'url' => $url, - 'username' => $wiki_login, - 'password' => $wiki_passwd - ); - Git::credential(\%credential); - my $request = {lgname => $credential{username}, - lgpassword => $credential{password}, - lgdomain => $wiki_domain}; - if ($mediawiki->login($request)) { - Git::credential(\%credential, 'approve'); - print {*STDERR} qq(Logged in mediawiki user "$credential{username}".\n); - } else { - print {*STDERR} qq(Failed to log in mediawiki user "$credential{username}" on ${url}\n); - print {*STDERR} ' (error ' . - $mediawiki->{error}->{code} . ': ' . - $mediawiki->{error}->{details} . ")\n"; - Git::credential(\%credential, 'reject'); - exit 1; - } - } - return; -} - sub fatal_mw_error { my $action = shift; print STDERR "fatal: could not $action.\n"; @@ -339,7 +303,7 @@ sub get_mw_first_pages { # Get the list of pages to be fetched according to configuration. sub get_mw_pages { - mw_connect_maybe(); + $mediawiki = connect_maybe($mediawiki, $remotename, $url); print {*STDERR} "Listing pages on remote wiki...\n"; @@ -529,7 +493,7 @@ sub get_last_local_revision { # avoid a loop onto all tracked pages. This is useful for the fetch-by-rev # option. sub get_last_global_remote_rev { - mw_connect_maybe(); + $mediawiki = connect_maybe($mediawiki, $remotename, $url); my $query = { action => 'query', @@ -545,7 +509,7 @@ sub get_last_global_remote_rev { # Get the last remote revision concerning the tracked pages and the tracked # categories. sub get_last_remote_revision { - mw_connect_maybe(); + $mediawiki = connect_maybe($mediawiki, $remotename, $url); my %pages_hash = get_mw_pages(); my @pages = values(%pages_hash); @@ -601,29 +565,6 @@ sub mediawiki_smudge { return "${string}\n"; } -sub mediawiki_clean_filename { - my $filename = shift; - $filename =~ s{@{[SLASH_REPLACEMENT]}}{/}g; - # [, ], |, {, and } are forbidden by MediaWiki, even URL-encoded. - # Do a variant of URL-encoding, i.e. looks like URL-encoding, - # but with _ added to prevent MediaWiki from thinking this is - # an actual special character. - $filename =~ s/[\[\]\{\}\|]/sprintf("_%%_%x", ord($&))/ge; - # If we use the uri escape before - # we should unescape here, before anything - - return $filename; -} - -sub mediawiki_smudge_filename { - my $filename = shift; - $filename =~ s{/}{@{[SLASH_REPLACEMENT]}}g; - $filename =~ s/ /_/g; - # Decode forbidden characters encoded in mediawiki_clean_filename - $filename =~ s/_%_([0-9a-fA-F][0-9a-fA-F])/sprintf('%c', hex($1))/ge; - return $filename; -} - sub literal_data { my ($content) = @_; print {*STDOUT} 'data ', bytes::length($content), "\n", $content; @@ -831,7 +772,7 @@ sub mw_import_ref { return; } - mw_connect_maybe(); + $mediawiki = connect_maybe($mediawiki, $remotename, $url); print {*STDERR} "Searching revisions...\n"; my $last_local = get_last_local_revision(); @@ -945,7 +886,7 @@ sub mw_import_revids { my %commit; $commit{author} = $rev->{user} || 'Anonymous'; $commit{comment} = $rev->{comment} || EMPTY_MESSAGE; - $commit{title} = mediawiki_smudge_filename($page_title); + $commit{title} = smudge_filename($page_title); $commit{mw_revision} = $rev->{revid}; $commit{content} = mediawiki_smudge($rev->{'*'}); @@ -1006,7 +947,7 @@ sub mw_upload_file { } # Deleting and uploading a file requires a priviledged user if ($file_deleted) { - mw_connect_maybe(); + $mediawiki = connect_maybe($mediawiki, $remotename, $url); my $query = { action => 'delete', title => $path, @@ -1022,7 +963,7 @@ sub mw_upload_file { # Don't let perl try to interpret file content as UTF-8 => use "raw" my $content = run_git("cat-file blob ${new_sha1}", 'raw'); if ($content ne EMPTY) { - mw_connect_maybe(); + $mediawiki = connect_maybe($mediawiki, $remotename, $url); $mediawiki->{config}->{upload_url} = "${url}/index.php/Special:Upload"; $mediawiki->edit({ @@ -1070,7 +1011,7 @@ sub mw_push_file { my $old_sha1 = $diff_info_split[2]; my $page_created = ($old_sha1 eq NULL_SHA1); my $page_deleted = ($new_sha1 eq NULL_SHA1); - $complete_file_name = mediawiki_clean_filename($complete_file_name); + $complete_file_name = clean_filename($complete_file_name); my ($title, $extension) = $complete_file_name =~ /^(.*)\.([^\.]*)$/; if (!defined($extension)) { @@ -1093,7 +1034,7 @@ sub mw_push_file { $file_content = run_git("cat-file blob ${new_sha1}"); } - mw_connect_maybe(); + $mediawiki = connect_maybe($mediawiki, $remotename, $url); my $result = $mediawiki->edit( { action => 'edit', @@ -1279,7 +1220,7 @@ sub mw_push_revision { } sub get_allowed_file_extensions { - mw_connect_maybe(); + $mediawiki = connect_maybe($mediawiki, $remotename, $url); my $query = { action => 'query', @@ -1303,7 +1244,7 @@ my %cached_mw_namespace_id; # Return MediaWiki id for a canonical namespace name. # Ex.: "File", "Project". sub get_mw_namespace_id { - mw_connect_maybe(); + $mediawiki = connect_maybe($mediawiki, $remotename, $url); my $name = shift; if (!exists $namespace_id{$name}) { diff --git a/contrib/mw-to-git/t/test-gitmw-lib.sh b/contrib/mw-to-git/t/test-gitmw-lib.sh index bb76cee379..ca6860ff30 100755 --- a/contrib/mw-to-git/t/test-gitmw-lib.sh +++ b/contrib/mw-to-git/t/test-gitmw-lib.sh @@ -62,12 +62,8 @@ test_check_precond () { test_done fi - if [ ! -f "$GIT_BUILD_DIR"/git-remote-mediawiki ]; - then - echo "No remote mediawiki for git found. Copying it in git" - echo "cp $GIT_BUILD_DIR/contrib/mw-to-git/git-remote-mediawiki $GIT_BUILD_DIR/" - ln -s "$GIT_BUILD_DIR"/contrib/mw-to-git/git-remote-mediawiki "$GIT_BUILD_DIR" - fi + GIT_EXEC_PATH=$(cd "$(dirname "$0")" && cd "../.." && pwd) + PATH="$GIT_EXEC_PATH"'/bin-wrapper:'"$PATH" if [ ! -d "$WIKI_DIR_INST/$WIKI_DIR_NAME" ]; then diff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr index c3a3cac77b..1e0044b69f 100755 --- a/contrib/remote-helpers/git-remote-bzr +++ b/contrib/remote-helpers/git-remote-bzr @@ -674,7 +674,7 @@ def parse_reset(parser): parsed_refs[ref] = mark_to_rev(from_mark) def do_export(parser): - global parsed_refs, dirname + global parsed_refs, dirname, transports parser.next() @@ -699,7 +699,8 @@ def do_export(parser): branch.generate_revision_history(revid, marks.get_tip(name)) if name in peers: - peer = bzrlib.branch.Branch.open(peers[name]) + peer = bzrlib.branch.Branch.open(peers[name], + possible_transports=transports) try: peer.bzrdir.push_branch(branch, revision_id=revid) except bzrlib.errors.DivergedBranches: @@ -769,25 +770,28 @@ def do_list(parser): print def clone(path, remote_branch): + global transports try: - bdir = bzrlib.bzrdir.BzrDir.create(path) + bdir = bzrlib.bzrdir.BzrDir.create(path, possible_transports=transports) except bzrlib.errors.AlreadyControlDirError: - bdir = bzrlib.bzrdir.BzrDir.open(path) + bdir = bzrlib.bzrdir.BzrDir.open(path, possible_transports=transports) repo = bdir.find_repository() repo.fetch(remote_branch.repository) return remote_branch.sprout(bdir, repository=repo) def get_remote_branch(name): - global dirname, branches + global dirname, branches, transports - remote_branch = bzrlib.branch.Branch.open(branches[name]) + remote_branch = bzrlib.branch.Branch.open(branches[name], + possible_transports=transports) if isinstance(remote_branch.user_transport, bzrlib.transport.local.LocalTransport): return remote_branch branch_path = os.path.join(dirname, 'clone', name) try: - branch = bzrlib.branch.Branch.open(branch_path) + branch = bzrlib.branch.Branch.open(branch_path, + possible_transports=transports) except bzrlib.errors.NotBranchError: # clone branch = clone(branch_path, remote_branch) @@ -821,17 +825,19 @@ def find_branches(repo): yield name, branch.base def get_repo(url, alias): - global dirname, peer, branches + global dirname, peer, branches, transports normal_url = bzrlib.urlutils.normalize_url(url) - origin = bzrlib.bzrdir.BzrDir.open(url) + origin = bzrlib.bzrdir.BzrDir.open(url, possible_transports=transports) is_local = isinstance(origin.transport, bzrlib.transport.local.LocalTransport) shared_path = os.path.join(gitdir, 'bzr') try: - shared_dir = bzrlib.bzrdir.BzrDir.open(shared_path) + shared_dir = bzrlib.bzrdir.BzrDir.open(shared_path, + possible_transports=transports) except bzrlib.errors.NotBranchError: - shared_dir = bzrlib.bzrdir.BzrDir.create(shared_path) + shared_dir = bzrlib.bzrdir.BzrDir.create(shared_path, + possible_transports=transports) try: shared_repo = shared_dir.open_repository() except bzrlib.errors.NoRepositoryPresent: @@ -844,7 +850,8 @@ def get_repo(url, alias): else: # check and remove old organization try: - bdir = bzrlib.bzrdir.BzrDir.open(clone_path) + bdir = bzrlib.bzrdir.BzrDir.open(clone_path, + possible_transports=transports) bdir.destroy_repository() except bzrlib.errors.NotBranchError: pass @@ -897,6 +904,7 @@ def main(args): global files_cache global is_tmp global branches, peers + global transports alias = args[1] url = args[2] @@ -909,6 +917,7 @@ def main(args): marks = None branches = {} peers = {} + transports = [] if alias[5:] == url: is_tmp = True diff --git a/contrib/remote-helpers/git-remote-hg b/contrib/remote-helpers/git-remote-hg index 0194c67fb1..c27603965a 100755 --- a/contrib/remote-helpers/git-remote-hg +++ b/contrib/remote-helpers/git-remote-hg @@ -391,11 +391,24 @@ def get_repo(url, alias): os.makedirs(dirname) else: shared_path = os.path.join(gitdir, 'hg') - if not os.path.exists(shared_path): - try: - hg.clone(myui, {}, url, shared_path, update=False, pull=True) - except: - die('Repository error') + + # check and upgrade old organization + hg_path = os.path.join(shared_path, '.hg') + if os.path.exists(shared_path) and not os.path.exists(hg_path): + repos = os.listdir(shared_path) + for x in repos: + local_hg = os.path.join(shared_path, x, 'clone', '.hg') + if not os.path.exists(local_hg): + continue + if not os.path.exists(hg_path): + shutil.move(local_hg, hg_path) + shutil.rmtree(os.path.join(shared_path, x, 'clone')) + + # setup shared repo (if not there) + try: + hg.peer(myui, {}, shared_path, create=True) + except error.RepoError: + pass if not os.path.exists(dirname): os.makedirs(dirname) @@ -1124,7 +1137,7 @@ def do_option(parser): def fix_path(alias, repo, orig_url): url = urlparse.urlparse(orig_url, 'file') - if url.scheme != 'file' or os.path.isabs(url.path): + if url.scheme != 'file' or os.path.isabs(os.path.expanduser(url.path)): return abs_url = urlparse.urljoin("%s/" % os.getcwd(), orig_url) cmd = ['git', 'config', 'remote.%s.url' % alias, "hg::%s" % abs_url] diff --git a/contrib/subtree/Makefile b/contrib/subtree/Makefile index b50750565f..435b2dea29 100644 --- a/contrib/subtree/Makefile +++ b/contrib/subtree/Makefile @@ -30,6 +30,7 @@ $(GIT_SUBTREE): $(GIT_SUBTREE_SH) doc: $(GIT_SUBTREE_DOC) install: $(GIT_SUBTREE) + $(INSTALL) -d -m 755 $(DESTDIR)$(libexecdir) $(INSTALL) -m 755 $(GIT_SUBTREE) $(DESTDIR)$(libexecdir) install-doc: install-man diff --git a/contrib/subtree/git-subtree.sh b/contrib/subtree/git-subtree.sh index 51ae932e5e..7d7af03274 100755 --- a/contrib/subtree/git-subtree.sh +++ b/contrib/subtree/git-subtree.sh @@ -311,7 +311,7 @@ copy_commit() GIT_COMMITTER_NAME \ GIT_COMMITTER_EMAIL \ GIT_COMMITTER_DATE - (echo -n "$annotate"; cat ) | + (printf "%s" "$annotate"; cat ) | git commit-tree "$2" $3 # reads the rest of stdin ) || die "Can't copy commit $1" } diff --git a/contrib/subtree/git-subtree.txt b/contrib/subtree/git-subtree.txt index 7ba853eeda..e0957eee55 100644 --- a/contrib/subtree/git-subtree.txt +++ b/contrib/subtree/git-subtree.txt @@ -270,7 +270,7 @@ git-extensions repository in ~/git-extensions/: name You can omit the --squash flag, but doing so will increase the number -of commits that are incldued in your local repository. +of commits that are included in your local repository. We now have a ~/git-extensions/git-subtree directory containing code from the master branch of git://github.com/apenwarr/git-subtree.git diff --git a/contrib/subtree/t/t7900-subtree.sh b/contrib/subtree/t/t7900-subtree.sh index b0f8536fca..66ce4b07c2 100755 --- a/contrib/subtree/t/t7900-subtree.sh +++ b/contrib/subtree/t/t7900-subtree.sh @@ -182,9 +182,9 @@ test_expect_success 'merge new subproj history into subdir' ' test_expect_success 'Check that prefix argument is required for split' ' echo "You must provide the --prefix option." > expected && test_must_fail git subtree split > actual 2>&1 && - test_debug "echo -n expected: " && + test_debug "printf '"'"'expected: '"'"'" && test_debug "cat expected" && - test_debug "echo -n actual: " && + test_debug "printf '"'"'actual: '"'"'" && test_debug "cat actual" && test_cmp expected actual && rm -f expected actual @@ -193,9 +193,9 @@ test_expect_success 'Check that prefix argument is required for split' ' test_expect_success 'Check that the <prefix> exists for a split' ' echo "'"'"'non-existent-directory'"'"'" does not exist\; use "'"'"'git subtree add'"'"'" > expected && test_must_fail git subtree split --prefix=non-existent-directory > actual 2>&1 && - test_debug "echo -n expected: " && + test_debug "printf '"'"'expected: '"'"'" && test_debug "cat expected" && - test_debug "echo -n actual: " && + test_debug "printf '"'"'actual: '"'"'" && test_debug "cat actual" && test_cmp expected actual # rm -f expected actual @@ -835,7 +835,7 @@ int renormalize_buffer(const char *path, const char *src, size_t len, struct str /***************************************************************** * - * Streaming converison support + * Streaming conversion support * *****************************************************************/ @@ -48,7 +48,7 @@ static inline int would_convert_to_git(const char *path, const char *src, /***************************************************************** * - * Streaming converison support + * Streaming conversion support * *****************************************************************/ @@ -760,7 +760,7 @@ static void handle(int incoming, struct sockaddr *addr, socklen_t addrlen) snprintf(portbuf, sizeof(portbuf), "REMOTE_PORT=%d", ntohs(sin_addr->sin_port)); #ifndef NO_IPV6 - } else if (addr && addr->sa_family == AF_INET6) { + } else if (addr->sa_family == AF_INET6) { struct sockaddr_in6 *sin6_addr = (void *) addr; char *buf = addrbuf + 12; @@ -1047,18 +1047,6 @@ static int service_loop(struct socketlist *socklist) } } -/* if any standard file descriptor is missing open it to /dev/null */ -static void sanitize_stdfds(void) -{ - int fd = open("/dev/null", O_RDWR, 0); - while (fd != -1 && fd < 2) - fd = dup(fd); - if (fd == -1) - die_errno("open /dev/null or dup failed"); - if (fd > 2) - close(fd); -} - #ifdef NO_POSIX_GOODIES struct credentials; diff --git a/diff-delta.c b/diff-delta.c index 93385e12ba..3797ce6041 100644 --- a/diff-delta.c +++ b/diff-delta.c @@ -155,7 +155,7 @@ struct delta_index * create_delta_index(const void *buf, unsigned long bufsize) entries = 0xfffffffeU / RABIN_WINDOW; } hsize = entries / 4; - for (i = 4; (1u << i) < hsize && i < 31; i++); + for (i = 4; (1u << i) < hsize; i++); hsize = 1 << i; hmask = hsize - 1; diff --git a/diff-lib.c b/diff-lib.c index 0a95763063..346cac651d 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -87,10 +87,12 @@ int run_diff_files(struct rev_info *revs, unsigned int option) { int entries, i; int diff_unmerged_stage = revs->max_count; - int silent_on_removed = option & DIFF_SILENT_ON_REMOVED; unsigned ce_option = ((option & DIFF_RACY_IS_MODIFIED) ? CE_MATCH_RACY_IS_DIRTY : 0); + if (option & DIFF_SILENT_ON_REMOVED) + handle_deprecated_show_diff_q(&revs->diffopt); + diff_set_mnemonic_prefix(&revs->diffopt, "i/", "w/"); if (diff_unmerged_stage < 0) @@ -137,8 +139,6 @@ int run_diff_files(struct rev_info *revs, unsigned int option) perror(ce->name); continue; } - if (silent_on_removed) - continue; wt_mode = 0; } dpath->mode = wt_mode; @@ -204,8 +204,6 @@ int run_diff_files(struct rev_info *revs, unsigned int option) perror(ce->name); continue; } - if (silent_on_removed) - continue; diff_addremove(&revs->diffopt, '-', ce->ce_mode, ce->sha1, !is_null_sha1(ce->sha1), ce->name, 0); diff --git a/diff-no-index.c b/diff-no-index.c index e66fdf33da..e301aafff9 100644 --- a/diff-no-index.c +++ b/diff-no-index.c @@ -187,7 +187,7 @@ void diff_no_index(struct rev_info *revs, { int i, prefixlen; int no_index = 0; - unsigned options = 0; + unsigned deprecated_show_diff_q_option_used = 0; const char *paths[2]; /* Were we asked to do --no-index explicitly? */ @@ -225,7 +225,7 @@ void diff_no_index(struct rev_info *revs, if (!strcmp(argv[i], "--no-index")) i++; else if (!strcmp(argv[i], "-q")) { - options |= DIFF_SILENT_ON_REMOVED; + deprecated_show_diff_q_option_used = 1; i++; } else if (!strcmp(argv[i], "--")) @@ -260,6 +260,9 @@ void diff_no_index(struct rev_info *revs, revs->max_count = -2; diff_setup_done(&revs->diffopt); + if (deprecated_show_diff_q_option_used) + handle_deprecated_show_diff_q(&revs->diffopt); + setup_diff_pager(&revs->diffopt); DIFF_OPT_SET(&revs->diffopt, EXIT_WITH_STATUS); @@ -669,7 +669,7 @@ static void emit_rewrite_diff(const char *name_a, memset(&ecbdata, 0, sizeof(ecbdata)); ecbdata.color_diff = want_color(o->use_color); ecbdata.found_changesp = &o->found_changes; - ecbdata.ws_rule = whitespace_rule(name_b ? name_b : name_a); + ecbdata.ws_rule = whitespace_rule(name_b); ecbdata.opt = o; if (ecbdata.ws_rule & WS_BLANK_AT_EOF) { mmfile_t mf1, mf2; @@ -1683,9 +1683,7 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options) del = deleted; if (graph_width <= max_change) { - int total = add + del; - - total = scale_linear(add + del, graph_width, max_change); + int total = scale_linear(add + del, graph_width, max_change); if (total < 2 && add && del) /* width >= 2 due to the sanity check */ total = 2; @@ -2254,7 +2252,7 @@ static void builtin_diff(const char *name_a, (!two->mode || S_ISGITLINK(two->mode))) { const char *del = diff_get_color_opt(o, DIFF_FILE_OLD); const char *add = diff_get_color_opt(o, DIFF_FILE_NEW); - show_submodule_summary(o->file, one ? one->path : two->path, + show_submodule_summary(o->file, one->path ? one->path : two->path, line_prefix, one->sha1, two->sha1, two->dirty_submodule, meta, del, add, reset); @@ -2374,7 +2372,7 @@ static void builtin_diff(const char *name_a, ecbdata.label_path = lbl; ecbdata.color_diff = want_color(o->use_color); ecbdata.found_changesp = &o->found_changes; - ecbdata.ws_rule = whitespace_rule(name_b ? name_b : name_a); + ecbdata.ws_rule = whitespace_rule(name_b); if (ecbdata.ws_rule & WS_BLANK_AT_EOF) check_blank_at_eof(&mf1, &mf2, &ecbdata); ecbdata.opt = o; @@ -2586,7 +2584,7 @@ void fill_filespec(struct diff_filespec *spec, const unsigned char *sha1, */ static int reuse_worktree_file(const char *name, const unsigned char *sha1, int want_file) { - struct cache_entry *ce; + const struct cache_entry *ce; struct stat st; int pos, len; @@ -3505,6 +3503,93 @@ static int parse_submodule_opt(struct diff_options *options, const char *value) return 1; } +static const char diff_status_letters[] = { + DIFF_STATUS_ADDED, + DIFF_STATUS_COPIED, + DIFF_STATUS_DELETED, + DIFF_STATUS_MODIFIED, + DIFF_STATUS_RENAMED, + DIFF_STATUS_TYPE_CHANGED, + DIFF_STATUS_UNKNOWN, + DIFF_STATUS_UNMERGED, + DIFF_STATUS_FILTER_AON, + DIFF_STATUS_FILTER_BROKEN, + '\0', +}; + +static unsigned int filter_bit['Z' + 1]; + +static void prepare_filter_bits(void) +{ + int i; + + if (!filter_bit[DIFF_STATUS_ADDED]) { + for (i = 0; diff_status_letters[i]; i++) + filter_bit[(int) diff_status_letters[i]] = (1 << i); + } +} + +static unsigned filter_bit_tst(char status, const struct diff_options *opt) +{ + return opt->filter & filter_bit[(int) status]; +} + +static int parse_diff_filter_opt(const char *optarg, struct diff_options *opt) +{ + int i, optch; + + prepare_filter_bits(); + + /* + * If there is a negation e.g. 'd' in the input, and we haven't + * initialized the filter field with another --diff-filter, start + * from full set of bits, except for AON. + */ + if (!opt->filter) { + for (i = 0; (optch = optarg[i]) != '\0'; i++) { + if (optch < 'a' || 'z' < optch) + continue; + opt->filter = (1 << (ARRAY_SIZE(diff_status_letters) - 1)) - 1; + opt->filter &= ~filter_bit[DIFF_STATUS_FILTER_AON]; + break; + } + } + + for (i = 0; (optch = optarg[i]) != '\0'; i++) { + unsigned int bit; + int negate; + + if ('a' <= optch && optch <= 'z') { + negate = 1; + optch = toupper(optch); + } else { + negate = 0; + } + + bit = (0 <= optch && optch <= 'Z') ? filter_bit[optch] : 0; + if (!bit) + return optarg[i]; + if (negate) + opt->filter &= ~bit; + else + opt->filter |= bit; + } + return 0; +} + +/* Used only by "diff-files" and "diff --no-index" */ +void handle_deprecated_show_diff_q(struct diff_options *opt) +{ + warning("'diff -q' and 'diff-files -q' are deprecated."); + warning("Use 'diff --diff-filter=d' instead to ignore deleted filepairs."); + parse_diff_filter_opt("d", opt); +} + +static void enable_patch_output(int *fmt) { + *fmt &= ~DIFF_FORMAT_NO_OUTPUT; + *fmt |= DIFF_FORMAT_PATCH; +} + int diff_opt_parse(struct diff_options *options, const char **av, int ac) { const char *arg = av[0]; @@ -3512,15 +3597,15 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) int argcount; /* Output format options */ - if (!strcmp(arg, "-p") || !strcmp(arg, "-u") || !strcmp(arg, "--patch")) - options->output_format |= DIFF_FORMAT_PATCH; - else if (opt_arg(arg, 'U', "unified", &options->context)) - options->output_format |= DIFF_FORMAT_PATCH; + if (!strcmp(arg, "-p") || !strcmp(arg, "-u") || !strcmp(arg, "--patch") + || opt_arg(arg, 'U', "unified", &options->context)) + enable_patch_output(&options->output_format); else if (!strcmp(arg, "--raw")) options->output_format |= DIFF_FORMAT_RAW; - else if (!strcmp(arg, "--patch-with-raw")) - options->output_format |= DIFF_FORMAT_PATCH | DIFF_FORMAT_RAW; - else if (!strcmp(arg, "--numstat")) + else if (!strcmp(arg, "--patch-with-raw")) { + enable_patch_output(&options->output_format); + options->output_format |= DIFF_FORMAT_RAW; + } else if (!strcmp(arg, "--numstat")) options->output_format |= DIFF_FORMAT_NUMSTAT; else if (!strcmp(arg, "--shortstat")) options->output_format |= DIFF_FORMAT_SHORTSTAT; @@ -3542,13 +3627,14 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) options->output_format |= DIFF_FORMAT_CHECKDIFF; else if (!strcmp(arg, "--summary")) options->output_format |= DIFF_FORMAT_SUMMARY; - else if (!strcmp(arg, "--patch-with-stat")) - options->output_format |= DIFF_FORMAT_PATCH | DIFF_FORMAT_DIFFSTAT; - else if (!strcmp(arg, "--name-only")) + else if (!strcmp(arg, "--patch-with-stat")) { + enable_patch_output(&options->output_format); + options->output_format |= DIFF_FORMAT_DIFFSTAT; + } else if (!strcmp(arg, "--name-only")) options->output_format |= DIFF_FORMAT_NAME; else if (!strcmp(arg, "--name-status")) options->output_format |= DIFF_FORMAT_NAME_STATUS; - else if (!strcmp(arg, "-s")) + else if (!strcmp(arg, "-s") || !strcmp(arg, "--no-patch")) options->output_format |= DIFF_FORMAT_NO_OUTPUT; else if (!prefixcmp(arg, "--stat")) /* --stat, --stat-width, --stat-name-width, or --stat-count */ @@ -3621,7 +3707,7 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) /* flags options */ else if (!strcmp(arg, "--binary")) { - options->output_format |= DIFF_FORMAT_PATCH; + enable_patch_output(&options->output_format); DIFF_OPT_SET(options, BINARY); } else if (!strcmp(arg, "--full-index")) @@ -3728,7 +3814,10 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac) return argcount; } else if ((argcount = parse_long_opt("diff-filter", av, &optarg))) { - options->filter = optarg; + int offending = parse_diff_filter_opt(optarg, options); + if (offending) + die("unknown change class '%c' in --diff-filter=%s", + offending, optarg); return argcount; } else if (!strcmp(arg, "--abbrev")) @@ -4460,7 +4549,7 @@ void diff_flush(struct diff_options *options) DIFF_OPT_TST(options, DIFF_FROM_CONTENTS)) { /* * run diff_flush_patch for the exit status. setting - * options->file to /dev/null should be safe, becaue we + * options->file to /dev/null should be safe, because we * aren't supposed to produce any output anyway. */ if (options->close_file) @@ -4520,27 +4609,32 @@ free_queue: } } -static void diffcore_apply_filter(const char *filter) +static int match_filter(const struct diff_options *options, const struct diff_filepair *p) +{ + return (((p->status == DIFF_STATUS_MODIFIED) && + ((p->score && + filter_bit_tst(DIFF_STATUS_FILTER_BROKEN, options)) || + (!p->score && + filter_bit_tst(DIFF_STATUS_MODIFIED, options)))) || + ((p->status != DIFF_STATUS_MODIFIED) && + filter_bit_tst(p->status, options))); +} + +static void diffcore_apply_filter(struct diff_options *options) { int i; struct diff_queue_struct *q = &diff_queued_diff; struct diff_queue_struct outq; + DIFF_QUEUE_CLEAR(&outq); - if (!filter) + if (!options->filter) return; - if (strchr(filter, DIFF_STATUS_FILTER_AON)) { + if (filter_bit_tst(DIFF_STATUS_FILTER_AON, options)) { int found; for (i = found = 0; !found && i < q->nr; i++) { - struct diff_filepair *p = q->queue[i]; - if (((p->status == DIFF_STATUS_MODIFIED) && - ((p->score && - strchr(filter, DIFF_STATUS_FILTER_BROKEN)) || - (!p->score && - strchr(filter, DIFF_STATUS_MODIFIED)))) || - ((p->status != DIFF_STATUS_MODIFIED) && - strchr(filter, p->status))) + if (match_filter(options, q->queue[i])) found++; } if (found) @@ -4558,14 +4652,7 @@ static void diffcore_apply_filter(const char *filter) /* Only the matching ones */ for (i = 0; i < q->nr; i++) { struct diff_filepair *p = q->queue[i]; - - if (((p->status == DIFF_STATUS_MODIFIED) && - ((p->score && - strchr(filter, DIFF_STATUS_FILTER_BROKEN)) || - (!p->score && - strchr(filter, DIFF_STATUS_MODIFIED)))) || - ((p->status != DIFF_STATUS_MODIFIED) && - strchr(filter, p->status))) + if (match_filter(options, p)) diff_q(&outq, p); else diff_free_filepair(p); @@ -4672,7 +4759,7 @@ void diffcore_std(struct diff_options *options) if (!options->found_follow) /* See try_to_follow_renames() in tree-diff.c */ diff_resolve_rename_copy(); - diffcore_apply_filter(options->filter); + diffcore_apply_filter(options); if (diff_queued_diff.nr && !DIFF_OPT_TST(options, DIFF_FROM_CONTENTS)) DIFF_OPT_SET(options, HAS_CHANGES); @@ -104,12 +104,15 @@ enum diff_words_type { }; struct diff_options { - const char *filter; const char *orderfile; const char *pickaxe; const char *single_follow; const char *a_prefix, *b_prefix; unsigned flags; + + /* diff-filter bits */ + unsigned int filter; + int use_color; int context; int interhunkcontext; @@ -337,6 +340,8 @@ extern int parse_rename_score(const char **cp_p); extern long parse_algorithm_value(const char *value); +extern void handle_deprecated_show_diff_q(struct diff_options *); + extern int print_stat_summary(FILE *fp, int files, int insertions, int deletions); extern void setup_diff_pager(struct diff_options *); @@ -890,7 +890,7 @@ enum exist_status { */ static enum exist_status directory_exists_in_index_icase(const char *dirname, int len) { - struct cache_entry *ce = index_name_exists(&the_index, dirname, len + 1, ignore_case); + const struct cache_entry *ce = index_name_exists(&the_index, dirname, len + 1, ignore_case); unsigned char endchar; if (!ce) @@ -934,7 +934,7 @@ static enum exist_status directory_exists_in_index(const char *dirname, int len) if (pos < 0) pos = -pos-1; while (pos < active_nr) { - struct cache_entry *ce = active_cache[pos++]; + const struct cache_entry *ce = active_cache[pos++]; unsigned char endchar; if (strncmp(ce->name, dirname, len)) @@ -1070,7 +1070,7 @@ static int exclude_matches_pathspec(const char *path, int len, static int get_index_dtype(const char *path, int len) { int pos; - struct cache_entry *ce; + const struct cache_entry *ce; ce = cache_name_exists(path, len, 0); if (ce) { @@ -37,7 +37,7 @@ int launch_editor(const char *path, struct strbuf *buffer, const char *const *en return error("Terminal is dumb, but EDITOR unset"); if (strcmp(editor, ":")) { - const char *args[] = { editor, path, NULL }; + const char *args[] = { editor, real_path(path), NULL }; struct child_process p; int ret, sig; @@ -79,7 +79,7 @@ static int create_file(const char *path, unsigned int mode) return open(path, O_WRONLY | O_CREAT | O_EXCL, mode); } -static void *read_blob_entry(struct cache_entry *ce, unsigned long *size) +static void *read_blob_entry(const struct cache_entry *ce, unsigned long *size) { enum object_type type; void *new = read_sha1_file(ce->sha1, &type, size); @@ -92,7 +92,7 @@ static void *read_blob_entry(struct cache_entry *ce, unsigned long *size) return NULL; } -static int open_output_fd(char *path, struct cache_entry *ce, int to_tempfile) +static int open_output_fd(char *path, const struct cache_entry *ce, int to_tempfile) { int symlink = (ce->ce_mode & S_IFMT) != S_IFREG; if (to_tempfile) { @@ -115,7 +115,7 @@ static int fstat_output(int fd, const struct checkout *state, struct stat *st) return 0; } -static int streaming_write_entry(struct cache_entry *ce, char *path, +static int streaming_write_entry(const struct cache_entry *ce, char *path, struct stream_filter *filter, const struct checkout *state, int to_tempfile, int *fstat_done, struct stat *statbuf) @@ -136,7 +136,8 @@ static int streaming_write_entry(struct cache_entry *ce, char *path, return result; } -static int write_entry(struct cache_entry *ce, char *path, const struct checkout *state, int to_tempfile) +static int write_entry(struct cache_entry *ce, + char *path, const struct checkout *state, int to_tempfile) { unsigned int ce_mode_s_ifmt = ce->ce_mode & S_IFMT; int fd, ret, fstat_done = 0; @@ -199,9 +200,9 @@ static int write_entry(struct cache_entry *ce, char *path, const struct checkout break; case S_IFGITLINK: if (to_tempfile) - return error("cannot create temporary subproject %s", path); + return error("cannot create temporary submodule %s", path); if (mkdir(path, 0777) < 0) - return error("cannot create subproject directory %s", path); + return error("cannot create submodule directory %s", path); break; default: return error("unknown file mode for %s in index", path); @@ -233,7 +234,8 @@ static int check_path(const char *path, int len, struct stat *st, int skiplen) return lstat(path, st); } -int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *topath) +int checkout_entry(struct cache_entry *ce, + const struct checkout *state, char *topath) { static char path[PATH_MAX + 1]; struct stat st; diff --git a/environment.c b/environment.c index 0cb67b22cf..5398c36dd4 100644 --- a/environment.c +++ b/environment.c @@ -22,6 +22,7 @@ int prefer_symlink_refs; int is_bare_repository_cfg = -1; /* unspecified */ int log_all_ref_updates = -1; /* unspecified */ int warn_ambiguous_refs = 1; +int warn_on_object_refname_ambiguity = 1; int repository_format_version; const char *git_commit_encoding; const char *git_log_output_encoding; diff --git a/exec_cmd.h b/exec_cmd.h index e2b546b615..e4c9702f02 100644 --- a/exec_cmd.h +++ b/exec_cmd.h @@ -7,6 +7,7 @@ extern const char *git_exec_path(void); extern void setup_path(void); extern const char **prepare_git_cmd(const char **argv); extern int execv_git_cmd(const char **argv); /* NULL terminated */ +LAST_ARG_MUST_BE_NULL extern int execl_git_cmd(const char *cmd, ...); extern const char *system_path(const char *path); diff --git a/fast-import.c b/fast-import.c index 23f625f561..21db3fc46d 100644 --- a/fast-import.c +++ b/fast-import.c @@ -1568,7 +1568,8 @@ static int tree_content_set( static int tree_content_remove( struct tree_entry *root, const char *p, - struct tree_entry *backup_leaf) + struct tree_entry *backup_leaf, + int allow_root) { struct tree_content *t; const char *slash1; @@ -1583,6 +1584,12 @@ static int tree_content_remove( if (!root->tree) load_tree(root); + + if (!*p && allow_root) { + e = root; + goto del_entry; + } + t = root->tree; for (i = 0; i < t->entry_count; i++) { e = t->entries[i]; @@ -1599,7 +1606,7 @@ static int tree_content_remove( goto del_entry; if (!e->tree) load_tree(e); - if (tree_content_remove(e, slash1 + 1, backup_leaf)) { + if (tree_content_remove(e, slash1 + 1, backup_leaf, 0)) { for (n = 0; n < e->tree->entry_count; n++) { if (e->tree->entries[n]->versions[1].mode) { hashclr(root->versions[1].sha1); @@ -1629,7 +1636,8 @@ del_entry: static int tree_content_get( struct tree_entry *root, const char *p, - struct tree_entry *leaf) + struct tree_entry *leaf, + int allow_root) { struct tree_content *t; const char *slash1; @@ -1641,31 +1649,39 @@ static int tree_content_get( n = slash1 - p; else n = strlen(p); - if (!n) + if (!n && !allow_root) die("Empty path component found in input"); if (!root->tree) load_tree(root); + + if (!n) { + e = root; + goto found_entry; + } + t = root->tree; for (i = 0; i < t->entry_count; i++) { e = t->entries[i]; if (e->name->str_len == n && !strncmp_icase(p, e->name->str_dat, n)) { - if (!slash1) { - memcpy(leaf, e, sizeof(*leaf)); - if (e->tree && is_null_sha1(e->versions[1].sha1)) - leaf->tree = dup_tree_content(e->tree); - else - leaf->tree = NULL; - return 1; - } + if (!slash1) + goto found_entry; if (!S_ISDIR(e->versions[1].mode)) return 0; if (!e->tree) load_tree(e); - return tree_content_get(e, slash1 + 1, leaf); + return tree_content_get(e, slash1 + 1, leaf, 0); } } return 0; + +found_entry: + memcpy(leaf, e, sizeof(*leaf)); + if (e->tree && is_null_sha1(e->versions[1].sha1)) + leaf->tree = dup_tree_content(e->tree); + else + leaf->tree = NULL; + return 1; } static int update_branch(struct branch *b) @@ -2179,7 +2195,7 @@ static uintmax_t do_change_note_fanout( } /* Rename fullpath to realpath */ - if (!tree_content_remove(orig_root, fullpath, &leaf)) + if (!tree_content_remove(orig_root, fullpath, &leaf, 0)) die("Failed to remove path %s", fullpath); tree_content_set(orig_root, realpath, leaf.versions[1].sha1, @@ -2314,7 +2330,7 @@ static void file_change_m(struct branch *b) /* Git does not track empty, non-toplevel directories. */ if (S_ISDIR(mode) && !memcmp(sha1, EMPTY_TREE_SHA1_BIN, 20) && *p) { - tree_content_remove(&b->branch_tree, p, NULL); + tree_content_remove(&b->branch_tree, p, NULL, 0); return; } @@ -2375,7 +2391,7 @@ static void file_change_d(struct branch *b) die("Garbage after path in: %s", command_buf.buf); p = uq.buf; } - tree_content_remove(&b->branch_tree, p, NULL); + tree_content_remove(&b->branch_tree, p, NULL, 1); } static void file_change_cr(struct branch *b, int rename) @@ -2413,9 +2429,9 @@ static void file_change_cr(struct branch *b, int rename) memset(&leaf, 0, sizeof(leaf)); if (rename) - tree_content_remove(&b->branch_tree, s, &leaf); + tree_content_remove(&b->branch_tree, s, &leaf, 1); else - tree_content_get(&b->branch_tree, s, &leaf); + tree_content_get(&b->branch_tree, s, &leaf, 1); if (!leaf.versions[1].mode) die("Path %s not in branch", s); if (!*d) { /* C "path/to/subdir" "" */ @@ -2521,7 +2537,7 @@ static void note_change_n(struct branch *b, unsigned char *old_fanout) } construct_path_with_fanout(sha1_to_hex(commit_sha1), *old_fanout, path); - if (tree_content_remove(&b->branch_tree, path, NULL)) + if (tree_content_remove(&b->branch_tree, path, NULL, 0)) b->num_notes--; if (is_null_sha1(sha1)) @@ -3051,6 +3067,8 @@ static void parse_ls(struct branch *b) struct object_entry *e = parse_treeish_dataref(&p); root = new_tree_entry(); hashcpy(root->versions[1].sha1, e->idx.sha1); + if (!is_null_sha1(root->versions[1].sha1)) + root->versions[1].mode = S_IFDIR; load_tree(root); if (*p++ != ' ') die("Missing space after tree-ish: %s", command_buf.buf); @@ -3065,7 +3083,7 @@ static void parse_ls(struct branch *b) die("Garbage after path in: %s", command_buf.buf); p = uq.buf; } - tree_content_get(root, p, &leaf); + tree_content_get(root, p, &leaf, 1); /* * A directory in preparation would have a sha1 of zero * until it is saved. Save, for simplicity. diff --git a/fetch-pack.c b/fetch-pack.c index abe5ffbba5..094267fd80 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -9,8 +9,10 @@ #include "fetch-pack.h" #include "remote.h" #include "run-command.h" +#include "connect.h" #include "transport.h" #include "version.h" +#include "prio-queue.h" static int transfer_unpack_limit = -1; static int fetch_unpack_limit = -1; @@ -37,7 +39,7 @@ static int marked; */ #define MAX_IN_VAIN 256 -static struct commit_list *rev_list; +static struct prio_queue rev_list = { compare_commits_by_commit_date }; static int non_common_revs, multi_ack, use_sideband, allow_tip_sha1_in_want; static void rev_list_push(struct commit *commit, int mark) @@ -49,7 +51,7 @@ static void rev_list_push(struct commit *commit, int mark) if (parse_commit(commit)) return; - commit_list_insert_by_date(commit, &rev_list); + prio_queue_put(&rev_list, commit); if (!(commit->object.flags & COMMON)) non_common_revs++; @@ -122,10 +124,10 @@ static const unsigned char *get_rev(void) unsigned int mark; struct commit_list *parents; - if (rev_list == NULL || non_common_revs == 0) + if (rev_list.nr == 0 || non_common_revs == 0) return NULL; - commit = rev_list->item; + commit = prio_queue_get(&rev_list); if (!commit->object.parsed) parse_commit(commit); parents = commit->parents; @@ -152,8 +154,6 @@ static const unsigned char *get_rev(void) mark_common(parents->item, 1, 0); parents = parents->next; } - - rev_list = rev_list->next; } return commit->object.sha1; @@ -442,7 +442,7 @@ static int find_common(struct fetch_pack_args *args, in_vain = 0; got_continue = 1; if (ack == ACK_ready) { - rev_list = NULL; + clear_prio_queue(&rev_list); got_ready = 1; } break; @@ -505,7 +505,7 @@ static int mark_complete(const char *refname, const unsigned char *sha1, int fla struct commit *commit = (struct commit *)o; if (!(commit->object.flags & COMPLETE)) { commit->object.flags |= COMPLETE; - commit_list_insert_by_date(commit, &complete); + commit_list_insert(commit, &complete); } } return 0; @@ -622,6 +622,7 @@ static int everything_local(struct fetch_pack_args *args, if (!args->depth) { for_each_ref(mark_complete, NULL); for_each_alternate_ref(mark_alternate_complete, NULL); + commit_list_sort_by_date(&complete); if (cutoff) mark_recent_complete_commits(args, cutoff); } @@ -897,6 +898,8 @@ static struct ref *do_fetch_pack(struct fetch_pack_args *args, packet_flush(fd[1]); if (args->depth > 0) setup_alternate_shallow(); + else + alternate_shallow_file = NULL; if (get_pack(args, fd, pack_lockfile)) die("git fetch-pack: fetch failed."); @@ -987,7 +990,7 @@ struct ref *fetch_pack(struct fetch_pack_args *args, } ref_cpy = do_fetch_pack(args, fd, ref, sought, nr_sought, pack_lockfile); - if (alternate_shallow_file) { + if (args->depth > 0 && alternate_shallow_file) { if (*alternate_shallow_file == '\0') { /* --unshallow */ unlink_or_warn(git_path("shallow")); rollback_lock_file(&shallow_lock); diff --git a/fetch-pack.h b/fetch-pack.h index 40f08bab24..461cbf39b2 100644 --- a/fetch-pack.h +++ b/fetch-pack.h @@ -2,6 +2,7 @@ #define FETCH_PACK_H #include "string-list.h" +#include "run-command.h" struct fetch_pack_args { const char *uploadpack; diff --git a/git-compat-util.h b/git-compat-util.h index ff193f4aa2..8752317fe9 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -129,8 +129,6 @@ #include <poll.h> #endif -extern int get_st_mode_bits(const char *path, int *mode); - #if defined(__MINGW32__) /* pull in Windows compatibility stuff */ #include "compat/mingw.h" @@ -171,7 +169,6 @@ typedef unsigned long uintptr_t; #undef _XOPEN_SOURCE #include <grp.h> #define _XOPEN_SOURCE 600 -#include "compat/cygwin.h" #else #undef _ALL_SOURCE /* AIX 5.3L defines a struct list with _ALL_SOURCE. */ #include <grp.h> @@ -303,6 +300,13 @@ extern char *gitbasename(char *); #endif #endif +/* The sentinel attribute is valid from gcc version 4.0 */ +#if defined(__GNUC__) && (__GNUC__ >= 4) +#define LAST_ARG_MUST_BE_NULL __attribute__((sentinel)) +#else +#define LAST_ARG_MUST_BE_NULL +#endif + #include "compat/bswap.h" #ifdef USE_WILDMATCH @@ -326,6 +330,16 @@ extern NORETURN void die_errno(const char *err, ...) __attribute__((format (prin extern int error(const char *err, ...) __attribute__((format (printf, 1, 2))); extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2))); +#ifndef NO_OPENSSL +#ifdef APPLE_COMMON_CRYPTO +#include "compat/apple-common-crypto.h" +#else +#include <openssl/evp.h> +#include <openssl/hmac.h> +#endif /* APPLE_COMMON_CRYPTO */ +#include <openssl/x509v3.h> +#endif /* NO_OPENSSL */ + /* * Let callers be aware of the constant return value; this can help * gcc with -Wuninitialized analysis. We restrict this trick to gcc, though, @@ -510,7 +524,7 @@ int inet_pton(int af, const char *src, void *dst); const char *inet_ntop(int af, const void *src, char *dst, size_t size); #endif -extern void release_pack_memory(size_t, int); +extern void release_pack_memory(size_t); typedef void (*try_to_free_t)(size_t); extern try_to_free_t set_try_to_free_routine(try_to_free_t); diff --git a/git-mergetool--lib.sh b/git-mergetool--lib.sh index 6a721064c2..feee6a4a0d 100644 --- a/git-mergetool--lib.sh +++ b/git-mergetool--lib.sh @@ -144,7 +144,7 @@ setup_user_tool () { setup_tool () { tool="$1" - # Fallback definitions, to be overriden by tools. + # Fallback definitions, to be overridden by tools. can_merge () { return 0 } @@ -1786,7 +1786,7 @@ class P4Submit(Command, P4UserMap): missingGitTags = gitTags - p4Labels self.exportGitTags(missingGitTags) - # exit with error unless everything applied perfecly + # exit with error unless everything applied perfectly if len(commits) != len(applied): sys.exit(1) @@ -2180,9 +2180,13 @@ class P4Sync(Command, P4UserMap): git_mode = "100755" if type_base == "symlink": git_mode = "120000" - # p4 print on a symlink contains "target\n"; remove the newline + # p4 print on a symlink sometimes contains "target\n"; + # if it does, remove the newline data = ''.join(contents) - contents = [data[:-1]] + if data[-1] == '\n': + contents = [data[:-1]] + else: + contents = [data] if type_base == "utf16": # p4 delivers different text in the python output to -G diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 157690b685..83d6d4676b 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -864,8 +864,11 @@ comment_for_reflog start if test ! -z "$switch_to" then + GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $switch_to" output git checkout "$switch_to" -- || - die "Could not checkout $switch_to" + die "Could not checkout $switch_to" + + comment_for_reflog start fi orig_head=$(git rev-parse --verify HEAD) || die "No HEAD?" @@ -1007,6 +1010,7 @@ has_action "$todo" || test -d "$rewritten" || test -n "$force_rebase" || skip_unnecessary_picks +GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" output git checkout $onto || die_abort "could not detach HEAD" git update-ref ORIG_HEAD $orig_head do_rest diff --git a/git-rebase.sh b/git-rebase.sh index 81b0346a5d..8d7659a22c 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -159,7 +159,7 @@ finish_rebase () { die "$(eval_gettext "Cannot store \$stash_sha1")" gettext 'Applying autostash resulted in conflicts. Your changes are safe in the stash. -You can run "git stash pop" or "git stash drop" it at any time. +You can run "git stash pop" or "git stash drop" at any time. ' fi fi @@ -542,7 +542,9 @@ then if test -z "$force_rebase" then # Lazily switch to the target branch if needed... - test -z "$switch_to" || git checkout "$switch_to" -- + test -z "$switch_to" || + GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $switch_to" \ + git checkout "$switch_to" -- say "$(eval_gettext "Current branch \$branch_name is up to date.")" finish_rebase exit 0 @@ -568,7 +570,9 @@ test "$type" = interactive && run_specific_rebase # Detach HEAD and reset the tree say "$(gettext "First, rewinding head to replay your work on top of it...")" -git checkout -q "$onto^0" || die "could not detach HEAD" + +GIT_REFLOG_ACTION="$GIT_REFLOG_ACTION: checkout $onto_name" \ + git checkout -q "$onto^0" || die "could not detach HEAD" git update-ref ORIG_HEAD $orig_head # If the $onto is a proper descendant of the tip of the branch, then diff --git a/git-request-pull.sh b/git-request-pull.sh index d566015975..ebf1269d29 100755 --- a/git-request-pull.sh +++ b/git-request-pull.sh @@ -51,8 +51,18 @@ fi tag_name=$(git describe --exact "$head^0" 2>/dev/null) test -n "$base" && test -n "$url" || usage -baserev=$(git rev-parse --verify "$base"^0) && -headrev=$(git rev-parse --verify "$head"^0) || exit + +baserev=$(git rev-parse --verify --quiet "$base"^0) +if test -z "$baserev" +then + die "fatal: Not a valid revision: $base" +fi + +headrev=$(git rev-parse --verify --quiet "$head"^0) +if test -z "$headrev" +then + die "fatal: Not a valid revision: $head" +fi merge_base=$(git merge-base $baserev $headrev) || die "fatal: No commits in common between $base and $head" diff --git a/git-send-email.perl b/git-send-email.perl index ecbf56f693..2162478392 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -69,6 +69,9 @@ git send-email [options] <file | directory | rev-list options > --smtp-pass <str> * Password for SMTP-AUTH; not necessary. --smtp-encryption <str> * tls or ssl; anything else disables. --smtp-ssl * Deprecated. Use '--smtp-encryption ssl'. + --smtp-ssl-cert-path <str> * Path to ca-certificates (either directory or file). + Pass an empty string to disable certificate + verification. --smtp-domain <str> * The domain name sent to HELO/EHLO handshake --smtp-debug <0|1> * Disable, enable Net::SMTP debug. @@ -194,7 +197,7 @@ sub do_edit { my ($thread, $chain_reply_to, $suppress_from, $signed_off_by_cc); my ($to_cmd, $cc_cmd); my ($smtp_server, $smtp_server_port, @smtp_server_options); -my ($smtp_authuser, $smtp_encryption); +my ($smtp_authuser, $smtp_encryption, $smtp_ssl_cert_path); my ($identity, $aliasfiletype, @alias_files, $smtp_domain); my ($validate, $confirm); my (@suppress_cc); @@ -220,6 +223,7 @@ my %config_settings = ( "smtpserveroption" => \@smtp_server_options, "smtpuser" => \$smtp_authuser, "smtppass" => \$smtp_authpass, + "smtpsslcertpath" => \$smtp_ssl_cert_path, "smtpdomain" => \$smtp_domain, "to" => \@initial_to, "tocmd" => \$to_cmd, @@ -287,6 +291,7 @@ my $rc = GetOptions("h" => \$help, "smtp-pass:s" => \$smtp_authpass, "smtp-ssl" => sub { $smtp_encryption = 'ssl' }, "smtp-encryption=s" => \$smtp_encryption, + "smtp-ssl-cert-path" => \$smtp_ssl_cert_path, "smtp-debug:i" => \$debug_net_smtp, "smtp-domain:s" => \$smtp_domain, "identity=s" => \$identity, @@ -1079,6 +1084,34 @@ sub smtp_auth_maybe { return $auth; } +sub ssl_verify_params { + eval { + require IO::Socket::SSL; + IO::Socket::SSL->import(qw/SSL_VERIFY_PEER SSL_VERIFY_NONE/); + }; + if ($@) { + print STDERR "Not using SSL_VERIFY_PEER due to out-of-date IO::Socket::SSL.\n"; + return; + } + + if (!defined $smtp_ssl_cert_path) { + $smtp_ssl_cert_path = "/etc/ssl/certs"; + } + + if ($smtp_ssl_cert_path eq "") { + return (SSL_verify_mode => SSL_VERIFY_NONE()); + } elsif (-d $smtp_ssl_cert_path) { + return (SSL_verify_mode => SSL_VERIFY_PEER(), + SSL_ca_path => $smtp_ssl_cert_path); + } elsif (-f $smtp_ssl_cert_path) { + return (SSL_verify_mode => SSL_VERIFY_PEER(), + SSL_ca_file => $smtp_ssl_cert_path); + } else { + print STDERR "Not using SSL_VERIFY_PEER because the CA path does not exist.\n"; + return (SSL_verify_mode => SSL_VERIFY_NONE()); + } +} + # Returns 1 if the message was sent, and 0 otherwise. # In actuality, the whole program dies when there # is an error sending a message. @@ -1183,20 +1216,24 @@ X-Mailer: git-send-email $gitversion $smtp_domain ||= maildomain(); $smtp ||= Net::SMTP::SSL->new($smtp_server, Hello => $smtp_domain, - Port => $smtp_server_port); + Port => $smtp_server_port, + ssl_verify_params()); } else { require Net::SMTP; $smtp_domain ||= maildomain(); - $smtp ||= Net::SMTP->new(smtp_host_string(), + $smtp_server_port ||= 25; + $smtp ||= Net::SMTP->new($smtp_server, Hello => $smtp_domain, - Debug => $debug_net_smtp); + Debug => $debug_net_smtp, + Port => $smtp_server_port); if ($smtp_encryption eq 'tls' && $smtp) { require Net::SMTP::SSL; $smtp->command('STARTTLS'); $smtp->response(); if ($smtp->code == 220) { - $smtp = Net::SMTP::SSL->start_SSL($smtp) + $smtp = Net::SMTP::SSL->start_SSL($smtp, + ssl_verify_params()) or die "STARTTLS failed! ".$smtp->message; $smtp_encryption = ''; # Send EHLO again to receive fresh diff --git a/git-sh-setup.sh b/git-sh-setup.sh index 7a964ad2ff..e15be51636 100644 --- a/git-sh-setup.sh +++ b/git-sh-setup.sh @@ -53,7 +53,7 @@ die () { die_with_status () { status=$1 shift - echo >&2 "$*" + printf >&2 '%s\n' "$*" exit "$status" } diff --git a/git-stash.sh b/git-stash.sh index 85c9e2c081..1e541a2125 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -195,7 +195,6 @@ save_stash () { keep_index= patch_mode= untracked= - force= while test $# != 0 do case "$1" in @@ -216,9 +215,6 @@ save_stash () { -u|--include-untracked) untracked=untracked ;; - -f|--force) - force=t - ;; -a|--all) untracked=all ;; @@ -262,14 +258,6 @@ save_stash () { say "$(gettext "No local changes to save")" exit 0 fi - if test -z "$untracked$force" && - test -n "$(git ls-files --killed | head -n 1)" - then - say "$(gettext "The following untracked files would NOT be saved but need to be removed by stash save:")" - test -n "$GIT_QUIET" || git ls-files --killed | sed 's/^/\t/' - say "$(gettext "Aborting. Consider using either the --force or --include-untracked option.")" >&2 - exit 1 - fi test -f "$GIT_DIR/logs/$ref_stash" || clear_stash || die "$(gettext "Cannot initialize stash")" diff --git a/git-submodule.sh b/git-submodule.sh index 945e296d30..2979197087 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -35,6 +35,7 @@ nofetch= update= prefix= custom_name= +depth= # The function takes at most 2 arguments. The first argument is the # URL that navigates to the submodule origin repo. When relative, this URL @@ -251,6 +252,7 @@ module_clone() name=$2 url=$3 reference="$4" + depth="$5" quiet= if test -n "$GIT_QUIET" then @@ -273,7 +275,7 @@ module_clone() mkdir -p "$gitdir_base" ( clear_local_git_env - git clone $quiet -n ${reference:+"$reference"} \ + git clone $quiet ${depth:+"$depth"} -n ${reference:+"$reference"} \ --separate-git-dir "$gitdir" "$url" "$sm_path" ) || die "$(eval_gettext "Clone of '\$url' into submodule path '\$sm_path' failed")" @@ -350,6 +352,14 @@ cmd_add() custom_name=$2 shift ;; + --depth) + case "$2" in '') usage ;; esac + depth="--depth=$2" + shift + ;; + --depth=*) + depth=$1 + ;; --) shift break @@ -459,7 +469,7 @@ Use -f if you really want to add it." >&2 echo "$(eval_gettext "Reactivating local git directory for submodule '\$sm_name'.")" fi fi - module_clone "$sm_path" "$sm_name" "$realrepo" "$reference" || exit + module_clone "$sm_path" "$sm_name" "$realrepo" "$reference" "$depth" || exit ( clear_local_git_env cd "$sm_path" && @@ -736,6 +746,14 @@ cmd_update() --checkout) update="checkout" ;; + --depth) + case "$2" in '') usage ;; esac + depth="--depth=$2" + shift + ;; + --depth=*) + depth=$1 + ;; --) shift break @@ -797,7 +815,7 @@ Maybe you want to use 'update --init'?")" if ! test -d "$sm_path"/.git -o -f "$sm_path"/.git then - module_clone "$sm_path" "$name" "$url" "$reference" || exit + module_clone "$sm_path" "$name" "$url" "$reference" "$depth" || exit cloned_modules="$cloned_modules;$name" subsha1= else @@ -860,6 +878,12 @@ Maybe you want to use 'update --init'?")" say_msg="$(eval_gettext "Submodule path '\$displaypath': merged in '\$sha1'")" must_die_on_failure=yes ;; + !*) + command="${update_module#!}" + die_msg="$(eval_gettext "Execution of '\$command \$sha1' failed in submodule path '\$prefix\$sm_path'")" + say_msg="$(eval_gettext "Submodule path '\$prefix\$sm_path': '\$command \$sha1'")" + must_die_on_failure=yes + ;; *) command="git checkout $subforce -q" die_msg="$(eval_gettext "Unable to checkout '\$sha1' in submodule path '\$displaypath'")" @@ -336,6 +336,7 @@ static void handle_internal_command(int argc, const char **argv) { "cat-file", cmd_cat_file, RUN_SETUP }, { "check-attr", cmd_check_attr, RUN_SETUP }, { "check-ignore", cmd_check_ignore, RUN_SETUP | NEED_WORK_TREE }, + { "check-mailmap", cmd_check_mailmap, RUN_SETUP }, { "check-ref-format", cmd_check_ref_format }, { "checkout", cmd_checkout, RUN_SETUP | NEED_WORK_TREE }, { "checkout-index", cmd_checkout_index, @@ -537,6 +538,13 @@ int main(int argc, char **av) if (!cmd) cmd = "git-help"; + /* + * Always open file descriptors 0/1/2 to avoid clobbering files + * in die(). It also avoids messing up when the pipes are dup'ed + * onto stdin/stdout/stderr in the child processes we spawn. + */ + sanitize_stdfds(); + git_setup_gettext(); /* @@ -107,10 +107,7 @@ static int is_executable(const char *name) !S_ISREG(st.st_mode)) return 0; -#if defined(GIT_WINDOWS_NATIVE) || defined(__CYGWIN__) -#if defined(__CYGWIN__) -if ((st.st_mode & S_IXUSR) == 0) -#endif +#if defined(GIT_WINDOWS_NATIVE) { /* cannot trust the executable bit, peek into the file instead */ char buf[3] = { 0 }; int n; diff --git a/http-push.c b/http-push.c index 395a8cfc10..6dad188b5f 100644 --- a/http-push.c +++ b/http-push.c @@ -663,7 +663,7 @@ static void add_fetch_request(struct object *obj) static int add_send_request(struct object *obj, struct remote_lock *lock) { - struct transfer_request *request = request_queue_head; + struct transfer_request *request; struct packed_git *target; /* Keep locks active */ @@ -45,6 +45,7 @@ static long curl_low_speed_time = -1; static int curl_ftp_no_epsv; static const char *curl_http_proxy; static const char *curl_cookie_file; +static int curl_save_cookies; static struct credential http_auth = CREDENTIAL_INIT; static int http_proactive_auth; static const char *user_agent; @@ -200,6 +201,10 @@ static int http_options(const char *var, const char *value, void *cb) if (!strcmp("http.cookiefile", var)) return git_config_string(&curl_cookie_file, var, value); + if (!strcmp("http.savecookies", var)) { + curl_save_cookies = git_config_bool(var, value); + return 0; + } if (!strcmp("http.postbuffer", var)) { http_post_buffer = git_config_int(var, value); @@ -513,6 +518,8 @@ struct active_request_slot *get_active_slot(void) slot->callback_data = NULL; slot->callback_func = NULL; curl_easy_setopt(slot->curl, CURLOPT_COOKIEFILE, curl_cookie_file); + if (curl_save_cookies) + curl_easy_setopt(slot->curl, CURLOPT_COOKIEJAR, curl_cookie_file); curl_easy_setopt(slot->curl, CURLOPT_HTTPHEADER, pragma_header); curl_easy_setopt(slot->curl, CURLOPT_ERRORBUFFER, curl_errorstr); curl_easy_setopt(slot->curl, CURLOPT_CUSTOMREQUEST, NULL); diff --git a/imap-send.c b/imap-send.c index d6b65e204c..6f5cc4f782 100644 --- a/imap-send.c +++ b/imap-send.c @@ -28,20 +28,6 @@ #include "prompt.h" #ifdef NO_OPENSSL typedef void *SSL; -#else -#ifdef APPLE_COMMON_CRYPTO -#include <CommonCrypto/CommonHMAC.h> -#define HMAC_CTX CCHmacContext -#define HMAC_Init(hmac, key, len, algo) CCHmacInit(hmac, algo, key, len) -#define HMAC_Update CCHmacUpdate -#define HMAC_Final(hmac, hash, ptr) CCHmacFinal(hmac, hash) -#define HMAC_CTX_cleanup(ignore) -#define EVP_md5() kCCHmacAlgMD5 -#else -#include <openssl/evp.h> -#include <openssl/hmac.h> -#endif -#include <openssl/x509v3.h> #endif static const char imap_send_usage[] = "git imap-send < <mbox>"; @@ -65,7 +65,7 @@ struct trie struct trie *fail; /* Aho-Corasick failure function. */ int depth; /* Depth of this node from the root. */ int shift; /* Shift function for search failures. */ - int maxshift; /* Max shift of self and descendents. */ + int maxshift; /* Max shift of self and descendants. */ }; /* Structure returned opaquely to the caller, containing everything. */ @@ -308,7 +308,7 @@ treefails (register struct tree const *tree, struct trie const *fail, treefails(tree->rlink, fail, recourse); /* Find, in the chain of fails going back to the root, the first - node that has a descendent on the current label. */ + node that has a descendant on the current label. */ while (fail) { link = fail->links; @@ -426,13 +426,13 @@ kwsprep (kwset_t kws) computing the delta table, failure function, and shift function. */ for (curr = last = kwset->trie; curr; curr = curr->next) { - /* Enqueue the immediate descendents in the level order queue. */ + /* Enqueue the immediate descendants in the level order queue. */ enqueue(curr->links, &last); curr->shift = kwset->mind; curr->maxshift = kwset->mind; - /* Update the delta table for the descendents of this node. */ + /* Update the delta table for the descendants of this node. */ treedelta(curr->links, curr->depth, delta); /* Compute the failure function for the descendants of this node. */ @@ -450,7 +450,7 @@ kwsprep (kwset_t kws) fail->shift = curr->depth - fail->depth; /* If the current node is accepting then the shift at the - fail and its descendents should be no larger than the + fail and its descendants should be no larger than the difference of their depths. */ if (curr->accepting && fail->maxshift > curr->depth - fail->depth) fail->maxshift = curr->depth - fail->depth; diff --git a/line-log.c b/line-log.c index 843a334bf0..8b6e497b3f 100644 --- a/line-log.c +++ b/line-log.c @@ -23,7 +23,7 @@ static void range_set_grow(struct range_set *rs, size_t extra) /* Either initialization would be fine */ #define RANGE_SET_INIT {0} -static void range_set_init(struct range_set *rs, size_t prealloc) +void range_set_init(struct range_set *rs, size_t prealloc) { rs->alloc = rs->nr = 0; rs->ranges = NULL; @@ -31,7 +31,7 @@ static void range_set_init(struct range_set *rs, size_t prealloc) range_set_grow(rs, prealloc); } -static void range_set_release(struct range_set *rs) +void range_set_release(struct range_set *rs) { free(rs->ranges); rs->alloc = rs->nr = 0; @@ -56,7 +56,7 @@ static void range_set_move(struct range_set *dst, struct range_set *src) } /* tack on a _new_ range _at the end_ */ -static void range_set_append_unsafe(struct range_set *rs, long a, long b) +void range_set_append_unsafe(struct range_set *rs, long a, long b) { assert(a <= b); range_set_grow(rs, 1); @@ -65,7 +65,7 @@ static void range_set_append_unsafe(struct range_set *rs, long a, long b) rs->nr++; } -static void range_set_append(struct range_set *rs, long a, long b) +void range_set_append(struct range_set *rs, long a, long b) { assert(rs->nr == 0 || rs->ranges[rs->nr-1].end <= a); range_set_append_unsafe(rs, a, b); @@ -107,16 +107,19 @@ static void range_set_check_invariants(struct range_set *rs) * In-place pass of sorting and merging the ranges in the range set, * to establish the invariants when we get the ranges from the user */ -static void sort_and_merge_range_set(struct range_set *rs) +void sort_and_merge_range_set(struct range_set *rs) { int i; - int o = 1; /* output cursor */ + int o = 0; /* output cursor */ qsort(rs->ranges, rs->nr, sizeof(struct range), range_cmp); - for (i = 1; i < rs->nr; i++) { - if (rs->ranges[i].start <= rs->ranges[o-1].end) { - rs->ranges[o-1].end = rs->ranges[i].end; + for (i = 0; i < rs->nr; i++) { + if (rs->ranges[i].start == rs->ranges[i].end) + continue; + if (o > 0 && rs->ranges[i].start <= rs->ranges[o-1].end) { + if (rs->ranges[o-1].end < rs->ranges[i].end) + rs->ranges[o-1].end = rs->ranges[i].end; } else { rs->ranges[o].start = rs->ranges[i].start; rs->ranges[o].end = rs->ranges[i].end; @@ -288,7 +291,6 @@ static void line_log_data_insert(struct line_log_data **list, if (p) { range_set_append_unsafe(&p->ranges, begin, end); - sort_and_merge_range_set(&p->ranges); free(path); return; } @@ -562,12 +564,14 @@ parse_lines(struct commit *commit, const char *prefix, struct string_list *args) struct nth_line_cb cb_data; struct string_list_item *item; struct line_log_data *ranges = NULL; + struct line_log_data *p; for_each_string_list_item(item, args) { const char *name_part, *range_part; char *full_name; struct diff_filespec *spec; long begin = 0, end = 0; + long anchor; name_part = skip_range_arg(item->string); if (!name_part || *name_part != ':' || !name_part[1]) @@ -586,17 +590,23 @@ parse_lines(struct commit *commit, const char *prefix, struct string_list *args) cb_data.lines = lines; cb_data.line_ends = ends; + p = search_line_log_data(ranges, full_name, NULL); + if (p && p->ranges.nr) + anchor = p->ranges.ranges[p->ranges.nr - 1].end + 1; + else + anchor = 1; + if (parse_range_arg(range_part, nth_line, &cb_data, - lines, &begin, &end, + lines, anchor, &begin, &end, full_name)) die("malformed -L argument '%s'", range_part); + if (lines < end || ((lines || begin) && lines < begin)) + die("file %s has only %lu lines", name_part, lines); if (begin < 1) begin = 1; if (end < 1) end = lines; begin--; - if (lines < end || lines < begin) - die("file %s has only %ld lines", name_part, lines); line_log_data_insert(&ranges, full_name, begin, end); free_filespec(spec); @@ -604,6 +614,9 @@ parse_lines(struct commit *commit, const char *prefix, struct string_list *args) ends = NULL; } + for (p = ranges; p; p = p->next) + sort_and_merge_range_set(&p->ranges); + return ranges; } diff --git a/line-log.h b/line-log.h index 8bea45fd78..a9212d84e4 100644 --- a/line-log.h +++ b/line-log.h @@ -25,6 +25,18 @@ struct diff_ranges { struct range_set target; }; +extern void range_set_init(struct range_set *, size_t prealloc); +extern void range_set_release(struct range_set *); +/* Range includes start; excludes end */ +extern void range_set_append_unsafe(struct range_set *, long start, long end); +/* New range must begin at or after end of last added range */ +extern void range_set_append(struct range_set *, long start, long end); +/* + * In-place pass of sorting and merging the ranges in the range set, + * to sort and make the ranges disjoint. + */ +extern void sort_and_merge_range_set(struct range_set *); + /* Linked list of interesting files and their associated ranges. The * list must be kept sorted by path. * diff --git a/line-range.c b/line-range.c index 8faf943745..de4e32f942 100644 --- a/line-range.c +++ b/line-range.c @@ -6,6 +6,18 @@ /* * Parse one item in the -L option + * + * 'begin' is applicable only to relative range anchors. Absolute anchors + * ignore this value. + * + * When parsing "-L A,B", parse_loc() is called once for A and once for B. + * + * When parsing A, 'begin' must be a negative number, the absolute value of + * which is the line at which relative start-of-range anchors should be + * based. Beginning of file is represented by -1. + * + * When parsing B, 'begin' must be the positive line number immediately + * following the line computed for 'A'. */ static const char *parse_loc(const char *spec, nth_line_fn_t nth_line, void *data, long lines, long begin, long *ret) @@ -21,11 +33,13 @@ static const char *parse_loc(const char *spec, nth_line_fn_t nth_line, * for 20 lines, or "-L <something>,-5" for 5 lines ending at * <something>. */ - if (1 < begin && (spec[0] == '+' || spec[0] == '-')) { + if (1 <= begin && (spec[0] == '+' || spec[0] == '-')) { num = strtol(spec + 1, &term, 10); if (term != spec + 1) { if (!ret) return term; + if (num == 0) + die("-L invalid empty range"); if (spec[0] == '-') num = 0 - num; if (0 < num) @@ -40,10 +54,23 @@ static const char *parse_loc(const char *spec, nth_line_fn_t nth_line, } num = strtol(spec, &term, 10); if (term != spec) { - if (ret) + if (ret) { + if (num <= 0) + die("-L invalid line number: %ld", num); *ret = num; + } return term; } + + if (begin < 0) { + if (spec[0] != '^') + begin = -begin; + else { + begin = 1; + spec++; + } + } + if (spec[0] != '/') return spec; @@ -83,7 +110,8 @@ static const char *parse_loc(const char *spec, nth_line_fn_t nth_line, else { char errbuf[1024]; regerror(reg_error, ®exp, errbuf, 1024); - die("-L parameter '%s': %s", spec + 1, errbuf); + die("-L parameter '%s' starting at line %ld: %s", + spec + 1, begin + 1, errbuf); } } @@ -136,7 +164,7 @@ static const char *find_funcname_matching_regexp(xdemitconf_t *xecfg, const char } static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_cb, - void *cb_data, long lines, long *begin, long *end, + void *cb_data, long lines, long anchor, long *begin, long *end, const char *path) { char *pattern; @@ -148,6 +176,11 @@ static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_ int reg_error; regex_t regexp; + if (*arg == '^') { + anchor = 1; + arg++; + } + assert(*arg == ':'); term = arg+1; while (*term && *term != ':') { @@ -162,7 +195,8 @@ static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_ pattern = xstrndup(arg+1, term-(arg+1)); - start = nth_line_cb(cb_data, 0); + anchor--; /* input is in human terms */ + start = nth_line_cb(cb_data, anchor); drv = userdiff_find_by_path(path); if (drv && drv->funcname.pattern) { @@ -180,7 +214,8 @@ static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_ p = find_funcname_matching_regexp(xecfg, (char*) start, ®exp); if (!p) - die("-L parameter '%s': no match", pattern); + die("-L parameter '%s' starting at line %ld: no match", + pattern, anchor + 1); *begin = 0; while (p > nth_line_cb(cb_data, *begin)) (*begin)++; @@ -208,17 +243,24 @@ static const char *parse_range_funcname(const char *arg, nth_line_fn_t nth_line_ } int parse_range_arg(const char *arg, nth_line_fn_t nth_line_cb, - void *cb_data, long lines, long *begin, long *end, - const char *path) + void *cb_data, long lines, long anchor, + long *begin, long *end, const char *path) { - if (*arg == ':') { - arg = parse_range_funcname(arg, nth_line_cb, cb_data, lines, begin, end, path); + *begin = *end = 0; + + if (anchor < 1) + anchor = 1; + if (anchor > lines) + anchor = lines + 1; + + if (*arg == ':' || (*arg == '^' && *(arg + 1) == ':')) { + arg = parse_range_funcname(arg, nth_line_cb, cb_data, lines, anchor, begin, end, path); if (!arg || *arg) return -1; return 0; } - arg = parse_loc(arg, nth_line_cb, cb_data, lines, 1, begin); + arg = parse_loc(arg, nth_line_cb, cb_data, lines, -anchor, begin); if (*arg == ',') arg = parse_loc(arg + 1, nth_line_cb, cb_data, lines, *begin + 1, end); @@ -226,13 +268,18 @@ int parse_range_arg(const char *arg, nth_line_fn_t nth_line_cb, if (*arg) return -1; + if (*begin && *end && *end < *begin) { + long tmp; + tmp = *end; *end = *begin; *begin = tmp; + } + return 0; } const char *skip_range_arg(const char *arg) { - if (*arg == ':') - return parse_range_funcname(arg, NULL, NULL, 0, NULL, NULL, NULL); + if (*arg == ':' || (*arg == '^' && *(arg + 1) == ':')) + return parse_range_funcname(arg, NULL, NULL, 0, 0, NULL, NULL, NULL); arg = parse_loc(arg, NULL, NULL, 0, -1, NULL); diff --git a/line-range.h b/line-range.h index ae3d0123b4..83ba3c25e8 100644 --- a/line-range.h +++ b/line-range.h @@ -9,6 +9,9 @@ * line 'lno' inside the 'cb_data'. The caller is expected to already * have a suitable map at hand to make this a constant-time lookup. * + * 'anchor' is the 1-based line at which relative range specifications + * should be anchored. Absolute ranges are unaffected by this value. + * * Returns 0 in case of success and -1 if there was an error. The * actual range is stored in *begin and *end. The counting starts * at 1! In case of error, the caller should show usage message. @@ -18,7 +21,7 @@ typedef const char *(*nth_line_fn_t)(void *data, long lno); extern int parse_range_arg(const char *arg, nth_line_fn_t nth_line_cb, - void *cb_data, long lines, + void *cb_data, long lines, long anchor, long *begin, long *end, const char *path); diff --git a/log-tree.c b/log-tree.c index 60f32a3965..8534d91826 100644 --- a/log-tree.c +++ b/log-tree.c @@ -618,6 +618,8 @@ void show_log(struct rev_info *opt) ctx.mailmap = opt->mailmap; ctx.color = opt->diffopt.use_color; ctx.output_encoding = get_log_output_encoding(); + if (opt->from_ident.mail_begin && opt->from_ident.name_begin) + ctx.from_ident = &opt->from_ident; pretty_print_commit(&ctx, commit, &msgbuf); if (opt->add_signoff) @@ -736,7 +738,7 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log sha1 = commit->tree->object.sha1; /* Root commit? */ - parents = commit->parents; + parents = get_saved_parents(opt, commit); if (!parents) { if (opt->show_root_diff) { diff_root_tree_sha1(sha1, "", &opt->diffopt); @@ -5,8 +5,10 @@ #define DEBUG_MAILMAP 0 #if DEBUG_MAILMAP #define debug_mm(...) fprintf(stderr, __VA_ARGS__) +#define debug_str(X) ((X) ? (X) : "(none)") #else static inline void debug_mm(const char *format, ...) {} +static inline const char *debug_str(const char *s) { return s; } #endif const char *git_mailmap_file; @@ -29,7 +31,8 @@ struct mailmap_entry { static void free_mailmap_info(void *p, const char *s) { struct mailmap_info *mi = (struct mailmap_info *)p; - debug_mm("mailmap: -- complex: '%s' -> '%s' <%s>\n", s, mi->name, mi->email); + debug_mm("mailmap: -- complex: '%s' -> '%s' <%s>\n", + s, debug_str(mi->name), debug_str(mi->email)); free(mi->name); free(mi->email); } @@ -37,8 +40,11 @@ static void free_mailmap_info(void *p, const char *s) static void free_mailmap_entry(void *p, const char *s) { struct mailmap_entry *me = (struct mailmap_entry *)p; - debug_mm("mailmap: removing entries for <%s>, with %d sub-entries\n", s, me->namemap.nr); - debug_mm("mailmap: - simple: '%s' <%s>\n", me->name, me->email); + debug_mm("mailmap: removing entries for <%s>, with %d sub-entries\n", + s, me->namemap.nr); + debug_mm("mailmap: - simple: '%s' <%s>\n", + debug_str(me->name), debug_str(me->email)); + free(me->name); free(me->email); @@ -47,18 +53,11 @@ static void free_mailmap_entry(void *p, const char *s) } static void add_mapping(struct string_list *map, - char *new_name, char *new_email, char *old_name, char *old_email) + char *new_name, char *new_email, + char *old_name, char *old_email) { struct mailmap_entry *me; int index; - char *p; - - if (old_email) - for (p = old_email; *p; p++) - *p = tolower(*p); - if (new_email) - for (p = new_email; *p; p++) - *p = tolower(*p); if (old_email == NULL) { old_email = new_email; @@ -68,16 +67,21 @@ static void add_mapping(struct string_list *map, if ((index = string_list_find_insert_index(map, old_email, 1)) < 0) { /* mailmap entry exists, invert index value */ index = -1 - index; + me = (struct mailmap_entry *)map->items[index].util; } else { /* create mailmap entry */ - struct string_list_item *item = string_list_insert_at_index(map, index, old_email); - item->util = xcalloc(1, sizeof(struct mailmap_entry)); - ((struct mailmap_entry *)item->util)->namemap.strdup_strings = 1; + struct string_list_item *item; + + item = string_list_insert_at_index(map, index, old_email); + me = xcalloc(1, sizeof(struct mailmap_entry)); + me->namemap.strdup_strings = 1; + me->namemap.cmp = strcasecmp; + item->util = me; } - me = (struct mailmap_entry *)map->items[index].util; if (old_name == NULL) { - debug_mm("mailmap: adding (simple) entry for %s at index %d\n", old_email, index); + debug_mm("mailmap: adding (simple) entry for %s at index %d\n", + old_email, index); /* Replace current name and new email for simple entry */ if (new_name) { free(me->name); @@ -89,7 +93,8 @@ static void add_mapping(struct string_list *map, } } else { struct mailmap_info *mi = xcalloc(1, sizeof(struct mailmap_info)); - debug_mm("mailmap: adding (complex) entry for %s at index %d\n", old_email, index); + debug_mm("mailmap: adding (complex) entry for %s at index %d\n", + old_email, index); if (new_name) mi->name = xstrdup(new_name); if (new_email) @@ -98,11 +103,12 @@ static void add_mapping(struct string_list *map, } debug_mm("mailmap: '%s' <%s> -> '%s' <%s>\n", - old_name, old_email, new_name, new_email); + debug_str(old_name), old_email, + debug_str(new_name), debug_str(new_email)); } static char *parse_name_and_email(char *buffer, char **name, - char **email, int allow_empty_email) + char **email, int allow_empty_email) { char *left, *right, *nstart, *nend; *name = *email = NULL; @@ -122,7 +128,7 @@ static char *parse_name_and_email(char *buffer, char **name, while (nend > nstart && isspace(*nend)) --nend; - *name = (nstart < nend ? nstart : NULL); + *name = (nstart <= nend ? nstart : NULL); *email = left+1; *(nend+1) = '\0'; *right++ = '\0'; @@ -306,21 +312,25 @@ static struct string_list_item *lookup_prefix(struct string_list *map, } int map_user(struct string_list *map, - const char **email, size_t *emaillen, - const char **name, size_t *namelen) + const char **email, size_t *emaillen, + const char **name, size_t *namelen) { struct string_list_item *item; struct mailmap_entry *me; debug_mm("map_user: map '%.*s' <%.*s>\n", - *name, *namelen, *emaillen, *email); + (int)*namelen, debug_str(*name), + (int)*emaillen, debug_str(*email)); item = lookup_prefix(map, *email, *emaillen); if (item != NULL) { me = (struct mailmap_entry *)item->util; if (me->namemap.nr) { - /* The item has multiple items, so we'll look up on name too */ - /* If the name is not found, we choose the simple entry */ + /* + * The item has multiple items, so we'll look up on + * name too. If the name is not found, we choose the + * simple entry. + */ struct string_list_item *subitem; subitem = lookup_prefix(&me->namemap, *name, *namelen); if (subitem) @@ -341,8 +351,9 @@ int map_user(struct string_list *map, *name = mi->name; *namelen = strlen(*name); } - debug_mm("map_user: to '%.*s' <.*%s>\n", *namelen, *name, - *emaillen, *email); + debug_mm("map_user: to '%.*s' <%.*s>\n", + (int)*namelen, debug_str(*name), + (int)*emaillen, debug_str(*email)); return 1; } debug_mm("map_user: --\n"); diff --git a/merge-recursive.c b/merge-recursive.c index 8395b9b08a..40eb840a52 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -251,7 +251,7 @@ struct tree *write_tree_from_memory(struct merge_options *o) int i; fprintf(stderr, "BUG: There are unmerged index entries:\n"); for (i = 0; i < active_nr; i++) { - struct cache_entry *ce = active_cache[i]; + const struct cache_entry *ce = active_cache[i]; if (ce_stage(ce)) fprintf(stderr, "BUG: %d %.*s\n", ce_stage(ce), (int)ce_namelen(ce), ce->name); @@ -264,7 +264,8 @@ struct tree *write_tree_from_memory(struct merge_options *o) if (!cache_tree_fully_valid(active_cache_tree) && cache_tree_update(active_cache_tree, - active_cache, active_nr, 0) < 0) + (const struct cache_entry * const *)active_cache, + active_nr, 0) < 0) die(_("error building trees")); result = lookup_tree(active_cache_tree->sha1); @@ -339,7 +340,7 @@ static struct string_list *get_unmerged(void) for (i = 0; i < active_nr; i++) { struct string_list_item *item; struct stage_data *e; - struct cache_entry *ce = active_cache[i]; + const struct cache_entry *ce = active_cache[i]; if (!ce_stage(ce)) continue; @@ -77,7 +77,7 @@ const char *default_notes_ref(void); * variable is used, and if that is missing, the default notes ref is used * ("refs/notes/commits"). * - * If you need to re-intialize a notes_tree structure (e.g. when switching from + * If you need to re-initialize a notes_tree structure (e.g. when switching from * one notes ref to another), you must first de-initialize the notes_tree * structure by calling free_notes(struct notes_tree *). * @@ -145,7 +145,7 @@ struct object *lookup_unknown_object(const unsigned char *sha1) struct object *parse_object_buffer(const unsigned char *sha1, enum object_type type, unsigned long size, void *buffer, int *eaten_p) { struct object *obj; - int eaten = 0; + *eaten_p = 0; obj = NULL; if (type == OBJ_BLOB) { @@ -164,7 +164,7 @@ struct object *parse_object_buffer(const unsigned char *sha1, enum object_type t if (!tree->object.parsed) { if (parse_tree_buffer(tree, buffer, size)) return NULL; - eaten = 1; + *eaten_p = 1; } } } else if (type == OBJ_COMMIT) { @@ -174,7 +174,7 @@ struct object *parse_object_buffer(const unsigned char *sha1, enum object_type t return NULL; if (!commit->buffer) { commit->buffer = buffer; - eaten = 1; + *eaten_p = 1; } obj = &commit->object; } @@ -191,7 +191,6 @@ struct object *parse_object_buffer(const unsigned char *sha1, enum object_type t } if (obj && obj->type == OBJ_NONE) obj->type = type; - *eaten_p = eaten; return obj; } diff --git a/pack-revindex.c b/pack-revindex.c index 77a0465be6..b4d2b35bb3 100644 --- a/pack-revindex.c +++ b/pack-revindex.c @@ -59,11 +59,101 @@ static void init_pack_revindex(void) /* revindex elements are lazily initialized */ } -static int cmp_offset(const void *a_, const void *b_) +/* + * This is a least-significant-digit radix sort. + * + * It sorts each of the "n" items in "entries" by its offset field. The "max" + * parameter must be at least as large as the largest offset in the array, + * and lets us quit the sort early. + */ +static void sort_revindex(struct revindex_entry *entries, unsigned n, off_t max) { - const struct revindex_entry *a = a_; - const struct revindex_entry *b = b_; - return (a->offset < b->offset) ? -1 : (a->offset > b->offset) ? 1 : 0; + /* + * We use a "digit" size of 16 bits. That keeps our memory + * usage reasonable, and we can generally (for a 4G or smaller + * packfile) quit after two rounds of radix-sorting. + */ +#define DIGIT_SIZE (16) +#define BUCKETS (1 << DIGIT_SIZE) + /* + * We want to know the bucket that a[i] will go into when we are using + * the digit that is N bits from the (least significant) end. + */ +#define BUCKET_FOR(a, i, bits) (((a)[(i)].offset >> (bits)) & (BUCKETS-1)) + + /* + * We need O(n) temporary storage. Rather than do an extra copy of the + * partial results into "entries", we sort back and forth between the + * real array and temporary storage. In each iteration of the loop, we + * keep track of them with alias pointers, always sorting from "from" + * to "to". + */ + struct revindex_entry *tmp = xmalloc(n * sizeof(*tmp)); + struct revindex_entry *from = entries, *to = tmp; + int bits; + unsigned *pos = xmalloc(BUCKETS * sizeof(*pos)); + + /* + * If (max >> bits) is zero, then we know that the radix digit we are + * on (and any higher) will be zero for all entries, and our loop will + * be a no-op, as everybody lands in the same zero-th bucket. + */ + for (bits = 0; max >> bits; bits += DIGIT_SIZE) { + struct revindex_entry *swap; + unsigned i; + + memset(pos, 0, BUCKETS * sizeof(*pos)); + + /* + * We want pos[i] to store the index of the last element that + * will go in bucket "i" (actually one past the last element). + * To do this, we first count the items that will go in each + * bucket, which gives us a relative offset from the last + * bucket. We can then cumulatively add the index from the + * previous bucket to get the true index. + */ + for (i = 0; i < n; i++) + pos[BUCKET_FOR(from, i, bits)]++; + for (i = 1; i < BUCKETS; i++) + pos[i] += pos[i-1]; + + /* + * Now we can drop the elements into their correct buckets (in + * our temporary array). We iterate the pos counter backwards + * to avoid using an extra index to count up. And since we are + * going backwards there, we must also go backwards through the + * array itself, to keep the sort stable. + * + * Note that we use an unsigned iterator to make sure we can + * handle 2^32-1 objects, even on a 32-bit system. But this + * means we cannot use the more obvious "i >= 0" loop condition + * for counting backwards, and must instead check for + * wrap-around with UINT_MAX. + */ + for (i = n - 1; i != UINT_MAX; i--) + to[--pos[BUCKET_FOR(from, i, bits)]] = from[i]; + + /* + * Now "to" contains the most sorted list, so we swap "from" and + * "to" for the next iteration. + */ + swap = from; + from = to; + to = swap; + } + + /* + * If we ended with our data in the original array, great. If not, + * we have to move it back from the temporary storage. + */ + if (from != entries) + memcpy(entries, tmp, n * sizeof(*entries)); + free(tmp); + free(pos); + +#undef BUCKET_FOR +#undef BUCKETS +#undef DIGIT_SIZE } /* @@ -72,8 +162,8 @@ static int cmp_offset(const void *a_, const void *b_) static void create_pack_revindex(struct pack_revindex *rix) { struct packed_git *p = rix->p; - int num_ent = p->num_objects; - int i; + unsigned num_ent = p->num_objects; + unsigned i; const char *index = p->index_data; rix->revindex = xmalloc(sizeof(*rix->revindex) * (num_ent + 1)); @@ -108,13 +198,13 @@ static void create_pack_revindex(struct pack_revindex *rix) */ rix->revindex[num_ent].offset = p->pack_size - 20; rix->revindex[num_ent].nr = -1; - qsort(rix->revindex, num_ent, sizeof(*rix->revindex), cmp_offset); + sort_revindex(rix->revindex, num_ent, p->pack_size); } struct revindex_entry *find_pack_revindex(struct packed_git *p, off_t ofs) { int num; - int lo, hi; + unsigned lo, hi; struct pack_revindex *rix; struct revindex_entry *revindex; @@ -132,7 +222,7 @@ struct revindex_entry *find_pack_revindex(struct packed_git *p, off_t ofs) lo = 0; hi = p->num_objects + 1; do { - int mi = (lo + hi) / 2; + unsigned mi = lo + (hi - lo) / 2; if (revindex[mi].offset == ofs) { return revindex + mi; } else if (ofs < revindex[mi].offset) diff --git a/parse-options.c b/parse-options.c index c2cbca25cc..62e9b1cc68 100644 --- a/parse-options.c +++ b/parse-options.c @@ -43,8 +43,42 @@ static void fix_filename(const char *prefix, const char **file) *file = xstrdup(prefix_filename(prefix, strlen(prefix), *file)); } +static int opt_command_mode_error(const struct option *opt, + const struct option *all_opts, + int flags) +{ + const struct option *that; + struct strbuf message = STRBUF_INIT; + struct strbuf that_name = STRBUF_INIT; + + /* + * Find the other option that was used to set the variable + * already, and report that this is not compatible with it. + */ + for (that = all_opts; that->type != OPTION_END; that++) { + if (that == opt || + that->type != OPTION_CMDMODE || + that->value != opt->value || + that->defval != *(int *)opt->value) + continue; + + if (that->long_name) + strbuf_addf(&that_name, "--%s", that->long_name); + else + strbuf_addf(&that_name, "-%c", that->short_name); + strbuf_addf(&message, ": incompatible with %s", that_name.buf); + strbuf_release(&that_name); + opterror(opt, message.buf, flags); + strbuf_release(&message); + return -1; + } + return opterror(opt, ": incompatible with something else", flags); +} + static int get_value(struct parse_opt_ctx_t *p, - const struct option *opt, int flags) + const struct option *opt, + const struct option *all_opts, + int flags) { const char *s, *arg; const int unset = flags & OPT_UNSET; @@ -83,6 +117,16 @@ static int get_value(struct parse_opt_ctx_t *p, *(int *)opt->value = unset ? 0 : opt->defval; return 0; + case OPTION_CMDMODE: + /* + * Giving the same mode option twice, although is unnecessary, + * is not a grave error, so let it pass. + */ + if (*(int *)opt->value && *(int *)opt->value != opt->defval) + return opt_command_mode_error(opt, all_opts, flags); + *(int *)opt->value = opt->defval; + return 0; + case OPTION_SET_PTR: *(void **)opt->value = unset ? NULL : (void *)opt->defval; return 0; @@ -143,12 +187,13 @@ static int get_value(struct parse_opt_ctx_t *p, static int parse_short_opt(struct parse_opt_ctx_t *p, const struct option *options) { + const struct option *all_opts = options; const struct option *numopt = NULL; for (; options->type != OPTION_END; options++) { if (options->short_name == *p->opt) { p->opt = p->opt[1] ? p->opt + 1 : NULL; - return get_value(p, options, OPT_SHORT); + return get_value(p, options, all_opts, OPT_SHORT); } /* @@ -177,6 +222,7 @@ static int parse_short_opt(struct parse_opt_ctx_t *p, const struct option *optio static int parse_long_opt(struct parse_opt_ctx_t *p, const char *arg, const struct option *options) { + const struct option *all_opts = options; const char *arg_end = strchr(arg, '='); const struct option *abbrev_option = NULL, *ambiguous_option = NULL; int abbrev_flags = 0, ambiguous_flags = 0; @@ -253,7 +299,7 @@ is_abbreviated: continue; p->opt = rest + 1; } - return get_value(p, options, flags ^ opt_flags); + return get_value(p, options, all_opts, flags ^ opt_flags); } if (ambiguous_option) @@ -265,18 +311,20 @@ is_abbreviated: (abbrev_flags & OPT_UNSET) ? "no-" : "", abbrev_option->long_name); if (abbrev_option) - return get_value(p, abbrev_option, abbrev_flags); + return get_value(p, abbrev_option, all_opts, abbrev_flags); return -2; } static int parse_nodash_opt(struct parse_opt_ctx_t *p, const char *arg, const struct option *options) { + const struct option *all_opts = options; + for (; options->type != OPTION_END; options++) { if (!(options->flags & PARSE_OPT_NODASH)) continue; if (options->short_name == arg[0] && arg[1] == '\0') - return get_value(p, options, OPT_SHORT); + return get_value(p, options, all_opts, OPT_SHORT); } return -2; } diff --git a/parse-options.h b/parse-options.h index c378b75b13..8736006ed7 100644 --- a/parse-options.h +++ b/parse-options.h @@ -13,6 +13,7 @@ enum parse_opt_type { OPTION_COUNTUP, OPTION_SET_INT, OPTION_SET_PTR, + OPTION_CMDMODE, /* options with arguments (usually) */ OPTION_STRING, OPTION_INTEGER, @@ -21,9 +22,6 @@ enum parse_opt_type { OPTION_FILENAME }; -/* Deprecated synonym */ -#define OPTION_BOOLEAN OPTION_COUNTUP - enum parse_opt_flags { PARSE_OPT_KEEP_DASHDASH = 1, PARSE_OPT_STOP_AT_NON_OPTION = 2, @@ -128,8 +126,12 @@ struct option { #define OPT_SET_INT(s, l, v, h, i) { OPTION_SET_INT, (s), (l), (v), NULL, \ (h), PARSE_OPT_NOARG, NULL, (i) } #define OPT_BOOL(s, l, v, h) OPT_SET_INT(s, l, v, h, 1) +#define OPT_HIDDEN_BOOL(s, l, v, h) { OPTION_SET_INT, (s), (l), (v), NULL, \ + (h), PARSE_OPT_NOARG | PARSE_OPT_HIDDEN, NULL, 1} #define OPT_SET_PTR(s, l, v, h, p) { OPTION_SET_PTR, (s), (l), (v), NULL, \ (h), PARSE_OPT_NOARG, NULL, (p) } +#define OPT_CMDMODE(s, l, v, h, i) { OPTION_CMDMODE, (s), (l), (v), NULL, \ + (h), PARSE_OPT_NOARG|PARSE_OPT_NONEG, NULL, (i) } #define OPT_INTEGER(s, l, v, h) { OPTION_INTEGER, (s), (l), (v), N_("n"), (h) } #define OPT_STRING(s, l, v, a, h) { OPTION_STRING, (s), (l), (v), (a), (h) } #define OPT_STRING_LIST(s, l, v, a, h) \ @@ -180,7 +182,7 @@ extern NORETURN void usage_msg_opt(const char *msg, extern int optbug(const struct option *opt, const char *reason); extern int opterror(const struct option *opt, const char *reason, int flags); -#if defined(__GNUC__) && ! defined(clang) +#if defined(__GNUC__) && ! defined(__clang__) #define opterror(o,r,f) (opterror((o),(r),(f)), -1) #endif @@ -5,13 +5,7 @@ #include "strbuf.h" #include "string-list.h" -#ifndef get_st_mode_bits -/* - * The replacement lstat(2) we use on Cygwin is incomplete and - * may return wrong permission bits. Most of the time we do not care, - * but the callsites of this wrapper do care. - */ -int get_st_mode_bits(const char *path, int *mode) +static int get_st_mode_bits(const char *path, int *mode) { struct stat st; if (lstat(path, &st) < 0) @@ -19,7 +13,6 @@ int get_st_mode_bits(const char *path, int *mode) *mode = st.st_mode; return 0; } -#endif static char bad_path[] = "/bad-path/"; @@ -441,42 +434,100 @@ int adjust_shared_perm(const char *path) return 0; } -const char *relative_path(const char *abs, const char *base) +/* + * Give path as relative to prefix. + * + * The strbuf may or may not be used, so do not assume it contains the + * returned path. + */ +const char *relative_path(const char *in, const char *prefix, + struct strbuf *sb) { - static char buf[PATH_MAX + 1]; + int in_len = in ? strlen(in) : 0; + int prefix_len = prefix ? strlen(prefix) : 0; + int in_off = 0; + int prefix_off = 0; int i = 0, j = 0; - if (!base || !base[0]) - return abs; - while (base[i]) { - if (is_dir_sep(base[i])) { - if (!is_dir_sep(abs[j])) - return abs; - while (is_dir_sep(base[i])) + if (!in_len) + return "./"; + else if (!prefix_len) + return in; + + while (i < prefix_len && j < in_len && prefix[i] == in[j]) { + if (is_dir_sep(prefix[i])) { + while (is_dir_sep(prefix[i])) i++; - while (is_dir_sep(abs[j])) + while (is_dir_sep(in[j])) + j++; + prefix_off = i; + in_off = j; + } else { + i++; + j++; + } + } + + if ( + /* "prefix" seems like prefix of "in" */ + i >= prefix_len && + /* + * but "/foo" is not a prefix of "/foobar" + * (i.e. prefix not end with '/') + */ + prefix_off < prefix_len) { + if (j >= in_len) { + /* in="/a/b", prefix="/a/b" */ + in_off = in_len; + } else if (is_dir_sep(in[j])) { + /* in="/a/b/c", prefix="/a/b" */ + while (is_dir_sep(in[j])) j++; + in_off = j; + } else { + /* in="/a/bbb/c", prefix="/a/b" */ + i = prefix_off; + } + } else if ( + /* "in" is short than "prefix" */ + j >= in_len && + /* "in" not end with '/' */ + in_off < in_len) { + if (is_dir_sep(prefix[i])) { + /* in="/a/b", prefix="/a/b/c/" */ + while (is_dir_sep(prefix[i])) + i++; + in_off = in_len; + } + } + in += in_off; + in_len -= in_off; + + if (i >= prefix_len) { + if (!in_len) + return "./"; + else + return in; + } + + strbuf_reset(sb); + strbuf_grow(sb, in_len); + + while (i < prefix_len) { + if (is_dir_sep(prefix[i])) { + strbuf_addstr(sb, "../"); + while (is_dir_sep(prefix[i])) + i++; continue; - } else if (abs[j] != base[i]) { - return abs; } i++; - j++; } - if ( - /* "/foo" is a prefix of "/foo" */ - abs[j] && - /* "/foo" is not a prefix of "/foobar" */ - !is_dir_sep(base[i-1]) && !is_dir_sep(abs[j]) - ) - return abs; - while (is_dir_sep(abs[j])) - j++; - if (!abs[j]) - strcpy(buf, "."); - else - strcpy(buf, abs + j); - return buf; + if (!is_dir_sep(prefix[prefix_len - 1])) + strbuf_addstr(sb, "../"); + + strbuf_addstr(sb, in); + + return sb->buf; } /* diff --git a/pathspec.c b/pathspec.c index d9f4143222..4b32cc32cb 100644 --- a/pathspec.c +++ b/pathspec.c @@ -32,7 +32,7 @@ void add_pathspec_matches_against_index(const struct pathspec *pathspec, if (!num_unmatched) return; for (i = 0; i < active_nr; i++) { - struct cache_entry *ce = active_cache[i]; + const struct cache_entry *ce = active_cache[i]; match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 0, seen); } } diff --git a/perl/Git.pm b/perl/Git.pm index 7a252ef872..204fdc6737 100644 --- a/perl/Git.pm +++ b/perl/Git.pm @@ -61,7 +61,7 @@ require Exporter; remote_refs prompt get_tz_offset credential credential_read credential_write - temp_acquire temp_release temp_reset temp_path); + temp_acquire temp_is_locked temp_release temp_reset temp_path); =head1 DESCRIPTION @@ -1206,6 +1206,35 @@ sub temp_acquire { $temp_fd; } +=item temp_is_locked ( NAME ) + +Returns true if the internal lock created by a previous C<temp_acquire()> +call with C<NAME> is still in effect. + +When temp_acquire is called on a C<NAME>, it internally locks the temporary +file mapped to C<NAME>. That lock will not be released until C<temp_release()> +is called with either the original C<NAME> or the L<File::Handle> that was +returned from the original call to temp_acquire. + +Subsequent attempts to call C<temp_acquire()> with the same C<NAME> will fail +unless there has been an intervening C<temp_release()> call for that C<NAME> +(or its corresponding L<File::Handle> that was returned by the original +C<temp_acquire()> call). + +If true is returned by C<temp_is_locked()> for a C<NAME>, an attempt to +C<temp_acquire()> the same C<NAME> will cause an error unless +C<temp_release> is first called on that C<NAME> (or its corresponding +L<File::Handle> that was returned by the original C<temp_acquire()> call). + +=cut + +sub temp_is_locked { + my ($self, $name) = _maybe_self(@_); + my $temp_fd = \$TEMP_FILEMAP{$name}; + + defined $$temp_fd && $$temp_fd->opened && $TEMP_FILES{$$temp_fd}{locked}; +} + =item temp_release ( NAME ) =item temp_release ( FILEHANDLE ) diff --git a/perl/Git/SVN/Fetcher.pm b/perl/Git/SVN/Fetcher.pm index bd174189b9..10edb27732 100644 --- a/perl/Git/SVN/Fetcher.pm +++ b/perl/Git/SVN/Fetcher.pm @@ -315,11 +315,13 @@ sub change_file_prop { sub apply_textdelta { my ($self, $fb, $exp) = @_; return undef if $self->is_path_ignored($fb->{path}); - my $fh = $::_repository->temp_acquire('svn_delta'); + my $suffix = 0; + ++$suffix while $::_repository->temp_is_locked("svn_delta_${$}_$suffix"); + my $fh = $::_repository->temp_acquire("svn_delta_${$}_$suffix"); # $fh gets auto-closed() by SVN::TxDelta::apply(), # (but $base does not,) so dup() it for reading in close_file open my $dup, '<&', $fh or croak $!; - my $base = $::_repository->temp_acquire('git_blob'); + my $base = $::_repository->temp_acquire("git_blob_${$}_$suffix"); if ($fb->{blob}) { my ($base_is_link, $size); @@ -12,6 +12,11 @@ Members: Thomas Rast <trast@student.ethz.ch> Jan Krüger <jk@jk.gs> Christian Stimming <stimming@tuhh.de> +Language: fr (French) +Repository: https://github.com/jnavila/git +Leader: Jean-Noël Avila <jn.avila@free.fr> +Members: Sébastien Helleu <flashcode@flashtux.org> + Language: is (Icelandic) Leader: Ævar Arnfjörð Bjarmason <avarab@gmail.com> @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: git 1.8.3\n" +"Project-Id-Version: git 1.8.4\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2013-04-30 08:25+0800\n" -"PO-Revision-Date: 2012-10-02 19:35+0200\n" +"POT-Creation-Date: 2013-08-06 14:10+0800\n" +"PO-Revision-Date: 2013-07-28 18:42+0200\n" "Last-Translator: Ralf Thielow <ralf.thielow@gmail.com>\n" "Language-Team: German <>\n" "Language: de\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" -#: advice.c:53 +#: advice.c:57 #, c-format msgid "hint: %.*s\n" msgstr "Hinweis: %.*s\n" @@ -26,21 +26,21 @@ msgstr "Hinweis: %.*s\n" #. * Message used both when 'git commit' fails and when #. * other commands doing a merge do. #. -#: advice.c:83 +#: advice.c:87 msgid "" "Fix them up in the work tree,\n" "and then use 'git add/rm <file>' as\n" "appropriate to mark resolution and make a commit,\n" "or use 'git commit -a'." msgstr "" -"Korrigieren Sie dies im Arbeitsbaum,\n" +"Korrigieren Sie dies im Arbeitsverzeichnis,\n" "und benutzen Sie dann 'git add/rm <Datei>'\n" -"um die Auflösung entsprechend zu markieren und einzutragen,\n" +"um die Auflösung entsprechend zu markieren und zu committen,\n" "oder benutzen Sie 'git commit -a'." #: archive.c:10 msgid "git archive [options] <tree-ish> [<path>...]" -msgstr "git archive [Optionen] <Versionsreferenz> [<Pfad>...]" +msgstr "git archive [Optionen] <Commit-Referenz> [<Pfad>...]" #: archive.c:11 msgid "git archive --list" @@ -50,12 +50,12 @@ msgstr "git archive --list" msgid "" "git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]" msgstr "" -"git archive --remote <Projektarchiv> [--exec <Programm>] [Optionen] " -"<Versionsreferenz> [Pfad...]" +"git archive --remote <Repository> [--exec <Programm>] [Optionen] <Commit-" +"Referenz> [Pfad...]" #: archive.c:13 msgid "git archive --remote <repo> [--exec <cmd>] --list" -msgstr "git archive --remote <Projektarchiv> [--exec <Programm>] --list" +msgstr "git archive --remote <Repository> [--exec <Programm>] --list" #: archive.c:323 msgid "fmt" @@ -63,27 +63,27 @@ msgstr "Format" #: archive.c:323 msgid "archive format" -msgstr "Ausgabeformat" +msgstr "Archivformat" -#: archive.c:324 builtin/log.c:1126 +#: archive.c:324 builtin/log.c:1173 msgid "prefix" msgstr "Prefix" #: archive.c:325 msgid "prepend prefix to each pathname in the archive" -msgstr "stellt einen Präfix vor jeden Pfadnamen in der Ausgabe" +msgstr "stellt einen Präfix vor jeden Pfadnamen in dem Archiv" -#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2371 -#: builtin/blame.c:2372 builtin/config.c:55 builtin/fast-export.c:665 -#: builtin/fast-export.c:667 builtin/grep.c:715 builtin/hash-object.c:77 -#: builtin/ls-files.c:490 builtin/ls-files.c:493 builtin/notes.c:536 -#: builtin/notes.c:693 builtin/read-tree.c:107 parse-options.h:149 +#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2292 +#: builtin/blame.c:2293 builtin/config.c:56 builtin/fast-export.c:673 +#: builtin/fast-export.c:675 builtin/grep.c:714 builtin/hash-object.c:77 +#: builtin/ls-files.c:496 builtin/ls-files.c:499 builtin/notes.c:408 +#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:152 msgid "file" msgstr "Datei" #: archive.c:327 builtin/archive.c:89 msgid "write the archive to this file" -msgstr "schreibt die Ausgabe in diese Datei" +msgstr "schreibt das Archiv in diese Datei" #: archive.c:329 msgid "read .gitattributes in working directory" @@ -107,17 +107,17 @@ msgstr "besser komprimieren" #: archive.c:343 msgid "list supported archive formats" -msgstr "listet unterstützte Ausgabeformate auf" +msgstr "listet unterstützte Archivformate auf" -#: archive.c:345 builtin/archive.c:90 builtin/clone.c:86 +#: archive.c:345 builtin/archive.c:90 builtin/clone.c:85 msgid "repo" -msgstr "Projektarchiv" +msgstr "Repository" #: archive.c:346 builtin/archive.c:91 msgid "retrieve the archive from remote repository <repo>" -msgstr "ruft das Archiv von externem Projektarchiv <Projektarchiv> ab" +msgstr "ruft das Archiv von Remote-Repository <Repository> ab" -#: archive.c:347 builtin/archive.c:92 builtin/notes.c:615 +#: archive.c:347 builtin/archive.c:92 builtin/notes.c:487 msgid "command" msgstr "Programm" @@ -136,88 +136,90 @@ msgstr "" #: branch.c:60 #, c-format msgid "Not setting branch %s as its own upstream." -msgstr "Zweig %s kann nicht sein eigener Ãœbernahmezweig sein." +msgstr "Branch %s kann nicht sein eigener Upstream-Branch sein." #: branch.c:82 #, c-format msgid "Branch %s set up to track remote branch %s from %s by rebasing." -msgstr "Zweig %s konfiguriert zum Folgen von externem Zweig %s von %s durch " -"Neuaufbau." +msgstr "" +"Branch %s konfiguriert zum Folgen von Remote-Branch %s von %s durch Rebase." #: branch.c:83 #, c-format msgid "Branch %s set up to track remote branch %s from %s." -msgstr "Zweig %s konfiguriert zum Folgen von externem Zweig %s von %s." +msgstr "Branch %s konfiguriert zum Folgen von Remote-Branch %s von %s." #: branch.c:87 #, c-format msgid "Branch %s set up to track local branch %s by rebasing." -msgstr "Zweig %s konfiguriert zum Folgen von lokalem Zweig %s durch Neuaufbau." +msgstr "Branch %s konfiguriert zum Folgen von lokalem Branch %s durch Rebase." #: branch.c:88 #, c-format msgid "Branch %s set up to track local branch %s." -msgstr "Zweig %s konfiguriert zum Folgen von lokalem Zweig %s." +msgstr "Branch %s konfiguriert zum Folgen von lokalem Branch %s." #: branch.c:92 #, c-format msgid "Branch %s set up to track remote ref %s by rebasing." -msgstr "Zweig %s konfiguriert zum Folgen von externer Referenz %s durch " -"Neuaufbau." +msgstr "Branch %s konfiguriert zum Folgen von Remote-Referenz %s durch Rebase." #: branch.c:93 #, c-format msgid "Branch %s set up to track remote ref %s." -msgstr "Zweig %s konfiguriert zum Folgen von externer Referenz %s." +msgstr "Branch %s konfiguriert zum Folgen von Remote-Referenz %s." #: branch.c:97 #, c-format msgid "Branch %s set up to track local ref %s by rebasing." -msgstr "Zweig %s konfiguriert zum Folgen von lokaler Referenz %s durch " -"Neuaufbau." +msgstr "" +"Branch %s konfiguriert zum Folgen von lokaler Referenz %s durch Rebase." #: branch.c:98 #, c-format msgid "Branch %s set up to track local ref %s." -msgstr "Zweig %s konfiguriert zum Folgen von lokaler Referenz %s." +msgstr "Branch %s konfiguriert zum Folgen von lokaler Referenz %s." #: branch.c:118 #, c-format msgid "Tracking not set up: name too long: %s" -msgstr "Konfiguration zum Folgen von Zweig nicht eingerichtet. Name zu lang: %s" +msgstr "" +"Konfiguration zum Folgen von Branch nicht eingerichtet. Name zu lang: %s" #: branch.c:137 #, c-format msgid "Not tracking: ambiguous information for ref %s" -msgstr "Konfiguration zum Folgen von Zweig nicht eingerichtet. Referenz %s ist mehrdeutig." +msgstr "" +"Konfiguration zum Folgen von Branch nicht eingerichtet. Referenz %s ist " +"mehrdeutig." #: branch.c:182 #, c-format msgid "'%s' is not a valid branch name." -msgstr "'%s' ist kein gültiger Zweigname." +msgstr "'%s' ist kein gültiger Branchname." #: branch.c:187 #, c-format msgid "A branch named '%s' already exists." -msgstr "Zweig '%s' existiert bereits." +msgstr "Branch '%s' existiert bereits." #: branch.c:195 msgid "Cannot force update the current branch." -msgstr "Kann Aktualisierung des aktuellen Zweiges nicht erzwingen." +msgstr "Kann Aktualisierung des aktuellen Branches nicht erzwingen." -#: branch.c:201 +#: branch.c:216 #, c-format msgid "Cannot setup tracking information; starting point '%s' is not a branch." msgstr "" -"Kann Informationen zum Ãœbernahmezweig nicht einrichten; Startpunkt '%s' ist " -"kein Zweig." +"Kann Tracking-Informationen nicht einrichten; Startpunkt '%s' ist kein " +"Branch." -#: branch.c:203 +#: branch.c:218 #, c-format msgid "the requested upstream branch '%s' does not exist" -msgstr "der angeforderte externe Ãœbernahmezweig '%s' existiert nicht" +msgstr "der angeforderte Upstream-Branch '%s' existiert nicht" -#: branch.c:205 +#: branch.c:220 msgid "" "\n" "If you are planning on basing your work on an upstream\n" @@ -229,35 +231,35 @@ msgid "" "\"git push -u\" to set the upstream config as you push." msgstr "" "\n" -"Falls Sie vorhaben, Ihre Arbeit auf einem bereits existierenden,\n" -"externen Ãœbernahmezweig aufzubauen, sollten Sie \"git fetch\"\n" +"Falls Sie vorhaben, Ihre Arbeit auf einem bereits existierenden\n" +"Upstream-Branch aufzubauen, sollten Sie \"git fetch\"\n" "ausführen, um diesen abzurufen.\n" "\n" -"Falls Sie vorhaben, einen neuen lokalen Zweig zu versenden\n" +"Falls Sie vorhaben, einen neuen lokalen Branch zu versenden\n" "der seinem externen Gegenstück folgen soll, können Sie\n" -"\"git push -u\" verwenden, um den externen Ãœbernahmezweig\n" -"beim Versand zu konfigurieren." +"\"git push -u\" verwenden, um den Upstream-Branch beim \"push\"\n" +"zu konfigurieren." -#: branch.c:250 +#: branch.c:265 #, c-format msgid "Not a valid object name: '%s'." msgstr "Ungültiger Objekt-Name: '%s'" -#: branch.c:270 +#: branch.c:285 #, c-format msgid "Ambiguous object name: '%s'." msgstr "mehrdeutiger Objekt-Name: '%s'" -#: branch.c:275 +#: branch.c:290 #, c-format msgid "Not a valid branch point: '%s'." -msgstr "Ungültiger Verzweigungspunkt: '%s'" +msgstr "Ungültiger Branchpunkt: '%s'" -#: branch.c:281 +#: branch.c:296 msgid "Failed to lock ref for update" msgstr "Fehler beim Sperren der Referenz zur Aktualisierung." -#: branch.c:299 +#: branch.c:314 msgid "Failed to write ref" msgstr "Fehler beim Schreiben der Referenz." @@ -271,18 +273,18 @@ msgstr "'%s' sieht nicht wie eine v2 Paketdatei aus" msgid "unrecognized header: %s%s (%d)" msgstr "nicht erkannter Kopfbereich: %s%s (%d)" -#: bundle.c:89 builtin/commit.c:676 +#: bundle.c:89 builtin/commit.c:697 #, c-format msgid "could not open '%s'" msgstr "Konnte '%s' nicht öffnen" #: bundle.c:140 msgid "Repository lacks these prerequisite commits:" -msgstr "Dem Projektarchiv fehlen folgende vorausgesetzte Versionen:" +msgstr "Dem Repository fehlen folgende vorausgesetzte Commits:" -#: bundle.c:164 sequencer.c:651 sequencer.c:1101 builtin/log.c:300 -#: builtin/log.c:770 builtin/log.c:1344 builtin/log.c:1570 builtin/merge.c:349 -#: builtin/shortlog.c:155 +#: bundle.c:164 sequencer.c:661 sequencer.c:1111 builtin/log.c:331 +#: builtin/log.c:801 builtin/log.c:1399 builtin/log.c:1625 builtin/merge.c:364 +#: builtin/shortlog.c:156 msgid "revision walk setup failed" msgstr "Einrichtung des Revisionsgangs fehlgeschlagen" @@ -308,7 +310,7 @@ msgstr[1] "Das Paket benötigt diese %d Referenzen:" msgid "rev-list died" msgstr "\"rev-list\" abgebrochen" -#: bundle.c:300 builtin/log.c:1255 builtin/shortlog.c:258 +#: bundle.c:300 builtin/log.c:1310 builtin/shortlog.c:259 #, c-format msgid "unrecognized argument: %s" msgstr "nicht erkanntes Argument: %s" @@ -339,30 +341,30 @@ msgstr "kann '%s' nicht erstellen" msgid "index-pack died" msgstr "Erstellung der Paketindexdatei abgebrochen" -#: commit.c:50 +#: commit.c:53 #, c-format msgid "could not parse %s" msgstr "konnte %s nicht parsen" -#: commit.c:52 +#: commit.c:55 #, c-format msgid "%s %s is not a commit!" -msgstr "%s %s ist keine Version!" +msgstr "%s %s ist kein Commit!" #: compat/obstack.c:406 compat/obstack.c:408 msgid "memory exhausted" msgstr "Speicher verbraucht" -#: connected.c:39 +#: connected.c:60 msgid "Could not run 'git rev-list'" msgstr "Konnte 'git rev-list' nicht ausführen" -#: connected.c:48 +#: connected.c:80 #, c-format msgid "failed write to rev-list: %s" msgstr "Fehler beim Schreiben nach rev-list: %s" -#: connected.c:56 +#: connected.c:88 #, c-format msgid "failed to close rev-list's stdin: %s" msgstr "Fehler beim Schließen von rev-list's Standard-Eingabe: %s" @@ -459,7 +461,7 @@ msgstr "" "Fehler in 'diff.dirstat' Konfigurationsvariable gefunden:\n" "%s" -#: diff.c:3481 +#: diff.c:3487 #, c-format msgid "" "Failed to parse --dirstat/-X option parameter:\n" @@ -468,7 +470,7 @@ msgstr "" "Fehler beim Parsen des --dirstat/-X Optionsparameters:\n" "%s" -#: diff.c:3495 +#: diff.c:3501 #, c-format msgid "Failed to parse --submodule option parameter: '%s'" msgstr "Fehler beim Parsen des --submodule Optionsparameters: '%s'" @@ -510,20 +512,20 @@ msgstr "'%s': %s" msgid "'%s': short read %s" msgstr "'%s': read() zu kurz %s" -#: help.c:212 +#: help.c:210 #, c-format msgid "available git commands in '%s'" msgstr "Vorhandene Git-Kommandos in '%s'" -#: help.c:219 +#: help.c:217 msgid "git commands available from elsewhere on your $PATH" msgstr "Vorhandene Git-Kommandos irgendwo in Ihrem $PATH" -#: help.c:235 +#: help.c:233 msgid "The most commonly used git commands are:" msgstr "Die allgemein verwendeten Git-Kommandos sind:" -#: help.c:292 +#: help.c:290 #, c-format msgid "" "'%s' appears to be a git command, but we were not\n" @@ -532,11 +534,11 @@ msgstr "" "'%s' scheint ein git-Kommando zu sein, konnte aber\n" "nicht ausgeführt werden. Vielleicht ist git-%s fehlerhaft?" -#: help.c:349 +#: help.c:347 msgid "Uh oh. Your system reports no Git commands at all." msgstr "Uh oh. Keine Git-Kommandos auf Ihrem System vorhanden." -#: help.c:371 +#: help.c:369 #, c-format msgid "" "WARNING: You called a Git command named '%s', which does not exist.\n" @@ -545,17 +547,17 @@ msgstr "" "Warnung: Sie haben das nicht existierende Git-Kommando '%s' ausgeführt.\n" "Setze fort unter der Annahme, dass Sie '%s' gemeint haben" -#: help.c:376 +#: help.c:374 #, c-format msgid "in %0.1f seconds automatically..." msgstr "automatisch in %0.1f Sekunden..." -#: help.c:383 +#: help.c:381 #, c-format msgid "git: '%s' is not a git command. See 'git --help'." msgstr "git: '%s' ist kein Git-Kommando. Siehe 'git --help'." -#: help.c:387 +#: help.c:385 help.c:444 msgid "" "\n" "Did you mean this?" @@ -569,89 +571,94 @@ msgstr[1] "" "\n" "Haben Sie eines von diesen gemeint?" +#: help.c:440 +#, c-format +msgid "%s: %s - %s" +msgstr "%s: %s - %s" + #: merge.c:56 msgid "failed to read the cache" msgstr "Lesen des Zwischenspeichers fehlgeschlagen" #: merge.c:110 builtin/checkout.c:365 builtin/checkout.c:566 -#: builtin/clone.c:645 +#: builtin/clone.c:656 msgid "unable to write new index file" -msgstr "Konnte neue Bereitstellungsdatei nicht schreiben." +msgstr "Konnte neue Staging-Area-Datei nicht schreiben." #: merge-recursive.c:190 #, c-format msgid "(bad commit)\n" -msgstr "(ungültige Version)\n" +msgstr "(ungültiger Commit)\n" #: merge-recursive.c:206 #, c-format msgid "addinfo_cache failed for path '%s'" msgstr "addinfo_cache für Pfad '%s' fehlgeschlagen" -#: merge-recursive.c:268 +#: merge-recursive.c:269 msgid "error building trees" -msgstr "Fehler beim Erstellen der Bäume" +msgstr "Fehler beim Erstellen der \"Tree\"-Objekte" -#: merge-recursive.c:672 +#: merge-recursive.c:673 #, c-format msgid "failed to create path '%s'%s" msgstr "Fehler beim Erstellen des Pfades '%s'%s" -#: merge-recursive.c:683 +#: merge-recursive.c:684 #, c-format msgid "Removing %s to make room for subdirectory\n" msgstr "Entferne %s um Platz für Unterverzeichnis zu schaffen\n" #. something else exists #. .. but not some other error (who really cares what?) -#: merge-recursive.c:697 merge-recursive.c:718 +#: merge-recursive.c:698 merge-recursive.c:719 msgid ": perhaps a D/F conflict?" msgstr ": vielleicht ein Verzeichnis/Datei-Konflikt?" -#: merge-recursive.c:708 +#: merge-recursive.c:709 #, c-format msgid "refusing to lose untracked file at '%s'" msgstr "verweigere, da unbeobachtete Dateien in '%s' verloren gehen würden" -#: merge-recursive.c:748 +#: merge-recursive.c:749 #, c-format msgid "cannot read object %s '%s'" msgstr "kann Objekt %s '%s' nicht lesen" -#: merge-recursive.c:750 +#: merge-recursive.c:751 #, c-format msgid "blob expected for %s '%s'" msgstr "Blob erwartet für %s '%s'" -#: merge-recursive.c:773 builtin/clone.c:313 +#: merge-recursive.c:774 builtin/clone.c:312 #, c-format msgid "failed to open '%s'" msgstr "Fehler beim Öffnen von '%s'" -#: merge-recursive.c:781 +#: merge-recursive.c:782 #, c-format msgid "failed to symlink '%s'" -msgstr "Fehler beim Erstellen einer symbolischen Verknüpfung für '%s'" +msgstr "Fehler beim Erstellen eines symbolischen Verweises für '%s'" -#: merge-recursive.c:784 +#: merge-recursive.c:785 #, c-format msgid "do not know what to do with %06o %s '%s'" msgstr "weiß nicht was mit %06o %s '%s' zu machen ist" -#: merge-recursive.c:922 +#: merge-recursive.c:923 msgid "Failed to execute internal merge" -msgstr "Fehler bei Ausführung der internen Zusammenführung" +msgstr "Fehler bei Ausführung des internen Merges" -#: merge-recursive.c:926 +#: merge-recursive.c:927 #, c-format msgid "Unable to add %s to database" msgstr "Konnte %s nicht zur Datenbank hinzufügen" -#: merge-recursive.c:942 +#: merge-recursive.c:943 msgid "unsupported object type in the tree" -msgstr "nicht unterstützter Objekttyp im Baum" +msgstr "nicht unterstützter Objekttyp im Verzeichnis" -#: merge-recursive.c:1021 merge-recursive.c:1035 +#: merge-recursive.c:1022 merge-recursive.c:1036 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " @@ -660,7 +667,7 @@ msgstr "" "KONFLIKT (%s/löschen): %s gelöscht in %s und %s in %s. Stand %s von %s wurde " "im Arbeitsbereich gelassen." -#: merge-recursive.c:1027 merge-recursive.c:1040 +#: merge-recursive.c:1028 merge-recursive.c:1041 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " @@ -669,174 +676,197 @@ msgstr "" "KONFLIKT (%s/löschen): %s gelöscht in %s und %s in %s. Stand %s von %s wurde " "im Arbeitsbereich bei %s gelassen." -#: merge-recursive.c:1081 +#: merge-recursive.c:1082 msgid "rename" msgstr "umbenennen" -#: merge-recursive.c:1081 +#: merge-recursive.c:1082 msgid "renamed" msgstr "umbenannt" -#: merge-recursive.c:1137 +#: merge-recursive.c:1138 #, c-format msgid "%s is a directory in %s adding as %s instead" msgstr "%s ist ein Verzeichnis in %s, füge es stattdessen als %s hinzu" -#: merge-recursive.c:1159 +#: merge-recursive.c:1160 #, c-format msgid "" "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s" "\"->\"%s\" in \"%s\"%s" msgstr "" -"KONFLIKT (umbenennen/umbenennen): Benenne um \"%s\"->\"%s\" in Zweig \"%s\" " -"und \"%s\"->\"%s\" in Zweig \"%s\"%s" +"KONFLIKT (umbenennen/umbenennen): Benenne um \"%s\"->\"%s\" in Branch \"%s\" " +"und \"%s\"->\"%s\" in Branch \"%s\"%s" -#: merge-recursive.c:1164 +#: merge-recursive.c:1165 msgid " (left unresolved)" msgstr " (bleibt unaufgelöst)" -#: merge-recursive.c:1218 +#: merge-recursive.c:1219 #, c-format msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s" msgstr "" "KONFLIKT (umbenennen/umbenennen): Benenne um %s->%s in %s. Benenne um %s->%s " "in %s" -#: merge-recursive.c:1248 +#: merge-recursive.c:1249 #, c-format msgid "Renaming %s to %s and %s to %s instead" msgstr "Benenne stattdessen %s nach %s und %s nach %s um" -#: merge-recursive.c:1447 +#: merge-recursive.c:1448 #, c-format msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s" msgstr "" "KONFLIKT (umbenennen/hinzufügen): Benenne um %s->%s in %s. %s hinzugefügt in " "%s" -#: merge-recursive.c:1457 +#: merge-recursive.c:1458 #, c-format msgid "Adding merged %s" msgstr "Füge zusammengeführte Datei %s hinzu" -#: merge-recursive.c:1462 merge-recursive.c:1660 +#: merge-recursive.c:1463 merge-recursive.c:1661 #, c-format msgid "Adding as %s instead" msgstr "Füge stattdessen als %s hinzu" -#: merge-recursive.c:1513 +#: merge-recursive.c:1514 #, c-format msgid "cannot read object %s" msgstr "kann Objekt %s nicht lesen" -#: merge-recursive.c:1516 +#: merge-recursive.c:1517 #, c-format msgid "object %s is not a blob" msgstr "Objekt %s ist kein Blob" -#: merge-recursive.c:1564 +#: merge-recursive.c:1565 msgid "modify" msgstr "ändern" -#: merge-recursive.c:1564 +#: merge-recursive.c:1565 msgid "modified" msgstr "geändert" -#: merge-recursive.c:1574 +#: merge-recursive.c:1575 msgid "content" msgstr "Inhalt" -#: merge-recursive.c:1581 +#: merge-recursive.c:1582 msgid "add/add" msgstr "hinzufügen/hinzufügen" -#: merge-recursive.c:1615 +#: merge-recursive.c:1616 #, c-format msgid "Skipped %s (merged same as existing)" -msgstr "%s ausgelassen (Ergebnis der Zusammenführung existiert bereits)" +msgstr "%s ausgelassen (Ergebnis des Merges existiert bereits)" -#: merge-recursive.c:1629 +#: merge-recursive.c:1630 #, c-format msgid "Auto-merging %s" -msgstr "automatische Zusammenführung von %s" +msgstr "automatischer Merge von %s" -#: merge-recursive.c:1633 git-submodule.sh:1029 +#: merge-recursive.c:1634 git-submodule.sh:1118 msgid "submodule" -msgstr "Unterprojekt" +msgstr "Submodul" -#: merge-recursive.c:1634 +#: merge-recursive.c:1635 #, c-format msgid "CONFLICT (%s): Merge conflict in %s" -msgstr "KONFLIKT (%s): Zusammenführungskonflikt in %s" +msgstr "KONFLIKT (%s): Merge-Konflikt in %s" -#: merge-recursive.c:1724 +#: merge-recursive.c:1725 #, c-format msgid "Removing %s" msgstr "Entferne %s" -#: merge-recursive.c:1749 +#: merge-recursive.c:1750 msgid "file/directory" msgstr "Datei/Verzeichnis" -#: merge-recursive.c:1755 +#: merge-recursive.c:1756 msgid "directory/file" msgstr "Verzeichnis/Datei" -#: merge-recursive.c:1760 +#: merge-recursive.c:1761 #, c-format msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s" msgstr "" "KONFLIKT (%s): Es existiert bereits ein Verzeichnis %s in %s. Füge %s als %s " "hinzu." -#: merge-recursive.c:1770 +#: merge-recursive.c:1771 #, c-format msgid "Adding %s" msgstr "Füge %s hinzu" -#: merge-recursive.c:1787 +#: merge-recursive.c:1788 msgid "Fatal merge failure, shouldn't happen." -msgstr "Fataler Fehler bei der Zusammenführung. Sollte nicht passieren." +msgstr "Fataler Merge-Fehler. Sollte nicht passieren." -#: merge-recursive.c:1806 +#: merge-recursive.c:1807 msgid "Already up-to-date!" msgstr "Bereits aktuell!" -#: merge-recursive.c:1815 +#: merge-recursive.c:1816 #, c-format msgid "merging of trees %s and %s failed" -msgstr "Zusammenführen der Bäume %s und %s fehlgeschlagen" +msgstr "Zusammenführen der \"Tree\"-Objekte %s und %s fehlgeschlagen" -#: merge-recursive.c:1845 +#: merge-recursive.c:1846 #, c-format msgid "Unprocessed path??? %s" msgstr "unverarbeiteter Pfad??? %s" -#: merge-recursive.c:1890 +#: merge-recursive.c:1891 msgid "Merging:" -msgstr "Zusammenführung:" +msgstr "Merge:" -#: merge-recursive.c:1903 +#: merge-recursive.c:1904 #, c-format msgid "found %u common ancestor:" msgid_plural "found %u common ancestors:" -msgstr[0] "%u gemeinsamen Vorfahren gefunden" -msgstr[1] "%u gemeinsame Vorfahren gefunden" +msgstr[0] "%u gemeinsamen Vorgänger-Commit gefunden" +msgstr[1] "%u gemeinsame Vorgänger-Commits gefunden" -#: merge-recursive.c:1940 +#: merge-recursive.c:1941 msgid "merge returned no commit" -msgstr "Zusammenführung hat keine Version zurückgegeben" +msgstr "Merge hat keinen Commit zurückgegeben" -#: merge-recursive.c:1997 +#: merge-recursive.c:1998 #, c-format msgid "Could not parse object '%s'" msgstr "Konnte Objekt '%s' nicht parsen." -#: merge-recursive.c:2009 builtin/merge.c:658 +#: merge-recursive.c:2010 builtin/merge.c:672 msgid "Unable to write index." -msgstr "Konnte Bereitstellung nicht schreiben." +msgstr "Konnte Staging-Area nicht schreiben." + +#: notes-utils.c:40 +msgid "Cannot commit uninitialized/unreferenced notes tree" +msgstr "" +"Kann uninitialisiertes/unreferenzierte Notiz-Verzeichnis nicht committen." + +#: notes-utils.c:81 +#, c-format +msgid "Bad notes.rewriteMode value: '%s'" +msgstr "Ungültiger notes.rewriteMode Wert: '%s'" + +#: notes-utils.c:91 +#, c-format +msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" +msgstr "" +"Umschreiben der Notizen in %s zurückgewiesen (außerhalb von refs/notes/)" -#: object.c:195 +#. TRANSLATORS: The first %s is the name of the +#. environment variable, the second %s is its value +#: notes-utils.c:118 +#, c-format +msgid "Bad %s value: '%s'" +msgstr "Ungültiger %s Wert: '%s'" + +#: object.c:204 #, c-format msgid "unable to parse object: %s" msgstr "Konnte Objekt '%s' nicht parsen." @@ -869,41 +899,40 @@ msgstr "-NUM" #: pathspec.c:83 #, c-format msgid "Path '%s' is in submodule '%.*s'" -msgstr "Pfad '%s' befindet sich in Unterprojekt '%.*s'" +msgstr "Pfad '%s' befindet sich in Submodul '%.*s'" #: pathspec.c:99 #, c-format msgid "'%s' is beyond a symbolic link" -msgstr "'%s' ist über einem symbolischen Link" +msgstr "'%s' ist hinter einem symbolischen Verweis" -#: remote.c:1781 +#: remote.c:1788 #, c-format msgid "Your branch is ahead of '%s' by %d commit.\n" msgid_plural "Your branch is ahead of '%s' by %d commits.\n" -msgstr[0] "Ihr Zweig ist vor '%s' um %d Version.\n" -msgstr[1] "Ihr Zweig ist vor '%s' um %d Versionen.\n" +msgstr[0] "Ihr Branch ist vor '%s' um %d Commit.\n" +msgstr[1] "Ihr Branch ist vor '%s' um %d Commits.\n" -#: remote.c:1787 +#: remote.c:1794 msgid " (use \"git push\" to publish your local commits)\n" -msgstr " (benutzen Sie \"git push\" um lokalen Versionen herauszubringen)\n" +msgstr " (benutzen Sie \"git push\" um lokale Commits zu publizieren)\n" -#: remote.c:1790 +#: remote.c:1797 #, c-format msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n" msgid_plural "" "Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n" msgstr[0] "" -"Ihr Zweig ist zu '%s' um %d Version hinterher, und kann vorgespult werden.\n" +"Ihr Branch ist zu '%s' um %d Commit hinterher, und kann vorgespult werden.\n" msgstr[1] "" -"Ihr Zweig ist zu '%s' um %d Versionen hinterher, und kann vorgespult " -"werden.\n" +"Ihr Branch ist zu '%s' um %d Commits hinterher, und kann vorgespult werden.\n" -#: remote.c:1798 +#: remote.c:1805 msgid " (use \"git pull\" to update your local branch)\n" msgstr "" -" (benutzen Sie \"git pull\" um Ihren lokalen Zweig zu aktualisieren)\n" +" (benutzen Sie \"git pull\" um Ihren lokalen Branch zu aktualisieren)\n" -#: remote.c:1801 +#: remote.c:1808 #, c-format msgid "" "Your branch and '%s' have diverged,\n" @@ -912,26 +941,35 @@ msgid_plural "" "Your branch and '%s' have diverged,\n" "and have %d and %d different commits each, respectively.\n" msgstr[0] "" -"Ihr Zweig und '%s' sind divergiert,\n" -"und haben jeweils %d und %d unterschiedliche Versionen.\n" +"Ihr Branch und '%s' sind divergiert,\n" +"und haben jeweils %d und %d unterschiedliche Commits.\n" msgstr[1] "" -"Ihr Zweig und '%s' sind divergiert,\n" -"und haben jeweils %d und %d unterschiedliche Versionen.\n" +"Ihr Branch und '%s' sind divergiert,\n" +"und haben jeweils %d und %d unterschiedliche Commits.\n" -#: remote.c:1811 +#: remote.c:1818 msgid " (use \"git pull\" to merge the remote branch into yours)\n" msgstr "" -" (benutzen Sie \"git pull\" um Ihren Zweig mit dem externen " +" (benutzen Sie \"git pull\" um Ihren Branch mit dem Remote-Branch " "zusammenzuführen)\n" -#: sequencer.c:206 builtin/merge.c:776 builtin/merge.c:889 builtin/merge.c:999 -#: builtin/merge.c:1009 +#: run-command.c:80 +msgid "open /dev/null failed" +msgstr "Öffnen von /dev/null fehlgeschlagen" + +#: run-command.c:82 +#, c-format +msgid "dup2(%d,%d) failed" +msgstr "dup2(%d,%d) fehlgeschlagen" + +#: sequencer.c:206 builtin/merge.c:790 builtin/merge.c:903 +#: builtin/merge.c:1013 builtin/merge.c:1023 #, c-format msgid "Could not open '%s' for writing" msgstr "Konnte '%s' nicht zum Schreiben öffnen." -#: sequencer.c:208 builtin/merge.c:335 builtin/merge.c:779 -#: builtin/merge.c:1001 builtin/merge.c:1014 +#: sequencer.c:208 builtin/merge.c:350 builtin/merge.c:793 +#: builtin/merge.c:1015 builtin/merge.c:1028 #, c-format msgid "Could not write to '%s'" msgstr "Konnte nicht nach '%s' schreiben." @@ -954,7 +992,7 @@ msgstr "" "mit 'git add <Pfade>' oder 'git rm <Pfade>'und tragen Sie das Ergebnis mit\n" "'git commit' ein" -#: sequencer.c:245 sequencer.c:859 sequencer.c:942 +#: sequencer.c:245 sequencer.c:869 sequencer.c:952 #, c-format msgid "Could not write to %s" msgstr "Konnte nicht nach %s schreiben" @@ -979,396 +1017,421 @@ msgstr "" "Tragen Sie Ihre Änderungen ein oder benutzen Sie \"stash\" um fortzufahren." #. TRANSLATORS: %s will be "revert" or "cherry-pick" -#: sequencer.c:319 +#: sequencer.c:324 #, c-format msgid "%s: Unable to write new index file" -msgstr "%s: Konnte neue Bereitstellungsdatei nicht schreiben" +msgstr "%s: Konnte neue Staging-Area-Datei nicht schreiben" -#: sequencer.c:350 +#: sequencer.c:355 msgid "Could not resolve HEAD commit\n" -msgstr "Konnte Version der Zweigspitze (HEAD) nicht auflösen\n" +msgstr "Konnte Commit von HEAD nicht auflösen\n" -#: sequencer.c:371 +#: sequencer.c:377 msgid "Unable to update cache tree\n" -msgstr "Konnte zwischengespeicherten Baum nicht aktualisieren\n" +msgstr "Konnte Cache-Verzeichnis nicht aktualisieren\n" -#: sequencer.c:416 +#: sequencer.c:422 #, c-format msgid "Could not parse commit %s\n" -msgstr "Konnte Version %s nicht parsen\n" +msgstr "Konnte Commit %s nicht parsen\n" -#: sequencer.c:421 +#: sequencer.c:427 #, c-format msgid "Could not parse parent commit %s\n" -msgstr "Konnte Elternversion %s nicht parsen\n" +msgstr "Konnte Eltern-Commit %s nicht parsen\n" -#: sequencer.c:487 +#: sequencer.c:493 msgid "Your index file is unmerged." -msgstr "Ihre Bereitstellungsdatei ist nicht zusammengeführt." +msgstr "Ihre Staging-Area-Datei ist nicht zusammengeführt." -#: sequencer.c:506 +#: sequencer.c:512 #, c-format msgid "Commit %s is a merge but no -m option was given." -msgstr "" -"Version %s ist eine Zusammenführung, aber die Option -m wurde nicht " -"angegeben." +msgstr "Commit %s ist ein Merge, aber die Option -m wurde nicht angegeben." -#: sequencer.c:514 +#: sequencer.c:520 #, c-format msgid "Commit %s does not have parent %d" -msgstr "Version %s hat keinen Elternteil %d" +msgstr "Commit %s hat keinen Elternteil %d" -#: sequencer.c:518 +#: sequencer.c:524 #, c-format msgid "Mainline was specified but commit %s is not a merge." -msgstr "" -"Hauptlinie wurde spezifiziert, aber Version %s ist keine Zusammenführung." +msgstr "Hauptlinie wurde spezifiziert, aber Commit %s ist kein Merge." #. TRANSLATORS: The first %s will be "revert" or #. "cherry-pick", the second %s a SHA1 -#: sequencer.c:531 +#: sequencer.c:537 #, c-format msgid "%s: cannot parse parent commit %s" -msgstr "%s: kann Elternversion %s nicht parsen" +msgstr "%s: kann Eltern-Commit %s nicht parsen" -#: sequencer.c:535 +#: sequencer.c:541 #, c-format msgid "Cannot get commit message for %s" -msgstr "Kann keine Versionsbeschreibung für %s bekommen" +msgstr "Kann keine Commit-Beschreibung für %s bekommen" -#: sequencer.c:621 +#: sequencer.c:627 #, c-format msgid "could not revert %s... %s" -msgstr "Konnte %s nicht zurücknehmen... %s" +msgstr "Konnte \"revert\" nicht auf %s ausführen... %s" -#: sequencer.c:622 +#: sequencer.c:628 #, c-format msgid "could not apply %s... %s" msgstr "Konnte %s nicht anwenden... %s" -#: sequencer.c:654 +#: sequencer.c:664 msgid "empty commit set passed" -msgstr "leere Menge von Versionen übergeben" +msgstr "leere Menge von Commits übergeben" -#: sequencer.c:662 +#: sequencer.c:672 #, c-format msgid "git %s: failed to read the index" -msgstr "git %s: Fehler beim Lesen der Bereitstellung" +msgstr "git %s: Fehler beim Lesen der Staging-Area" -#: sequencer.c:667 +#: sequencer.c:677 #, c-format msgid "git %s: failed to refresh the index" -msgstr "git %s: Fehler beim Aktualisieren der Bereitstellung" +msgstr "git %s: Fehler beim Aktualisieren der Staging-Area" -#: sequencer.c:725 +#: sequencer.c:735 #, c-format msgid "Cannot %s during a %s" msgstr "Kann %s nicht während eines %s durchführen" -#: sequencer.c:747 +#: sequencer.c:757 #, c-format msgid "Could not parse line %d." msgstr "Konnte Zeile %d nicht parsen." -#: sequencer.c:752 +#: sequencer.c:762 msgid "No commits parsed." -msgstr "Keine Versionen geparst." +msgstr "Keine Commits geparst." -#: sequencer.c:765 +#: sequencer.c:775 #, c-format msgid "Could not open %s" msgstr "Konnte %s nicht öffnen" -#: sequencer.c:769 +#: sequencer.c:779 #, c-format msgid "Could not read %s." msgstr "Konnte %s nicht lesen." -#: sequencer.c:776 +#: sequencer.c:786 #, c-format msgid "Unusable instruction sheet: %s" msgstr "Unbenutzbares Instruktionsblatt: %s" -#: sequencer.c:804 +#: sequencer.c:814 #, c-format msgid "Invalid key: %s" msgstr "Ungültiger Schlüssel: %s" -#: sequencer.c:807 +#: sequencer.c:817 #, c-format msgid "Invalid value for %s: %s" msgstr "Ungültiger Wert für %s: %s" -#: sequencer.c:819 +#: sequencer.c:829 #, c-format msgid "Malformed options sheet: %s" msgstr "Fehlerhaftes Optionsblatt: %s" -#: sequencer.c:840 +#: sequencer.c:850 msgid "a cherry-pick or revert is already in progress" msgstr "\"cherry-pick\" oder \"revert\" ist bereits im Gang" -#: sequencer.c:841 +#: sequencer.c:851 msgid "try \"git cherry-pick (--continue | --quit | --abort)\"" msgstr "versuchen Sie \"git cherry-pick (--continue | --quit | --abort)\"" -#: sequencer.c:845 +#: sequencer.c:855 #, c-format msgid "Could not create sequencer directory %s" msgstr "Konnte \"sequencer\"-Verzeichnis %s nicht erstellen" -#: sequencer.c:861 sequencer.c:946 +#: sequencer.c:871 sequencer.c:956 #, c-format msgid "Error wrapping up %s." msgstr "Fehler beim Einpacken von %s." -#: sequencer.c:880 sequencer.c:1014 +#: sequencer.c:890 sequencer.c:1024 msgid "no cherry-pick or revert in progress" msgstr "kein \"cherry-pick\" oder \"revert\" im Gang" -#: sequencer.c:882 +#: sequencer.c:892 msgid "cannot resolve HEAD" -msgstr "kann Zweigspitze (HEAD) nicht auflösen" +msgstr "kann HEAD nicht auflösen" -#: sequencer.c:884 +#: sequencer.c:894 msgid "cannot abort from a branch yet to be born" -msgstr "kann nicht abbrechen: bin auf einem Zweig, der noch geboren wird" +msgstr "kann nicht abbrechen: bin auf einem Branch, der noch geboren wird" -#: sequencer.c:906 builtin/apply.c:4060 +#: sequencer.c:916 builtin/apply.c:4061 #, c-format msgid "cannot open %s: %s" msgstr "Kann %s nicht öffnen: %s" -#: sequencer.c:909 +#: sequencer.c:919 #, c-format msgid "cannot read %s: %s" msgstr "Kann %s nicht lesen: %s" -#: sequencer.c:910 +#: sequencer.c:920 msgid "unexpected end of file" msgstr "Unerwartetes Dateiende" -#: sequencer.c:916 +#: sequencer.c:926 #, c-format msgid "stored pre-cherry-pick HEAD file '%s' is corrupt" -msgstr "" -"gespeicherte \"pre-cherry-pick\" Datei der Zweigspitze (HEAD) '%s' ist " -"beschädigt" +msgstr "gespeicherte \"pre-cherry-pick\" HEAD Datei '%s' ist beschädigt" -#: sequencer.c:939 +#: sequencer.c:949 #, c-format msgid "Could not format %s." msgstr "Konnte %s nicht formatieren." -#: sequencer.c:1083 +#: sequencer.c:1092 #, c-format msgid "%s: can't cherry-pick a %s" msgstr "%s: %s kann nicht in \"cherry-pick\" benutzt werden" -#: sequencer.c:1085 +#: sequencer.c:1095 #, c-format msgid "%s: bad revision" -msgstr "%s: ungültige Revision" +msgstr "%s: ungültiger Commit" -#: sequencer.c:1119 +#: sequencer.c:1129 msgid "Can't revert as initial commit" -msgstr "Rücknahme-Version kann nicht initial sein." +msgstr "Kann nicht als allerersten Commit einen Revert ausführen." -#: sequencer.c:1120 +#: sequencer.c:1130 msgid "Can't cherry-pick into empty head" -msgstr "Kann \"cherry-pick\" nicht in einem leeren Zweig ausführen." +msgstr "Kann nicht als allerersten Commit einen Cherry-Pick ausführen." -#: sha1_name.c:1036 +#: sha1_name.c:440 +msgid "" +"Git normally never creates a ref that ends with 40 hex characters\n" +"because it will be ignored when you just specify 40-hex. These refs\n" +"may be created by mistake. For example,\n" +"\n" +" git checkout -b $br $(git rev-parse ...)\n" +"\n" +"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" +"examine these refs and maybe delete them. Turn this message off by\n" +"running \"git config advice.objectNameWarning false\"" +msgstr "" +"Git erzeugt normalerweise keine Referenzen die mit\n" +"40 Hex-Zeichen enden, da diese ignoriert werden wenn\n" +"Sie diese angeben. Diese Referenzen könnten aus Versehen\n" +"erzeugt worden sein. Zum Beispiel,\n" +"\n" +" git checkout -b $br $(git rev-parse ...)\n" +"\n" +"wobei \"$br\" leer ist und eine 40-Hex-Referenz erzeugt\n" +"wurde. Bitte prüfen Sie diese Referenzen und löschen\n" +"Sie sie gegebenenfalls. Unterdrücken Sie diese Meldung\n" +"indem Sie \"git config advice.objectNameWarning false\"\n" +"ausführen." + +#: sha1_name.c:1097 msgid "HEAD does not point to a branch" -msgstr "Zweigspitze (HEAD) zeigt auf keinen Zweig" +msgstr "HEAD zeigt auf keinen Branch" -#: sha1_name.c:1039 +#: sha1_name.c:1100 #, c-format msgid "No such branch: '%s'" -msgstr "Kein solcher Zweig '%s'" +msgstr "Kein solcher Branch '%s'" -#: sha1_name.c:1041 +#: sha1_name.c:1102 #, c-format msgid "No upstream configured for branch '%s'" -msgstr "Kein entferntes Projektarchiv für Zweig '%s' konfiguriert." +msgstr "Kein Upstream-Branch für Branch '%s' konfiguriert." -#: sha1_name.c:1044 +#: sha1_name.c:1106 #, c-format msgid "Upstream branch '%s' not stored as a remote-tracking branch" -msgstr "" -"Zweig '%s' des entfernten Projektarchivs ist kein gefolgter Ãœbernahmezweig" +msgstr "Upstream-Branch '%s' ist nicht als Remote-Tracking-Branch gespeichert" #: wrapper.c:408 #, c-format msgid "unable to access '%s': %s" msgstr "konnte nicht auf '%s' zugreifen: %s" -#: wrapper.c:423 +#: wrapper.c:429 #, c-format msgid "unable to access '%s'" msgstr "konnte nicht auf '%s' zugreifen" -#: wrapper.c:434 +#: wrapper.c:440 #, c-format msgid "unable to look up current user in the passwd file: %s" msgstr "konnte aktuellen Benutzer nicht in Passwort-Datei finden: %s" -#: wrapper.c:435 +#: wrapper.c:441 msgid "no such user" msgstr "kein solcher Benutzer" -#: wt-status.c:140 +#: wt-status.c:141 msgid "Unmerged paths:" msgstr "Nicht zusammengeführte Pfade:" -#: wt-status.c:167 wt-status.c:194 +#: wt-status.c:168 wt-status.c:195 #, c-format msgid " (use \"git reset %s <file>...\" to unstage)" msgstr "" -" (benutzen Sie \"git reset %s <Datei>...\" zum Herausnehmen aus der " -"Bereitstellung)" +" (benutzen Sie \"git reset %s <Datei>...\" zum Entfernen aus der Staging-" +"Area)" -#: wt-status.c:169 wt-status.c:196 +#: wt-status.c:170 wt-status.c:197 msgid " (use \"git rm --cached <file>...\" to unstage)" msgstr "" -" (benutzen Sie \"git rm --cached <Datei>...\" zum Herausnehmen aus der " -"Bereitstellung)" +" (benutzen Sie \"git rm --cached <Datei>...\" zum Entfernen aus der Staging-" +"Area)" -#: wt-status.c:173 +#: wt-status.c:174 msgid " (use \"git add <file>...\" to mark resolution)" msgstr "" " (benutzen Sie \"git add/rm <Datei>...\" um die Auflösung zu markieren)" -#: wt-status.c:175 wt-status.c:179 +#: wt-status.c:176 wt-status.c:180 msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)" msgstr "" " (benutzen Sie \"git add/rm <Datei>...\" um die Auflösung entsprechend zu " "markieren)" -#: wt-status.c:177 +#: wt-status.c:178 msgid " (use \"git rm <file>...\" to mark resolution)" msgstr "" " (benutzen Sie \"git add/rm <Datei>...\" um die Auflösung zu markieren)" -#: wt-status.c:188 +#: wt-status.c:189 msgid "Changes to be committed:" -msgstr "zum Eintragen bereitgestellte Änderungen:" +msgstr "zum Commit vorgemerkte Änderungen:" -#: wt-status.c:206 +#: wt-status.c:207 msgid "Changes not staged for commit:" -msgstr "Änderungen, die nicht zum Eintragen bereitgestellt sind:" +msgstr "Änderungen, die nicht zum Commit vorgemerkt sind:" -#: wt-status.c:210 +#: wt-status.c:211 msgid " (use \"git add <file>...\" to update what will be committed)" -msgstr " (benutzen Sie \"git add <Datei>...\" zum Bereitstellen)" +msgstr "" +" (benutzen Sie \"git add <Datei>...\" um die Änderungen zum Commit " +"vorzumerken)" -#: wt-status.c:212 +#: wt-status.c:213 msgid " (use \"git add/rm <file>...\" to update what will be committed)" -msgstr " (benutzen Sie \"git add/rm <Datei>...\" zum Bereitstellen)" +msgstr "" +" (benutzen Sie \"git add/rm <Datei>...\" um die Änderungen zum Commit " +"vorzumerken)" -#: wt-status.c:213 +#: wt-status.c:214 msgid "" " (use \"git checkout -- <file>...\" to discard changes in working directory)" msgstr "" " (benutzen Sie \"git checkout -- <Datei>...\" um die Änderungen im " "Arbeitsverzeichnis zu verwerfen)" -#: wt-status.c:215 +#: wt-status.c:216 msgid " (commit or discard the untracked or modified content in submodules)" msgstr "" -" (tragen Sie ein oder verwerfen Sie den unbeobachteten oder geänderten " -"Inhalt in den Unterprojekten)" +" (committen oder verwerfen Sie den unbeobachteten oder geänderten Inhalt in " +"den Submodulen)" -#: wt-status.c:227 +#: wt-status.c:228 #, c-format msgid " (use \"git %s <file>...\" to include in what will be committed)" -msgstr " (benutzen Sie \"git %s <Datei>...\" zum Einfügen in die Eintragung)" +msgstr "" +" (benutzen Sie \"git %s <Datei>...\" um die Änderungen zum Commit " +"vorzumerken)" -#: wt-status.c:244 +#: wt-status.c:245 msgid "bug" msgstr "Fehler" -#: wt-status.c:249 +#: wt-status.c:250 msgid "both deleted:" msgstr "beide gelöscht:" -#: wt-status.c:250 +#: wt-status.c:251 msgid "added by us:" msgstr "von uns hinzugefügt:" -#: wt-status.c:251 +#: wt-status.c:252 msgid "deleted by them:" msgstr "von denen gelöscht:" -#: wt-status.c:252 +#: wt-status.c:253 msgid "added by them:" msgstr "von denen hinzugefügt:" -#: wt-status.c:253 +#: wt-status.c:254 msgid "deleted by us:" msgstr "von uns gelöscht:" -#: wt-status.c:254 +#: wt-status.c:255 msgid "both added:" msgstr "von beiden hinzugefügt:" -#: wt-status.c:255 +#: wt-status.c:256 msgid "both modified:" msgstr "von beiden geändert:" -#: wt-status.c:285 +#: wt-status.c:286 msgid "new commits, " -msgstr "neue Versionen, " +msgstr "neue Commits, " -#: wt-status.c:287 +#: wt-status.c:288 msgid "modified content, " msgstr "geänderter Inhalt, " -#: wt-status.c:289 +#: wt-status.c:290 msgid "untracked content, " msgstr "unbeobachteter Inhalt, " -#: wt-status.c:306 +#: wt-status.c:307 #, c-format msgid "new file: %s" msgstr "neue Datei: %s" -#: wt-status.c:309 +#: wt-status.c:310 #, c-format msgid "copied: %s -> %s" msgstr "kopiert: %s -> %s" -#: wt-status.c:312 +#: wt-status.c:313 #, c-format msgid "deleted: %s" msgstr "gelöscht: %s" -#: wt-status.c:315 +#: wt-status.c:316 #, c-format msgid "modified: %s" msgstr "geändert: %s" -#: wt-status.c:318 +#: wt-status.c:319 #, c-format msgid "renamed: %s -> %s" msgstr "umbenannt: %s -> %s" -#: wt-status.c:321 +#: wt-status.c:322 #, c-format msgid "typechange: %s" msgstr "Typänderung: %s" -#: wt-status.c:324 +#: wt-status.c:325 #, c-format msgid "unknown: %s" msgstr "unbekannt: %s" -#: wt-status.c:327 +#: wt-status.c:328 #, c-format msgid "unmerged: %s" msgstr "nicht zusammengeführt: %s" -#: wt-status.c:330 +#: wt-status.c:331 #, c-format msgid "bug: unhandled diff status %c" msgstr "Fehler: unbehandelter Differenz-Status %c" @@ -1377,18 +1440,17 @@ msgstr "Fehler: unbehandelter Differenz-Status %c" msgid "You have unmerged paths." msgstr "Sie haben nicht zusammengeführte Pfade." -#: wt-status.c:806 wt-status.c:958 +#: wt-status.c:806 msgid " (fix conflicts and run \"git commit\")" msgstr " (beheben Sie die Konflikte und führen Sie \"git commit\" aus)" #: wt-status.c:809 msgid "All conflicts fixed but you are still merging." -msgstr "" -"Alle Konflikte sind behoben, aber Sie sind immer noch beim Zusammenführen." +msgstr "Alle Konflikte sind behoben, aber Sie sind immer noch beim Merge." #: wt-status.c:812 msgid " (use \"git commit\" to conclude merge)" -msgstr " (benutzen Sie \"git commit\" um die Zusammenführung abzuschließen)" +msgstr " (benutzen Sie \"git commit\" um den Merge abzuschließen)" #: wt-status.c:822 msgid "You are in the middle of an am session." @@ -1399,28 +1461,28 @@ msgid "The current patch is empty." msgstr "Der aktuelle Patch ist leer." #: wt-status.c:829 -msgid " (fix conflicts and then run \"git am --resolved\")" +msgid " (fix conflicts and then run \"git am --continue\")" msgstr "" -" (beheben Sie die Konflikte und führen Sie dann \"git am --resolved\" aus)" +" (beheben Sie die Konflikte und führen Sie dann \"git am --continue\" aus)" #: wt-status.c:831 msgid " (use \"git am --skip\" to skip this patch)" -msgstr " (benutzen Sie \"git am --skip\" um diesen Patch auszulassen)" +msgstr " (benutzen Sie \"git am --skip\" um diesen Patch auszulassen)" #: wt-status.c:833 msgid " (use \"git am --abort\" to restore the original branch)" msgstr "" -" (benutzen Sie \"git am --abort\" um den ursprünglichen Zweig " +" (benutzen Sie \"git am --abort\" um den ursprünglichen Branch " "wiederherzustellen)" #: wt-status.c:893 wt-status.c:910 #, c-format msgid "You are currently rebasing branch '%s' on '%s'." -msgstr "Sie sind gerade beim Neuaufbau von Zweig '%s' auf '%s'." +msgstr "Sie sind gerade beim Rebase von Branch '%s' auf '%s'." #: wt-status.c:898 wt-status.c:915 msgid "You are currently rebasing." -msgstr "Sie sind gerade beim Neuaufbau." +msgstr "Sie sind gerade beim Rebase." #: wt-status.c:901 msgid " (fix conflicts and then run \"git rebase --continue\")" @@ -1435,7 +1497,7 @@ msgstr " (benutzen Sie \"git rebase --skip\" um diesen Patch auszulassen)" #: wt-status.c:905 msgid " (use \"git rebase --abort\" to check out the original branch)" msgstr "" -" (benutzen Sie \"git rebase --abort\" um den ursprünglichen Zweig " +" (benutzen Sie \"git rebase --abort\" um den ursprünglichen Branch " "auszuchecken)" #: wt-status.c:918 @@ -1447,34 +1509,34 @@ msgstr " (alle Konflikte behoben: führen Sie \"git rebase --continue\" aus)" msgid "" "You are currently splitting a commit while rebasing branch '%s' on '%s'." msgstr "" -"Sie teilen gerade eine Version auf, während ein Neuaufbau von Zweig '%s' auf " +"Sie teilen gerade einen Commit auf, während ein Rebase von Branch '%s' auf " "'%s' im Gange ist." #: wt-status.c:927 msgid "You are currently splitting a commit during a rebase." -msgstr "Sie teilen gerade eine Version während eines Neuaufbaus auf." +msgstr "Sie teilen gerade einen Commit während eines Rebase auf." #: wt-status.c:930 msgid " (Once your working directory is clean, run \"git rebase --continue\")" msgstr "" -" (Sobald Ihr Arbeitsverzeichnis sauber ist, führen Sie \"git rebase --" +" (Sobald Ihr Arbeitsverzeichnis unverändert ist, führen Sie \"git rebase --" "continue\" aus)" #: wt-status.c:934 #, c-format msgid "You are currently editing a commit while rebasing branch '%s' on '%s'." msgstr "" -"Sie editieren gerade eine Version während eines Neuaufbaus von Zweig '%s' " -"auf '%s'." +"Sie editieren gerade einen Commit während eines Rebase von Branch '%s' auf " +"'%s'." #: wt-status.c:939 msgid "You are currently editing a commit during a rebase." -msgstr "Sie editieren gerade eine Version während eines Neuaufbaus." +msgstr "Sie editieren gerade einen Commit während eines Rebase." #: wt-status.c:942 msgid " (use \"git commit --amend\" to amend the current commit)" msgstr "" -" (benutzen Sie \"git commit --amend\" um die aktuelle Version nachzubessern)" +" (benutzen Sie \"git commit --amend\" um den aktuellen Commit nachzubessern)" #: wt-status.c:944 msgid "" @@ -1487,74 +1549,91 @@ msgstr "" msgid "You are currently cherry-picking." msgstr "Sie führen gerade \"cherry-pick\" aus." +#: wt-status.c:958 +msgid " (fix conflicts and run \"git cherry-pick --continue\")" +msgstr "" +" (beheben Sie die Konflikte und führen Sie dann \"git cherry-pick --continue" +"\" aus)" + #: wt-status.c:961 -msgid " (all conflicts fixed: run \"git commit\")" -msgstr " (alle Konflikte behoben: führen Sie \"git commit\" aus)" +msgid " (all conflicts fixed: run \"git cherry-pick --continue\")" +msgstr "" +" (alle Konflikte behoben: führen Sie \"git cherry-pick --continue\" aus)" + +#: wt-status.c:963 +msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)" +msgstr "" +" (benutzen Sie \"git cherry-pick --abort\" um die Cherry-Pick-Operation " +"abzubrechen)" -#: wt-status.c:970 +#: wt-status.c:972 #, c-format msgid "You are currently reverting commit %s." -msgstr "Sie nehmen gerade Version '%s' zurück." +msgstr "Sie sind gerade an einem Revert von Commit '%s'." -#: wt-status.c:975 +#: wt-status.c:977 msgid " (fix conflicts and run \"git revert --continue\")" msgstr "" " (beheben Sie die Konflikte und führen Sie dann \"git revert --continue\" " "aus)" -#: wt-status.c:978 +#: wt-status.c:980 msgid " (all conflicts fixed: run \"git revert --continue\")" msgstr " (alle Konflikte behoben: führen Sie \"git revert --continue\" aus)" -#: wt-status.c:980 +#: wt-status.c:982 msgid " (use \"git revert --abort\" to cancel the revert operation)" msgstr "" -" (benutzen Sie \"git revert --abort\" um die Umkehroperation abzubrechen)" +" (benutzen Sie \"git revert --abort\" um die Revert-Operation abzubrechen)" -#: wt-status.c:991 +#: wt-status.c:993 #, c-format msgid "You are currently bisecting, started from branch '%s'." -msgstr "Sie sind gerade bei einer binären Suche, gestartet von Zweig '%s'." +msgstr "Sie sind gerade bei einer binären Suche, gestartet von Branch '%s'." -#: wt-status.c:995 +#: wt-status.c:997 msgid "You are currently bisecting." msgstr "Sie sind gerade bei einer binären Suche." -#: wt-status.c:998 +#: wt-status.c:1000 msgid " (use \"git bisect reset\" to get back to the original branch)" msgstr "" -" (benutzen Sie \"git bisect reset\" um zum ursprünglichen Zweig " +" (benutzen Sie \"git bisect reset\" um zum ursprünglichen Branch " "zurückzukehren)" #: wt-status.c:1173 msgid "On branch " -msgstr "Auf Zweig " +msgstr "Auf Branch " + +#: wt-status.c:1180 +msgid "rebase in progress; onto " +msgstr "Rebase im Gange; auf " -#: wt-status.c:1184 +#: wt-status.c:1187 msgid "HEAD detached at " -msgstr "Zweigspitze (HEAD) losgelöst bei " +msgstr "HEAD losgelöst bei " -#: wt-status.c:1186 +#: wt-status.c:1189 msgid "HEAD detached from " -msgstr "Zweigspitze (HEAD) losgelöst von " +msgstr "HEAD losgelöst von " -#: wt-status.c:1189 +#: wt-status.c:1192 msgid "Not currently on any branch." -msgstr "Im Moment auf keinem Zweig." +msgstr "Im Moment auf keinem Branch." -#: wt-status.c:1206 +#: wt-status.c:1209 msgid "Initial commit" -msgstr "Initiale Version" +msgstr "Initialer Commit" -#: wt-status.c:1220 +#: wt-status.c:1223 msgid "Untracked files" msgstr "Unbeobachtete Dateien" -#: wt-status.c:1222 +#: wt-status.c:1225 msgid "Ignored files" msgstr "Ignorierte Dateien" -#: wt-status.c:1226 +#: wt-status.c:1229 #, c-format msgid "" "It took %.2f seconds to enumerate untracked files. 'status -uno'\n" @@ -1565,90 +1644,90 @@ msgstr "" "'status -uno' könnte das beschleunigen, aber Sie müssen darauf achten,\n" "neue Dateien selbstständig hinzuzufügen (siehe 'git help status')." -#: wt-status.c:1232 +#: wt-status.c:1235 #, c-format msgid "Untracked files not listed%s" msgstr "Unbeobachtete Dateien nicht aufgelistet%s" -#: wt-status.c:1234 +#: wt-status.c:1237 msgid " (use -u option to show untracked files)" msgstr " (benutzen Sie die Option -u um unbeobachteten Dateien anzuzeigen)" -#: wt-status.c:1240 +#: wt-status.c:1243 msgid "No changes" msgstr "Keine Änderungen" -#: wt-status.c:1245 +#: wt-status.c:1248 #, c-format msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n" msgstr "" -"keine Änderungen zum Eintragen hinzugefügt (benutzen Sie \"git add\" und/" -"oder \"git commit -a\")\n" +"keine Änderungen zum Commit vorgemerkt (benutzen Sie \"git add\" und/oder " +"\"git commit -a\")\n" -#: wt-status.c:1248 +#: wt-status.c:1251 #, c-format msgid "no changes added to commit\n" -msgstr "keine Änderungen zum Eintragen hinzugefügt\n" +msgstr "keine Änderungen zum Commit vorgemerkt\n" -#: wt-status.c:1251 +#: wt-status.c:1254 #, c-format msgid "" "nothing added to commit but untracked files present (use \"git add\" to " "track)\n" msgstr "" -"nichts zum Eintragen hinzugefügt, aber es gibt unbeobachtete Dateien " -"(benutzen Sie \"git add\" zum Beobachten)\n" +"nichts zum Commit vorgemerkt, aber es gibt unbeobachtete Dateien (benutzen " +"Sie \"git add\" zum Beobachten)\n" -#: wt-status.c:1254 +#: wt-status.c:1257 #, c-format msgid "nothing added to commit but untracked files present\n" -msgstr "nichts zum Eintragen hinzugefügt, aber es gibt unbeobachtete Dateien\n" +msgstr "nichts zum Commit vorgemerkt, aber es gibt unbeobachtete Dateien\n" -#: wt-status.c:1257 +#: wt-status.c:1260 #, c-format msgid "nothing to commit (create/copy files and use \"git add\" to track)\n" msgstr "" -"nichts einzutragen (Erstellen/Kopieren Sie Dateien und benutzen Sie \"git add" -"\" zum Beobachten)\n" +"nichts zu committen (Erstellen/Kopieren Sie Dateien und benutzen Sie \"git " +"add\" zum Beobachten)\n" -#: wt-status.c:1260 wt-status.c:1265 +#: wt-status.c:1263 wt-status.c:1268 #, c-format msgid "nothing to commit\n" -msgstr "nichts einzutragen\n" +msgstr "nichts zu committen\n" -#: wt-status.c:1263 +#: wt-status.c:1266 #, c-format msgid "nothing to commit (use -u to show untracked files)\n" msgstr "" -"nichts einzutragen (benutzen Sie die Option -u, um unbeobachtete Dateien " +"nichts zu committen (benutzen Sie die Option -u, um unbeobachtete Dateien " "anzuzeigen)\n" -#: wt-status.c:1267 +#: wt-status.c:1270 #, c-format msgid "nothing to commit, working directory clean\n" -msgstr "nichts einzutragen, Arbeitsverzeichnis sauber\n" +msgstr "nichts zu committen, Arbeitsverzeichnis unverändert\n" -#: wt-status.c:1375 +#: wt-status.c:1378 msgid "HEAD (no branch)" -msgstr "HEAD (kein Zweig)" +msgstr "HEAD (kein Branch)" -#: wt-status.c:1381 +#: wt-status.c:1384 msgid "Initial commit on " -msgstr "Initiale Version auf " +msgstr "Initialer Commit auf " -#: wt-status.c:1396 +#: wt-status.c:1399 msgid "behind " msgstr "hinterher " -#: wt-status.c:1399 wt-status.c:1402 +#: wt-status.c:1402 wt-status.c:1405 msgid "ahead " msgstr "voraus " -#: wt-status.c:1404 +#: wt-status.c:1407 msgid ", behind " msgstr ", hinterher " -#: compat/precompose_utf8.c:58 builtin/clone.c:352 +#: compat/precompose_utf8.c:58 builtin/clone.c:351 #, c-format msgid "failed to unlink '%s'" msgstr "Konnte '%s' nicht entfernen." @@ -1724,11 +1803,9 @@ msgstr "" "dieser Version von Git ignoriert.\n" "\n" "* 'git add --ignore-removal <Pfadspezifikation>', was der aktuelle\n" -" Standardwert ist, ignoriert gelöschte Pfade im Arbeitsverzeichnis." -"\n" +" Standardwert ist, ignoriert gelöschte Pfade im Arbeitsverzeichnis.\n" "* 'git add --all <Pfadspezifikation>' berücksichtigt ebenfalls gelöschte\n" -" Pfade." -"\n" +" Pfade.\n" "Führen Sie 'git status' aus, um die gelöschten Pfade zu überprüfen.\n" #: builtin/add.c:144 @@ -1736,7 +1813,7 @@ msgstr "" msgid "unexpected diff status %c" msgstr "unerwarteter Differenz-Status %c" -#: builtin/add.c:149 builtin/commit.c:233 +#: builtin/add.c:149 builtin/commit.c:252 msgid "updating files failed" msgstr "Aktualisierung der Dateien fehlgeschlagen" @@ -1748,147 +1825,146 @@ msgstr "lösche '%s'\n" #: builtin/add.c:253 msgid "Unstaged changes after refreshing the index:" msgstr "" -"Nicht bereitgestellte Änderungen nach Aktualisierung der Bereitstellung:" +"Nicht zum Commit vorgemerkte Änderungen nach Aktualisierung der Staging-Area:" -#: builtin/add.c:256 builtin/add.c:572 builtin/rm.c:275 +#: builtin/add.c:256 builtin/add.c:573 builtin/rm.c:337 #, c-format msgid "pathspec '%s' did not match any files" msgstr "Pfadspezifikation '%s' stimmt mit keinen Dateien überein" #: builtin/add.c:339 msgid "Could not read the index" -msgstr "Konnte die Bereitstellung nicht lesen" +msgstr "Konnte die Staging-Area nicht lesen" -#: builtin/add.c:349 +#: builtin/add.c:350 #, c-format msgid "Could not open '%s' for writing." msgstr "Konnte '%s' nicht zum Schreiben öffnen." -#: builtin/add.c:353 +#: builtin/add.c:354 msgid "Could not write patch" msgstr "Konnte Patch nicht schreiben" -#: builtin/add.c:358 +#: builtin/add.c:359 #, c-format msgid "Could not stat '%s'" msgstr "Konnte Verzeichnis '%s' nicht lesen" -#: builtin/add.c:360 +#: builtin/add.c:361 msgid "Empty patch. Aborted." msgstr "Leerer Patch. Abgebrochen." -#: builtin/add.c:366 +#: builtin/add.c:367 #, c-format msgid "Could not apply '%s'" msgstr "Konnte '%s' nicht anwenden." -#: builtin/add.c:376 +#: builtin/add.c:377 msgid "The following paths are ignored by one of your .gitignore files:\n" msgstr "" "Die folgenden Pfade werden durch eine Ihrer \".gitignore\" Dateien " "ignoriert:\n" -#: builtin/add.c:393 builtin/clean.c:161 builtin/fetch.c:78 builtin/mv.c:63 -#: builtin/prune-packed.c:76 builtin/push.c:425 builtin/remote.c:1253 -#: builtin/rm.c:206 +#: builtin/add.c:394 builtin/clean.c:875 builtin/fetch.c:78 builtin/mv.c:63 +#: builtin/prune-packed.c:73 builtin/push.c:451 builtin/remote.c:1253 +#: builtin/rm.c:268 msgid "dry run" msgstr "Probelauf" -#: builtin/add.c:394 builtin/apply.c:4409 builtin/check-ignore.c:19 -#: builtin/commit.c:1152 builtin/count-objects.c:95 builtin/fsck.c:613 -#: builtin/log.c:1518 builtin/mv.c:62 builtin/read-tree.c:112 +#: builtin/add.c:395 builtin/apply.c:4410 builtin/check-ignore.c:19 +#: builtin/commit.c:1220 builtin/count-objects.c:95 builtin/fsck.c:613 +#: builtin/log.c:1573 builtin/mv.c:62 builtin/read-tree.c:113 msgid "be verbose" msgstr "erweiterte Ausgaben" -#: builtin/add.c:396 +#: builtin/add.c:397 msgid "interactive picking" msgstr "interaktives Auswählen" -#: builtin/add.c:397 builtin/checkout.c:1063 builtin/reset.c:258 +#: builtin/add.c:398 builtin/checkout.c:1073 builtin/reset.c:261 msgid "select hunks interactively" -msgstr "interaktiv Bereiche auswählen" +msgstr "Blöcke interaktiv auswählen" -#: builtin/add.c:398 +#: builtin/add.c:399 msgid "edit current diff and apply" msgstr "aktuelle Unterschiede editieren und anwenden" -#: builtin/add.c:399 +#: builtin/add.c:400 msgid "allow adding otherwise ignored files" msgstr "erlaubt das Hinzufügen andernfalls ignorierter Dateien" -#: builtin/add.c:400 +#: builtin/add.c:401 msgid "update tracked files" msgstr "aktualisiert beobachtete Dateien" -#: builtin/add.c:401 +#: builtin/add.c:402 msgid "record only the fact that the path will be added later" msgstr "speichert nur, dass der Pfad später hinzugefügt werden soll" -#: builtin/add.c:402 +#: builtin/add.c:403 msgid "add changes from all tracked and untracked files" msgstr "" "fügt Änderungen von allen beobachteten und unbeobachteten Dateien hinzu" #. takes no arguments -#: builtin/add.c:405 +#: builtin/add.c:406 msgid "ignore paths removed in the working tree (same as --no-all)" -msgstr "ignoriert gelöschte Pfade im Arbeitsverzeichnis (genau wie " -"--no-all)" +msgstr "ignoriert gelöschte Pfade im Arbeitsverzeichnis (genau wie --no-all)" -#: builtin/add.c:407 +#: builtin/add.c:408 msgid "don't add, only refresh the index" -msgstr "fügt nichts hinzu, aktualisiert nur die Bereitstellung" +msgstr "fügt nichts hinzu, aktualisiert nur die Staging-Area" -#: builtin/add.c:408 +#: builtin/add.c:409 msgid "just skip files which cannot be added because of errors" msgstr "" "überspringt Dateien, die aufgrund von Fehlern nicht hinzugefügt werden " "konnten" -#: builtin/add.c:409 +#: builtin/add.c:410 msgid "check if - even missing - files are ignored in dry run" msgstr "prüft ob - auch fehlende - Dateien im Probelauf ignoriert werden" -#: builtin/add.c:431 +#: builtin/add.c:432 #, c-format msgid "Use -f if you really want to add them.\n" msgstr "Verwenden Sie -f wenn Sie diese wirklich hinzufügen möchten.\n" -#: builtin/add.c:432 +#: builtin/add.c:433 msgid "no files added" msgstr "keine Dateien hinzugefügt" -#: builtin/add.c:438 +#: builtin/add.c:439 msgid "adding files failed" msgstr "Hinzufügen von Dateien fehlgeschlagen" -#: builtin/add.c:477 +#: builtin/add.c:478 msgid "-A and -u are mutually incompatible" msgstr "Die Optionen -A und -u sind zueinander inkompatibel." -#: builtin/add.c:495 +#: builtin/add.c:496 msgid "Option --ignore-missing can only be used together with --dry-run" msgstr "" "Die Option --ignore-missing kann nur zusammen mit --dry-run verwendet werden." -#: builtin/add.c:525 +#: builtin/add.c:526 #, c-format msgid "Nothing specified, nothing added.\n" msgstr "Nichts spezifiziert, nichts hinzugefügt.\n" -#: builtin/add.c:526 +#: builtin/add.c:527 #, c-format msgid "Maybe you wanted to say 'git add .'?\n" msgstr "Wollten Sie vielleicht 'git add .' sagen?\n" -#: builtin/add.c:532 builtin/check-ignore.c:66 builtin/clean.c:204 -#: builtin/commit.c:293 builtin/mv.c:82 builtin/rm.c:235 +#: builtin/add.c:533 builtin/check-ignore.c:161 builtin/clean.c:919 +#: builtin/commit.c:312 builtin/mv.c:82 builtin/rm.c:297 msgid "index file corrupt" -msgstr "Bereitstellungsdatei beschädigt" +msgstr "Staging-Area-Datei beschädigt" -#: builtin/add.c:604 builtin/apply.c:4505 builtin/mv.c:229 builtin/rm.c:370 +#: builtin/add.c:605 builtin/apply.c:4506 builtin/mv.c:229 builtin/rm.c:432 msgid "Unable to write new index file" -msgstr "Konnte neue Bereitstellungsdatei nicht schreiben." +msgstr "Konnte neue Staging-Area-Datei nicht schreiben." #: builtin/apply.c:57 msgid "git apply [options] [<patch>...]" @@ -1897,12 +1973,12 @@ msgstr "git apply [Optionen] [<Patch>...]" #: builtin/apply.c:110 #, c-format msgid "unrecognized whitespace option '%s'" -msgstr "nicht erkannte Option für Leerzeichen: '%s'" +msgstr "nicht erkannte Whitespace-Option: '%s'" #: builtin/apply.c:125 #, c-format msgid "unrecognized whitespace ignore option '%s'" -msgstr "nicht erkannte Option zum Ignorieren von Leerzeichen: '%s'" +msgstr "nicht erkannte Option zum Ignorieren von Whitespace: '%s'" #: builtin/apply.c:823 #, c-format @@ -2015,7 +2091,7 @@ msgstr "Patch mit nutzlosen Informationen bei Zeile %d" #: builtin/apply.c:2076 #, c-format msgid "unable to read symlink %s" -msgstr "konnte symbolische Verknüpfung %s nicht lesen" +msgstr "konnte symbolischen Verweis %s nicht lesen" #: builtin/apply.c:2080 #, c-format @@ -2075,319 +2151,315 @@ msgstr "Anwendung des Patches fehlgeschlagen: %s:%ld" msgid "cannot checkout %s" msgstr "kann %s nicht auschecken" -#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3193 +#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3194 #, c-format msgid "read of %s failed" msgstr "Konnte %s nicht lesen" -#: builtin/apply.c:3173 builtin/apply.c:3395 +#: builtin/apply.c:3174 builtin/apply.c:3396 #, c-format msgid "path %s has been renamed/deleted" msgstr "Pfad %s wurde umbenannt/gelöscht" -#: builtin/apply.c:3254 builtin/apply.c:3409 +#: builtin/apply.c:3255 builtin/apply.c:3410 #, c-format msgid "%s: does not exist in index" -msgstr "%s ist nicht bereitgestellt" +msgstr "%s ist nicht in der Staging-Area" -#: builtin/apply.c:3258 builtin/apply.c:3401 builtin/apply.c:3423 +#: builtin/apply.c:3259 builtin/apply.c:3402 builtin/apply.c:3424 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: builtin/apply.c:3263 builtin/apply.c:3417 +#: builtin/apply.c:3264 builtin/apply.c:3418 #, c-format msgid "%s: does not match index" -msgstr "%s entspricht nicht der Bereitstellung" +msgstr "%s entspricht nicht der Version in der Staging-Area" -#: builtin/apply.c:3365 +#: builtin/apply.c:3366 msgid "removal patch leaves file contents" msgstr "Lösch-Patch hinterlässt Dateiinhalte" -#: builtin/apply.c:3434 +#: builtin/apply.c:3435 #, c-format msgid "%s: wrong type" msgstr "%s: falscher Typ" -#: builtin/apply.c:3436 +#: builtin/apply.c:3437 #, c-format msgid "%s has type %o, expected %o" msgstr "%s ist vom Typ %o, erwartete %o" -#: builtin/apply.c:3537 +#: builtin/apply.c:3538 #, c-format msgid "%s: already exists in index" msgstr "%s ist bereits bereitgestellt" -#: builtin/apply.c:3540 +#: builtin/apply.c:3541 #, c-format msgid "%s: already exists in working directory" msgstr "%s existiert bereits im Arbeitsverzeichnis" -#: builtin/apply.c:3560 +#: builtin/apply.c:3561 #, c-format msgid "new mode (%o) of %s does not match old mode (%o)" msgstr "neuer Modus (%o) von %s entspricht nicht dem alten Modus (%o)" -#: builtin/apply.c:3565 +#: builtin/apply.c:3566 #, c-format msgid "new mode (%o) of %s does not match old mode (%o) of %s" msgstr "neuer Modus (%o) von %s entspricht nicht dem alten Modus (%o) von %s" -#: builtin/apply.c:3573 +#: builtin/apply.c:3574 #, c-format msgid "%s: patch does not apply" msgstr "%s: Patch konnte nicht angewendet werden" -#: builtin/apply.c:3586 +#: builtin/apply.c:3587 #, c-format msgid "Checking patch %s..." msgstr "Prüfe Patch %s..." -#: builtin/apply.c:3679 builtin/checkout.c:216 builtin/reset.c:124 +#: builtin/apply.c:3680 builtin/checkout.c:216 builtin/reset.c:127 #, c-format msgid "make_cache_entry failed for path '%s'" msgstr "make_cache_entry für Pfad '%s' fehlgeschlagen" -#: builtin/apply.c:3822 +#: builtin/apply.c:3823 #, c-format msgid "unable to remove %s from index" -msgstr "konnte %s nicht aus der Bereitstellung entfernen" +msgstr "konnte %s nicht aus der Staging-Area entfernen" -#: builtin/apply.c:3850 +#: builtin/apply.c:3851 #, c-format -msgid "corrupt patch for subproject %s" -msgstr "fehlerhafter Patch für Unterprojekt %s" +msgid "corrupt patch for submodule %s" +msgstr "fehlerhafter Patch für Submodul %s" -#: builtin/apply.c:3854 +#: builtin/apply.c:3855 #, c-format msgid "unable to stat newly created file '%s'" msgstr "konnte neu erstellte Datei '%s' nicht lesen" -#: builtin/apply.c:3859 +#: builtin/apply.c:3860 #, c-format msgid "unable to create backing store for newly created file %s" msgstr "kann internen Speicher für eben erstellte Datei %s nicht erzeugen" -#: builtin/apply.c:3862 builtin/apply.c:3970 +#: builtin/apply.c:3863 builtin/apply.c:3971 #, c-format msgid "unable to add cache entry for %s" msgstr "kann für %s keinen Eintrag in den Zwischenspeicher hinzufügen" -#: builtin/apply.c:3895 +#: builtin/apply.c:3896 #, c-format msgid "closing file '%s'" msgstr "schließe Datei '%s'" -#: builtin/apply.c:3944 +#: builtin/apply.c:3945 #, c-format msgid "unable to write file '%s' mode %o" msgstr "konnte Datei '%s' mit Modus %o nicht schreiben" -#: builtin/apply.c:4031 +#: builtin/apply.c:4032 #, c-format msgid "Applied patch %s cleanly." msgstr "Patch %s sauber angewendet" -#: builtin/apply.c:4039 +#: builtin/apply.c:4040 msgid "internal error" msgstr "interner Fehler" #. Say this even without --verbose -#: builtin/apply.c:4042 +#: builtin/apply.c:4043 #, c-format msgid "Applying patch %%s with %d reject..." msgid_plural "Applying patch %%s with %d rejects..." msgstr[0] "Wende Patch %%s mit %d Zurückweisung an..." msgstr[1] "Wende Patch %%s mit %d Zurückweisungen an..." -#: builtin/apply.c:4052 +#: builtin/apply.c:4053 #, c-format msgid "truncating .rej filename to %.*s.rej" msgstr "Verkürze Name von .rej Datei zu %.*s.rej" -#: builtin/apply.c:4073 +#: builtin/apply.c:4074 #, c-format msgid "Hunk #%d applied cleanly." msgstr "Patch-Bereich #%d sauber angewendet." -#: builtin/apply.c:4076 +#: builtin/apply.c:4077 #, c-format msgid "Rejected hunk #%d." -msgstr "Patch-Bereich #%d zurückgewiesen." +msgstr "Patch-Block #%d zurückgewiesen." -#: builtin/apply.c:4226 +#: builtin/apply.c:4227 msgid "unrecognized input" msgstr "nicht erkannte Eingabe" -#: builtin/apply.c:4237 +#: builtin/apply.c:4238 msgid "unable to read index file" -msgstr "Konnte Bereitstellungsdatei nicht lesen" +msgstr "Konnte Staging-Area-Datei nicht lesen" -#: builtin/apply.c:4356 builtin/apply.c:4359 builtin/clone.c:92 +#: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:91 #: builtin/fetch.c:63 msgid "path" msgstr "Pfad" -#: builtin/apply.c:4357 +#: builtin/apply.c:4358 msgid "don't apply changes matching the given path" msgstr "wendet keine Änderungen im angegebenen Pfad an" -#: builtin/apply.c:4360 +#: builtin/apply.c:4361 msgid "apply changes matching the given path" msgstr "wendet Änderungen nur im angegebenen Pfad an" -#: builtin/apply.c:4362 +#: builtin/apply.c:4363 msgid "num" msgstr "Anzahl" -#: builtin/apply.c:4363 +#: builtin/apply.c:4364 msgid "remove <num> leading slashes from traditional diff paths" msgstr "" "entfernt <Anzahl> vorangestellte Schrägstriche von herkömmlichen " "Differenzpfaden" -#: builtin/apply.c:4366 +#: builtin/apply.c:4367 msgid "ignore additions made by the patch" msgstr "ignoriert hinzugefügte Zeilen des Patches" -#: builtin/apply.c:4368 +#: builtin/apply.c:4369 msgid "instead of applying the patch, output diffstat for the input" msgstr "" "anstatt der Anwendung des Patches, wird der \"diffstat\" für die Eingabe " "ausgegeben" -#: builtin/apply.c:4372 +#: builtin/apply.c:4373 msgid "show number of added and deleted lines in decimal notation" msgstr "" "zeigt die Anzahl von hinzugefügten/entfernten Zeilen in Dezimalnotation" -#: builtin/apply.c:4374 +#: builtin/apply.c:4375 msgid "instead of applying the patch, output a summary for the input" msgstr "" "anstatt der Anwendung des Patches, wird eine Zusammenfassung für die Eingabe " "ausgegeben" -#: builtin/apply.c:4376 +#: builtin/apply.c:4377 msgid "instead of applying the patch, see if the patch is applicable" msgstr "" "anstatt der Anwendung des Patches, zeige ob Patch angewendet werden kann" -#: builtin/apply.c:4378 +#: builtin/apply.c:4379 msgid "make sure the patch is applicable to the current index" msgstr "" -"stellt sicher, dass der Patch in der aktuellen Bereitstellung angewendet " +"stellt sicher, dass der Patch in der aktuellen Staging-Area angewendet " "werden kann" -#: builtin/apply.c:4380 +#: builtin/apply.c:4381 msgid "apply a patch without touching the working tree" -msgstr "wendet einen Patch an, ohne Änderungen im Arbeitszweig vorzunehmen" +msgstr "" +"wendet einen Patch an, ohne Änderungen im Arbeitsverzeichnis vorzunehmen" -#: builtin/apply.c:4382 +#: builtin/apply.c:4383 msgid "also apply the patch (use with --stat/--summary/--check)" msgstr "wendet den Patch an (Benutzung mit --stat/--summary/--check)" -#: builtin/apply.c:4384 +#: builtin/apply.c:4385 msgid "attempt three-way merge if a patch does not apply" -msgstr "" -"versucht 3-Wege-Zusammenführung, wenn der Patch nicht angewendet werden " -"konnte" +msgstr "versucht 3-Wege-Merge, wenn der Patch nicht angewendet werden konnte" -#: builtin/apply.c:4386 +#: builtin/apply.c:4387 msgid "build a temporary index based on embedded index information" msgstr "" -"erstellt eine temporäre Bereitstellung basierend auf den integrierten " -"Bereitstellungsinformationen" +"erstellt eine temporäre Staging-Area basierend auf den integrierten Staging-" +"Area-Informationen" -#: builtin/apply.c:4388 builtin/checkout-index.c:197 builtin/ls-files.c:456 +#: builtin/apply.c:4389 builtin/checkout-index.c:197 builtin/ls-files.c:462 msgid "paths are separated with NUL character" msgstr "Pfade sind getrennt durch NUL Zeichen" -#: builtin/apply.c:4391 +#: builtin/apply.c:4392 msgid "ensure at least <n> lines of context match" msgstr "stellt sicher, dass mindestens <n> Zeilen des Kontextes übereinstimmen" -#: builtin/apply.c:4392 +#: builtin/apply.c:4393 msgid "action" msgstr "Aktion" -#: builtin/apply.c:4393 +#: builtin/apply.c:4394 msgid "detect new or modified lines that have whitespace errors" -msgstr "ermittelt neue oder geänderte Zeilen die Fehler in Leerzeichen haben" +msgstr "ermittelt neue oder geänderte Zeilen die Whitespace-Fehler haben" -#: builtin/apply.c:4396 builtin/apply.c:4399 +#: builtin/apply.c:4397 builtin/apply.c:4400 msgid "ignore changes in whitespace when finding context" -msgstr "ignoriert Änderungen in Leerzeichen bei der Suche des Kontextes" +msgstr "ignoriert Änderungen im Whitespace bei der Suche des Kontextes" -#: builtin/apply.c:4402 +#: builtin/apply.c:4403 msgid "apply the patch in reverse" msgstr "wendet den Patch in umgekehrter Reihenfolge an" -#: builtin/apply.c:4404 +#: builtin/apply.c:4405 msgid "don't expect at least one line of context" msgstr "erwartet keinen Kontext" -#: builtin/apply.c:4406 +#: builtin/apply.c:4407 msgid "leave the rejected hunks in corresponding *.rej files" msgstr "" -"hinterlässt zurückgewiesene Patch-Bereiche in den entsprechenden *.rej " -"Dateien" +"hinterlässt zurückgewiesene Patch-Blöcke in entsprechenden *.rej Dateien" -#: builtin/apply.c:4408 +#: builtin/apply.c:4409 msgid "allow overlapping hunks" -msgstr "erlaubt sich überlappende Patch-Bereiche" +msgstr "erlaubt sich überlappende Patch-Blöcke" -#: builtin/apply.c:4411 +#: builtin/apply.c:4412 msgid "tolerate incorrectly detected missing new-line at the end of file" msgstr "toleriert fehlerhaft erkannten fehlenden Zeilenumbruch am Dateiende" -#: builtin/apply.c:4414 +#: builtin/apply.c:4415 msgid "do not trust the line counts in the hunk headers" -msgstr "vertraut nicht den Zeilennummern im Kopf des Patch-Bereiches" +msgstr "vertraut nicht den Zeilennummern im Kopf des Patch-Blocks" -#: builtin/apply.c:4416 +#: builtin/apply.c:4417 msgid "root" msgstr "Wurzelverzeichnis" -#: builtin/apply.c:4417 +#: builtin/apply.c:4418 msgid "prepend <root> to all filenames" msgstr "stellt <Wurzelverzeichnis> vor alle Dateinamen" -#: builtin/apply.c:4439 +#: builtin/apply.c:4440 msgid "--3way outside a repository" msgstr "" -"Die Option --3way kann nicht außerhalb eines Projektarchivs verwendet werden." +"Die Option --3way kann nicht außerhalb eines Repositories verwendet werden." -#: builtin/apply.c:4447 +#: builtin/apply.c:4448 msgid "--index outside a repository" msgstr "" -"Die Option --index kann nicht außerhalb eines Projektarchivs verwendet " -"werden." +"Die Option --index kann nicht außerhalb eines Repositories verwendet werden." -#: builtin/apply.c:4450 +#: builtin/apply.c:4451 msgid "--cached outside a repository" msgstr "" -"Die Option --cached kann nicht außerhalb eines Projektarchivs verwendet " -"werden." +"Die Option --cached kann nicht außerhalb eines Repositories verwendet werden." -#: builtin/apply.c:4466 +#: builtin/apply.c:4467 #, c-format msgid "can't open patch '%s'" msgstr "kann Patch '%s' nicht öffnen" -#: builtin/apply.c:4480 +#: builtin/apply.c:4481 #, c-format msgid "squelched %d whitespace error" msgid_plural "squelched %d whitespace errors" -msgstr[0] "unterdrückte %d Fehler in Leerzeichen" -msgstr[1] "unterdrückte %d Fehler in Leerzeichen" +msgstr[0] "unterdrückte %d Whitespace-Fehler" +msgstr[1] "unterdrückte %d Whitespace-Fehler" -#: builtin/apply.c:4486 builtin/apply.c:4496 +#: builtin/apply.c:4487 builtin/apply.c:4497 #, c-format msgid "%d line adds whitespace errors." msgid_plural "%d lines add whitespace errors." -msgstr[0] "%d Zeile fügt Fehler in Leerzeichen hinzu." -msgstr[1] "%d Zeilen fügen Fehler in Leerzeichen hinzu." +msgstr[0] "%d Zeile fügt Whitespace-Fehler hinzu." +msgstr[1] "%d Zeilen fügen Whitespace-Fehler hinzu." #: builtin/archive.c:17 #, c-format @@ -2434,106 +2506,106 @@ msgstr "führt 'git bisect next' aus" #: builtin/bisect--helper.c:19 msgid "update BISECT_HEAD instead of checking out the current commit" -msgstr "aktualisiert BISECT_HEAD, anstatt die aktuelle Version auszuchecken" +msgstr "aktualisiert BISECT_HEAD, anstatt den aktuellen Commit auszuchecken" -#: builtin/blame.c:25 +#: builtin/blame.c:26 msgid "git blame [options] [rev-opts] [rev] [--] file" msgstr "git blame [Optionen] [rev-opts] [rev] [--] Datei" -#: builtin/blame.c:30 +#: builtin/blame.c:31 msgid "[rev-opts] are documented in git-rev-list(1)" msgstr "[rev-opts] sind dokumentiert in git-rev-list(1)" -#: builtin/blame.c:2355 +#: builtin/blame.c:2276 msgid "Show blame entries as we find them, incrementally" msgstr "Zeigt \"blame\"-Einträge schrittweise, während wir sie generieren" -#: builtin/blame.c:2356 +#: builtin/blame.c:2277 msgid "Show blank SHA-1 for boundary commits (Default: off)" -msgstr "Zeigt leere SHA-1 für Grenzversionen (Standard: aus)" +msgstr "Zeigt leere SHA-1 für Grenz-Commits (Standard: aus)" -#: builtin/blame.c:2357 +#: builtin/blame.c:2278 msgid "Do not treat root commits as boundaries (Default: off)" -msgstr "Behandelt Ursprungsversionen nicht als Grenzen (Standard: aus)" +msgstr "Behandelt Ursprungs-Commit nicht als Grenzen (Standard: aus)" -#: builtin/blame.c:2358 +#: builtin/blame.c:2279 msgid "Show work cost statistics" msgstr "Zeigt Statistiken zum Arbeitsaufwand" -#: builtin/blame.c:2359 +#: builtin/blame.c:2280 msgid "Show output score for blame entries" msgstr "Zeigt Ausgabebewertung für \"blame\"-Einträge" -#: builtin/blame.c:2360 +#: builtin/blame.c:2281 msgid "Show original filename (Default: auto)" msgstr "Zeigt ursprünglichen Dateinamen (Standard: auto)" -#: builtin/blame.c:2361 +#: builtin/blame.c:2282 msgid "Show original linenumber (Default: off)" msgstr "Zeigt ursprüngliche Zeilennummer (Standard: aus)" -#: builtin/blame.c:2362 +#: builtin/blame.c:2283 msgid "Show in a format designed for machine consumption" msgstr "Anzeige in einem Format für maschinelle Auswertung" -#: builtin/blame.c:2363 +#: builtin/blame.c:2284 msgid "Show porcelain format with per-line commit information" msgstr "" -"Anzeige in Format für Fremdprogramme mit Versionsinformationen pro Zeile" +"Anzeige in Format für Fremdprogramme mit Commit-Informationen pro Zeile" -#: builtin/blame.c:2364 +#: builtin/blame.c:2285 msgid "Use the same output mode as git-annotate (Default: off)" msgstr "Benutzt den gleichen Ausgabemodus wie \"git-annotate\" (Standard: aus)" -#: builtin/blame.c:2365 +#: builtin/blame.c:2286 msgid "Show raw timestamp (Default: off)" msgstr "Zeigt unbearbeiteten Zeitstempel (Standard: aus)" -#: builtin/blame.c:2366 +#: builtin/blame.c:2287 msgid "Show long commit SHA1 (Default: off)" -msgstr "Zeigt langen Versions-SHA1 (Standard: aus)" +msgstr "Zeigt langen Commit-SHA1 (Standard: aus)" -#: builtin/blame.c:2367 +#: builtin/blame.c:2288 msgid "Suppress author name and timestamp (Default: off)" msgstr "Unterdrückt den Namen des Autors und den Zeitstempel (Standard: aus)" -#: builtin/blame.c:2368 +#: builtin/blame.c:2289 msgid "Show author email instead of name (Default: off)" msgstr "Zeigt anstatt des Namens die Email-Adresse des Autors (Standard: aus)" -#: builtin/blame.c:2369 +#: builtin/blame.c:2290 msgid "Ignore whitespace differences" -msgstr "Ignoriert Unterschiede in Leerzeichen" +msgstr "Ignoriert Unterschiede im Whitespace" -#: builtin/blame.c:2370 +#: builtin/blame.c:2291 msgid "Spend extra cycles to find better match" msgstr "arbeite länger, um bessere Ãœbereinstimmungen zu finden" -#: builtin/blame.c:2371 +#: builtin/blame.c:2292 msgid "Use revisions from <file> instead of calling git-rev-list" -msgstr "Benutzt Revisionen von <Datei> anstatt \"git-rev-list\" aufzurufen" +msgstr "Benutzt Commits von <Datei> anstatt \"git-rev-list\" aufzurufen" -#: builtin/blame.c:2372 +#: builtin/blame.c:2293 msgid "Use <file>'s contents as the final image" msgstr "Benutzt Inhalte der <Datei>en als entgültiges Abbild" -#: builtin/blame.c:2373 builtin/blame.c:2374 +#: builtin/blame.c:2294 builtin/blame.c:2295 msgid "score" msgstr "Bewertung" -#: builtin/blame.c:2373 +#: builtin/blame.c:2294 msgid "Find line copies within and across files" msgstr "Findet kopierte Zeilen innerhalb oder zwischen Dateien" -#: builtin/blame.c:2374 +#: builtin/blame.c:2295 msgid "Find line movements within and across files" msgstr "Findet verschobene Zeilen innerhalb oder zwischen Dateien" -#: builtin/blame.c:2375 +#: builtin/blame.c:2296 msgid "n,m" msgstr "n,m" -#: builtin/blame.c:2375 +#: builtin/blame.c:2296 msgid "Process only line range n,m, counting from 1" msgstr "Verarbeitet nur Zeilen im Bereich n,m, gezählt von 1" @@ -2543,15 +2615,15 @@ msgstr "git branch [Optionen] [-r | -a] [--merged | --no-merged]" #: builtin/branch.c:25 msgid "git branch [options] [-l] [-f] <branchname> [<start-point>]" -msgstr "git branch [Optionen] [-l] [-f] <Zweigname> [<Startpunkt>]" +msgstr "git branch [Optionen] [-l] [-f] <Branchname> [<Startpunkt>]" #: builtin/branch.c:26 msgid "git branch [options] [-r] (-d | -D) <branchname>..." -msgstr "git branch [Optionen] [-r] (-d | -D) <Zweigname>..." +msgstr "git branch [Optionen] [-r] (-d | -D) <Branchname>..." #: builtin/branch.c:27 msgid "git branch [options] (-m | -M) [<oldbranch>] <newbranch>" -msgstr "git branch [Optionen] (-m | -M) [<alterZweig>] <neuerZweig>" +msgstr "git branch [Optionen] (-m | -M) [<alterBranch>] <neuerBranch>" #: builtin/branch.c:150 #, c-format @@ -2559,9 +2631,8 @@ msgid "" "deleting branch '%s' that has been merged to\n" " '%s', but not yet merged to HEAD." msgstr "" -"entferne Zweig '%s', der zusammengeführt wurde mit\n" -" '%s', aber noch nicht mit der Zweigspitze (HEAD) zusammengeführt " -"wurde." +"entferne Branch '%s', der zusammengeführt wurde mit\n" +" '%s', aber noch nicht mit HEAD zusammengeführt wurde." #: builtin/branch.c:154 #, c-format @@ -2569,13 +2640,13 @@ msgid "" "not deleting branch '%s' that is not yet merged to\n" " '%s', even though it is merged to HEAD." msgstr "" -"entferne Zweig '%s' nicht, der noch nicht zusammengeführt wurde mit\n" -" '%s', obwohl er mit der Zweigspitze (HEAD) zusammengeführt wurde." +"entferne Branch '%s' nicht, der noch nicht zusammengeführt wurde mit\n" +" '%s', obwohl er mit HEAD zusammengeführt wurde." #: builtin/branch.c:168 #, c-format msgid "Couldn't look up commit object for '%s'" -msgstr "Konnte Versionsobjekt für '%s' nicht nachschlagen." +msgstr "Konnte Commit-Objekt für '%s' nicht nachschlagen." #: builtin/branch.c:172 #, c-format @@ -2583,8 +2654,8 @@ msgid "" "The branch '%s' is not fully merged.\n" "If you are sure you want to delete it, run 'git branch -D %s'." msgstr "" -"Der Zweig '%s' ist nicht vollständig zusammengeführt.\n" -"Wenn Sie sicher sind diesen Zweig zu entfernen, führen Sie 'git branch -D " +"Der Branch '%s' ist nicht vollständig zusammengeführt.\n" +"Wenn Sie sicher sind diesen Branch zu entfernen, führen Sie 'git branch -D " "%s' aus." #: builtin/branch.c:185 @@ -2597,48 +2668,48 @@ msgstr "kann -a nicht mit -d benutzen" #: builtin/branch.c:219 msgid "Couldn't look up commit object for HEAD" -msgstr "Konnte Versionsobjekt für Zweigspitze (HEAD) nicht nachschlagen." +msgstr "Konnte Commit-Objekt für HEAD nicht nachschlagen." #: builtin/branch.c:227 #, c-format msgid "Cannot delete the branch '%s' which you are currently on." msgstr "" -"Kann Zweig '%s' nicht entfernen, da Sie sich gerade auf diesem befinden." +"Kann Branch '%s' nicht entfernen, da Sie sich gerade auf diesem befinden." #: builtin/branch.c:240 #, c-format msgid "remote branch '%s' not found." -msgstr "externer Zweig '%s' nicht gefunden" +msgstr "Remote-Branch '%s' nicht gefunden" #: builtin/branch.c:241 #, c-format msgid "branch '%s' not found." -msgstr "Zweig '%s' nicht gefunden." +msgstr "Branch '%s' nicht gefunden." #: builtin/branch.c:255 #, c-format msgid "Error deleting remote branch '%s'" -msgstr "Fehler beim Entfernen des externen Zweiges '%s'" +msgstr "Fehler beim Entfernen des Remote-Branches '%s'" #: builtin/branch.c:256 #, c-format msgid "Error deleting branch '%s'" -msgstr "Fehler beim Entfernen des Zweiges '%s'" +msgstr "Fehler beim Entfernen des Branches '%s'" #: builtin/branch.c:263 #, c-format msgid "Deleted remote branch %s (was %s).\n" -msgstr "Externer Zweig %s entfernt (war %s).\n" +msgstr "Remote-Branch %s entfernt (war %s).\n" #: builtin/branch.c:264 #, c-format msgid "Deleted branch %s (was %s).\n" -msgstr "Zweig %s entfernt (war %s).\n" +msgstr "Branch %s entfernt (war %s).\n" #: builtin/branch.c:366 #, c-format msgid "branch '%s' does not point at a commit" -msgstr "Zweig '%s' zeigt auf keine Version" +msgstr "Branch '%s' zeigt auf keinen Commit" #: builtin/branch.c:453 #, c-format @@ -2677,12 +2748,12 @@ msgstr " **** ungültige Referenz ****" #: builtin/branch.c:582 #, c-format msgid "(no branch, rebasing %s)" -msgstr "(kein Zweig, Neuaufbau von Zweig %s im Gange)" +msgstr "(kein Branch, Rebase von Branch %s im Gange)" #: builtin/branch.c:585 #, c-format msgid "(no branch, bisect started on %s)" -msgstr "(kein Zweig, Neuaufbau begonnen bei %s)" +msgstr "(kein Branch, binäre Suche begonnen bei %s)" #: builtin/branch.c:588 #, c-format @@ -2691,12 +2762,12 @@ msgstr "(losgelöst von %s)" #: builtin/branch.c:591 msgid "(no branch)" -msgstr "(kein Zweig)" +msgstr "(kein Branch)" #: builtin/branch.c:637 #, c-format msgid "object '%s' does not point to a commit" -msgstr "Objekt '%s' zeigt auf keine Version" +msgstr "Objekt '%s' zeigt auf keinen Commit" #: builtin/branch.c:669 msgid "some refs could not be read" @@ -2705,31 +2776,31 @@ msgstr "Konnte einige Referenzen nicht lesen" #: builtin/branch.c:682 msgid "cannot rename the current branch while not on any." msgstr "" -"Kann aktuellen Zweig nicht umbenennen, solange Sie sich auf keinem befinden." +"Kann aktuellen Branch nicht umbenennen, solange Sie sich auf keinem befinden." #: builtin/branch.c:692 #, c-format msgid "Invalid branch name: '%s'" -msgstr "Ungültiger Zweig-Name: '%s'" +msgstr "Ungültiger Branchname: '%s'" #: builtin/branch.c:707 msgid "Branch rename failed" -msgstr "Umbenennung des Zweiges fehlgeschlagen" +msgstr "Umbenennung des Branches fehlgeschlagen" #: builtin/branch.c:711 #, c-format msgid "Renamed a misnamed branch '%s' away" -msgstr "falsch benannten Zweig '%s' umbenannt" +msgstr "falsch benannten Branch '%s' umbenannt" #: builtin/branch.c:715 #, c-format msgid "Branch renamed to %s, but HEAD is not updated!" -msgstr "Zweig umbenannt zu %s, aber Zweigspitze (HEAD) ist nicht aktualisiert!" +msgstr "Branch umbenannt zu %s, aber HEAD ist nicht aktualisiert!" #: builtin/branch.c:722 msgid "Branch is renamed, but update of config-file failed" msgstr "" -"Zweig ist umbenannt, aber die Aktualisierung der Konfigurationsdatei ist " +"Branch ist umbenannt, aber die Aktualisierung der Konfigurationsdatei ist " "fehlgeschlagen." #: builtin/branch.c:737 @@ -2740,7 +2811,7 @@ msgstr "Missgebildeter Objektname %s" #: builtin/branch.c:761 #, c-format msgid "could not write branch description template: %s" -msgstr "Konnte Beschreibungsvorlage für Zweig nicht schreiben: %s" +msgstr "Konnte Beschreibungsvorlage für Branch nicht schreiben: %s" #: builtin/branch.c:791 msgid "Generic options" @@ -2748,7 +2819,7 @@ msgstr "Allgemeine Optionen" #: builtin/branch.c:793 msgid "show hash and subject, give twice for upstream branch" -msgstr "Zeigt Hash und Betreff; -vv: zusätzlich externen Ãœbernahmezweig" +msgstr "Zeigt Hash und Betreff; -vv: zusätzlich Upstream-Branch" #: builtin/branch.c:794 msgid "suppress informational messages" @@ -2760,7 +2831,7 @@ msgstr "stellt den Ãœbernahmemodus ein (siehe git-pull(1))" #: builtin/branch.c:797 msgid "change upstream info" -msgstr "ändert Informationen zum externen Ãœbernahmezweig" +msgstr "ändert Informationen zum Upstream-Branch" #: builtin/branch.c:801 msgid "use colored output" @@ -2768,17 +2839,17 @@ msgstr "verwendet farbliche Ausgaben" #: builtin/branch.c:802 msgid "act on remote-tracking branches" -msgstr "wirkt auf externe Ãœbernahmezweige" +msgstr "wirkt auf Remote-Tracking-Branches" #: builtin/branch.c:805 builtin/branch.c:811 builtin/branch.c:832 -#: builtin/branch.c:838 builtin/commit.c:1368 builtin/commit.c:1369 -#: builtin/commit.c:1370 builtin/commit.c:1371 builtin/tag.c:468 +#: builtin/branch.c:838 builtin/commit.c:1433 builtin/commit.c:1434 +#: builtin/commit.c:1435 builtin/commit.c:1436 builtin/tag.c:468 msgid "commit" -msgstr "Version" +msgstr "Commit" #: builtin/branch.c:806 builtin/branch.c:812 msgid "print only branches that contain the commit" -msgstr "gibt nur Zweige aus, welche diese Version beinhalten" +msgstr "gibt nur Branches aus, welche diesen Commit beinhalten" #: builtin/branch.c:818 msgid "Specific git-branch actions:" @@ -2786,60 +2857,60 @@ msgstr "spezifische Aktionen für \"git-branch\":" #: builtin/branch.c:819 msgid "list both remote-tracking and local branches" -msgstr "listet externe Ãœbernahmezweige und lokale Zweige auf" +msgstr "listet Remote-Tracking und lokale Branches auf" #: builtin/branch.c:821 msgid "delete fully merged branch" -msgstr "entfernt vollständig zusammengeführten Zweig" +msgstr "entfernt vollständig zusammengeführten Branch" #: builtin/branch.c:822 msgid "delete branch (even if not merged)" -msgstr "löscht Zweig (auch wenn nicht zusammengeführt)" +msgstr "löscht Branch (auch wenn nicht zusammengeführt)" #: builtin/branch.c:823 msgid "move/rename a branch and its reflog" -msgstr "verschiebt/benennt einen Zweig und dessen Referenzprotokoll um" +msgstr "verschiebt/benennt einen Branch und dessen Reflog um" #: builtin/branch.c:824 msgid "move/rename a branch, even if target exists" msgstr "" -"verschiebt/benennt einen Zweig um, auch wenn das Ziel bereits existiert" +"verschiebt/benennt einen Branch um, auch wenn das Ziel bereits existiert" #: builtin/branch.c:825 msgid "list branch names" -msgstr "listet Zweignamen auf" +msgstr "listet Branchnamen auf" #: builtin/branch.c:826 msgid "create the branch's reflog" -msgstr "erzeugt das Referenzprotokoll des Zweiges" +msgstr "erzeugt das Reflog des Branches" #: builtin/branch.c:828 msgid "edit the description for the branch" -msgstr "bearbeitet die Beschreibung für den Zweig" +msgstr "bearbeitet die Beschreibung für den Branch" #: builtin/branch.c:829 msgid "force creation (when already exists)" -msgstr "erzeuge auch, wenn der Zweig bereits existiert" +msgstr "erzeuge auch, wenn der Branch bereits existiert" #: builtin/branch.c:832 msgid "print only not merged branches" -msgstr "gibt nur Zweige aus, die nicht zusammengeführt sind" +msgstr "gibt nur Branches aus, die nicht zusammengeführt sind" #: builtin/branch.c:838 msgid "print only merged branches" -msgstr "gibt nur Zweige aus, die zusammengeführt sind" +msgstr "gibt nur Branches aus, die zusammengeführt sind" #: builtin/branch.c:842 msgid "list branches in columns" -msgstr "listet Zweige in Spalten auf" +msgstr "listet Branches in Spalten auf" #: builtin/branch.c:855 msgid "Failed to resolve HEAD as a valid ref." -msgstr "Konnte Zweigspitze (HEAD) nicht als gültige Referenz auflösen." +msgstr "Konnte HEAD nicht als gültige Referenz auflösen." -#: builtin/branch.c:860 builtin/clone.c:619 +#: builtin/branch.c:860 builtin/clone.c:630 msgid "HEAD not found below refs/heads!" -msgstr "Zweigspitze (HEAD) wurde nicht unter \"refs/heads\" gefunden!" +msgstr "HEAD wurde nicht unter \"refs/heads\" gefunden!" #: builtin/branch.c:883 msgid "--column and --verbose are incompatible" @@ -2847,68 +2918,67 @@ msgstr "Die Optionen --column und --verbose sind inkompatibel." #: builtin/branch.c:889 builtin/branch.c:928 msgid "branch name required" -msgstr "Zweigname erforderlich" +msgstr "Branchname erforderlich" #: builtin/branch.c:904 msgid "Cannot give description to detached HEAD" -msgstr "" -"zu losgelöster Zweigspitze (HEAD) kann keine Beschreibung hinterlegt werden" +msgstr "zu losgelöstem HEAD kann keine Beschreibung hinterlegt werden" #: builtin/branch.c:909 msgid "cannot edit description of more than one branch" -msgstr "Beschreibung von mehr als einem Zweig kann nicht bearbeitet werden" +msgstr "Beschreibung von mehr als einem Branch kann nicht bearbeitet werden" #: builtin/branch.c:916 #, c-format msgid "No commit on branch '%s' yet." -msgstr "Noch keine Version in Zweig '%s'." +msgstr "Noch kein Commit in Branch '%s'." #: builtin/branch.c:919 #, c-format msgid "No branch named '%s'." -msgstr "Zweig '%s' nicht vorhanden." +msgstr "Branch '%s' nicht vorhanden." #: builtin/branch.c:934 msgid "too many branches for a rename operation" -msgstr "zu viele Zweige für eine Umbenennen-Operation angegeben" +msgstr "zu viele Branches für eine Umbenennen-Operation angegeben" #: builtin/branch.c:939 msgid "too many branches to set new upstream" -msgstr "zu viele Zweige angegeben um neuen Ãœbernahmezweig zu setzen" +msgstr "zu viele Branches angegeben um Upstream-Branch zu setzen" #: builtin/branch.c:943 #, c-format msgid "" "could not set upstream of HEAD to %s when it does not point to any branch." msgstr "" -"Konnte keinen neuen Ãœbernahmezweig von Zweigspitze (HEAD) zu %s setzen,\n" -"da diese auf keinen Zweig zeigt." +"Konnte keinen neuen Upstream-Branch von HEAD zu %s setzen, da dieser auf\n" +"keinen Branch zeigt." #: builtin/branch.c:946 builtin/branch.c:968 builtin/branch.c:990 #, c-format msgid "no such branch '%s'" -msgstr "Kein solcher Zweig '%s'" +msgstr "Kein solcher Branch '%s'" #: builtin/branch.c:950 #, c-format msgid "branch '%s' does not exist" -msgstr "Zweig '%s' existiert nicht" +msgstr "Branch '%s' existiert nicht" #: builtin/branch.c:962 msgid "too many branches to unset upstream" msgstr "" -"zu viele Zweige angegeben um Konfiguration zu Ãœbernahmezweig zu entfernen" +"zu viele Branches angegeben um Konfiguration zu Upstream-Branch zu entfernen" #: builtin/branch.c:966 msgid "could not unset upstream of HEAD when it does not point to any branch." msgstr "" -"Konnte Konfiguration zum Ãœbernahmezweig von Zweigspitze (HEAD) nicht\n" -"entfernen, da diese auf keinen Zweig zeigt." +"Konnte Konfiguration zu Upstream-Branch von HEAD nicht entfernen, da dieser\n" +"auf keinen Branch zeigt." #: builtin/branch.c:972 #, c-format msgid "Branch '%s' has no upstream information" -msgstr "Zweig '%s' hat keinen externen Ãœbernahmezweig gesetzt" +msgstr "Branch '%s' hat keinen Upstream-Branch gesetzt" #: builtin/branch.c:987 msgid "it does not make sense to create 'HEAD' manually" @@ -2918,7 +2988,7 @@ msgstr "'HEAD' darf nicht manuell erstellt werden" msgid "-a and -r options to 'git branch' do not make sense with a branch name" msgstr "" "Die Optionen -a und -r bei 'git branch' können nicht gemeimsam mit einem " -"Zweignamen verwendet werden." +"Branchnamen verwendet werden." #: builtin/branch.c:996 #, c-format @@ -2937,8 +3007,8 @@ msgid "" "\n" msgstr "" "\n" -"Wenn Sie wollten, dass '%s' den Zweig '%s' als externen Ãœbernahmezweig hat, " -"führen Sie aus:\n" +"Wenn Sie wollten, dass '%s' den Branch '%s' als Upstream-Branch hat, führen " +"Sie aus:\n" #: builtin/branch.c:1014 #, c-format @@ -2957,51 +3027,51 @@ msgstr "%s ist in Ordnung\n" #: builtin/bundle.c:56 msgid "Need a repository to create a bundle." -msgstr "Um ein Paket zu erstellen wird ein Projektarchiv benötigt." +msgstr "Um ein Paket zu erstellen wird ein Repository benötigt." #: builtin/bundle.c:60 msgid "Need a repository to unbundle." -msgstr "Zum Entpacken wird ein Projektarchiv benötigt." +msgstr "Zum Entpacken wird ein Repository benötigt." -#: builtin/cat-file.c:176 +#: builtin/cat-file.c:285 msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>" msgstr "git cat-file (-t|-s|-e|-p|<Art>|--textconv) <Objekt>" -#: builtin/cat-file.c:177 +#: builtin/cat-file.c:286 msgid "git cat-file (--batch|--batch-check) < <list_of_objects>" msgstr "git cat-file (--batch|--batch-check) < <Liste_von_Objekten>" -#: builtin/cat-file.c:195 +#: builtin/cat-file.c:323 msgid "<type> can be one of: blob, tree, commit, tag" msgstr "<Art> kann sein: blob, tree, commit, tag" -#: builtin/cat-file.c:196 +#: builtin/cat-file.c:324 msgid "show object type" msgstr "zeigt Objektart" -#: builtin/cat-file.c:197 +#: builtin/cat-file.c:325 msgid "show object size" msgstr "zeigt Objektgröße" -#: builtin/cat-file.c:199 +#: builtin/cat-file.c:327 msgid "exit with zero when there's no error" msgstr "beendet mit Rückgabewert 0, wenn kein Fehler aufgetreten ist" -#: builtin/cat-file.c:200 +#: builtin/cat-file.c:328 msgid "pretty-print object's content" msgstr "ansprechende Anzeige des Objektinhaltes" -#: builtin/cat-file.c:202 +#: builtin/cat-file.c:330 msgid "for blob objects, run textconv on object's content" msgstr "führt eine Textkonvertierung auf den Inhalt von Blob-Objekten aus" -#: builtin/cat-file.c:204 +#: builtin/cat-file.c:332 msgid "show info and content of objects fed from the standard input" msgstr "" "Anzeige von Informationen und Inhalt von Objekten, gelesen von der Standard-" "Eingabe" -#: builtin/cat-file.c:207 +#: builtin/cat-file.c:335 msgid "show info about objects fed from the standard input" msgstr "" "Anzeige von Informationen über Objekte, gelesen von der Standard-Eingabe" @@ -3021,7 +3091,7 @@ msgstr "gibt alle Attribute einer Datei aus" #: builtin/check-attr.c:20 msgid "use .gitattributes only from the index" -msgstr "verwendet .gitattributes nur von der Bereitstellung" +msgstr "verwendet .gitattributes nur von der Staging-Area" #: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:75 msgid "read file names from stdin" @@ -3031,38 +3101,63 @@ msgstr "liest Dateinamen von der Standard-Eingabe" msgid "input paths are terminated by a null character" msgstr "Eingabepfade sind durch ein NUL Zeichen abgeschlossen" -#: builtin/check-ignore.c:18 builtin/checkout.c:1044 builtin/gc.c:177 +#: builtin/check-ignore.c:18 builtin/checkout.c:1054 builtin/gc.c:177 msgid "suppress progress reporting" msgstr "unterdrückt Fortschrittsanzeige" -#: builtin/check-ignore.c:146 +#: builtin/check-ignore.c:26 +msgid "show non-matching input paths" +msgstr "zeigt Eingabe-Pfade ohne Ãœbereinstimmungen" + +#: builtin/check-ignore.c:143 msgid "cannot specify pathnames with --stdin" msgstr "Angabe von Pfadnamen kann nicht gemeinsam mit --stdin verwendet werden" -#: builtin/check-ignore.c:149 +#: builtin/check-ignore.c:146 msgid "-z only makes sense with --stdin" msgstr "Die Option -z kann nur mit --stdin verwendet werden." -#: builtin/check-ignore.c:151 +#: builtin/check-ignore.c:148 msgid "no path specified" msgstr "kein Pfad angegeben" -#: builtin/check-ignore.c:155 +#: builtin/check-ignore.c:152 msgid "--quiet is only valid with a single pathname" msgstr "Die Option --quiet ist nur mit einem einzelnen Pfadnamen gültig." -#: builtin/check-ignore.c:157 +#: builtin/check-ignore.c:154 msgid "cannot have both --quiet and --verbose" msgstr "" "Die Optionen --quiet und --verbose können nicht gemeinsam verwendet werden." +#: builtin/check-ignore.c:157 +msgid "--non-matching is only valid with --verbose" +msgstr "--non-matching ist nur mit --verbose zulässig" + +#: builtin/check-mailmap.c:8 +msgid "git check-mailmap [options] <contact>..." +msgstr "git check-mailmap [Optionen] <Kontakt>..." + +#: builtin/check-mailmap.c:13 +msgid "also read contacts from stdin" +msgstr "liest ebenfalls Kontakte von der Standard-Eingabe" + +#: builtin/check-mailmap.c:24 +#, c-format +msgid "unable to parse contact: %s" +msgstr "Konnte Kontakt '%s' nicht parsen." + +#: builtin/check-mailmap.c:47 +msgid "no contacts specified" +msgstr "keine Kontakte angegeben" + #: builtin/checkout-index.c:126 msgid "git checkout-index [options] [--] [<file>...]" msgstr "git checkout-index [Optionen] [--] [<Datei>...]" #: builtin/checkout-index.c:187 msgid "check out all files in the index" -msgstr "checkt alle Dateien in der Bereitstellung aus" +msgstr "checkt alle Dateien in der Staging-Area aus" #: builtin/checkout-index.c:188 msgid "force overwrite of existing files" @@ -3072,7 +3167,7 @@ msgstr "erzwingt das Ãœberschreiben bereits existierender Dateien" msgid "no warning for existing files and files not in index" msgstr "" "keine Warnung für existierende Dateien, und Dateien, die sich nicht in der " -"Bereitstellung befinden" +"Staging-Area befinden" #: builtin/checkout-index.c:192 msgid "don't checkout new files" @@ -3080,7 +3175,7 @@ msgstr "checkt keine neuen Dateien aus" #: builtin/checkout-index.c:194 msgid "update stat information in the index file" -msgstr "aktualisiert Dateiinformationen in der Bereitstellungsdatei" +msgstr "aktualisiert Dateiinformationen in der Staging-Area-Datei" #: builtin/checkout-index.c:200 msgid "read list of paths from the standard input" @@ -3105,11 +3200,11 @@ msgstr "kopiert Dateien von dem benannten Stand" #: builtin/checkout.c:25 msgid "git checkout [options] <branch>" -msgstr "git checkout [Optionen] <Zweig>" +msgstr "git checkout [Optionen] <Branch>" #: builtin/checkout.c:26 msgid "git checkout [options] [<branch>] -- <file>..." -msgstr "git checkout [Optionen] [Zweig>] -- <Datei>..." +msgstr "git checkout [Optionen] [<Branch>] -- <Datei>..." #: builtin/checkout.c:117 builtin/checkout.c:150 #, c-format @@ -3139,7 +3234,7 @@ msgstr "Pfad '%s': kann nicht zusammenführen" #: builtin/checkout.c:213 #, c-format msgid "Unable to add merge result for '%s'" -msgstr "Konnte Ergebnis der Zusammenführung von '%s' nicht hinzufügen." +msgstr "Konnte Merge-Ergebnis von '%s' nicht hinzufügen." #: builtin/checkout.c:237 builtin/checkout.c:240 builtin/checkout.c:243 #: builtin/checkout.c:246 @@ -3155,11 +3250,12 @@ msgstr "'%s' kann nicht mit '%s' verwendet werden" #: builtin/checkout.c:255 #, c-format msgid "Cannot update paths and switch to branch '%s' at the same time." -msgstr "Kann nicht gleichzeitig Pfade aktualisieren und zu Zweig '%s' wechseln" +msgstr "" +"Kann nicht gleichzeitig Pfade aktualisieren und zu Branch '%s' wechseln" #: builtin/checkout.c:266 builtin/checkout.c:458 msgid "corrupt index file" -msgstr "beschädigte Bereitstellungsdatei" +msgstr "beschädigte Staging-Area-Datei" #: builtin/checkout.c:329 builtin/checkout.c:336 #, c-format @@ -3168,49 +3264,49 @@ msgstr "Pfad '%s' ist nicht zusammengeführt." #: builtin/checkout.c:480 msgid "you need to resolve your current index first" -msgstr "Sie müssen zuerst Ihre aktuelle Bereitstellung auflösen." +msgstr "Sie müssen zuerst Ihre aktuelle Staging-Area auflösen." #: builtin/checkout.c:601 #, c-format msgid "Can not do reflog for '%s'\n" msgstr "Konnte \"reflog\" für '%s' nicht durchführen\n" -#: builtin/checkout.c:634 +#: builtin/checkout.c:639 msgid "HEAD is now at" -msgstr "Zweigspitze (HEAD) ist jetzt bei" +msgstr "HEAD ist jetzt bei" -#: builtin/checkout.c:641 +#: builtin/checkout.c:646 #, c-format msgid "Reset branch '%s'\n" -msgstr "Setze Zweig '%s' neu\n" +msgstr "Setze Branch '%s' neu\n" -#: builtin/checkout.c:644 +#: builtin/checkout.c:649 #, c-format msgid "Already on '%s'\n" msgstr "Bereits auf '%s'\n" -#: builtin/checkout.c:648 +#: builtin/checkout.c:653 #, c-format msgid "Switched to and reset branch '%s'\n" -msgstr "Gewechselt zu neu gesetztem Zweig '%s'\n" +msgstr "Gewechselt zu umgesetzten Branch '%s'\n" -#: builtin/checkout.c:650 builtin/checkout.c:987 +#: builtin/checkout.c:655 builtin/checkout.c:997 #, c-format msgid "Switched to a new branch '%s'\n" -msgstr "Gewechselt zu einem neuen Zweig '%s'\n" +msgstr "Gewechselt zu einem neuem Branch '%s'\n" -#: builtin/checkout.c:652 +#: builtin/checkout.c:657 #, c-format msgid "Switched to branch '%s'\n" -msgstr "Gewechselt zu Zweig '%s'\n" +msgstr "Gewechselt zu Branch '%s'\n" -#: builtin/checkout.c:708 +#: builtin/checkout.c:713 #, c-format msgid " ... and %d more.\n" msgstr " ... und %d weitere.\n" #. The singular version -#: builtin/checkout.c:714 +#: builtin/checkout.c:719 #, c-format msgid "" "Warning: you are leaving %d commit behind, not connected to\n" @@ -3223,17 +3319,17 @@ msgid_plural "" "\n" "%s\n" msgstr[0] "" -"Warnung: Sie sind um %d Version hinterher, nicht verbunden zu\n" -"einem Ihrer Zweige:\n" +"Warnung: Sie sind um %d Commit hinterher, nicht verbunden zu\n" +"einem Ihrer Branches:\n" "\n" "%s\n" msgstr[1] "" -"Warnung: Sie sind um %d Versionen hinterher, nicht verbunden zu\n" -"einem Ihrer Zweige:\n" +"Warnung: Sie sind um %d Commits hinterher, nicht verbunden zu\n" +"einem Ihrer Branches:\n" "\n" "%s\n" -#: builtin/checkout.c:732 +#: builtin/checkout.c:737 #, c-format msgid "" "If you want to keep them by creating a new branch, this may be a good time\n" @@ -3242,376 +3338,478 @@ msgid "" " git branch new_branch_name %s\n" "\n" msgstr "" -"Wenn Sie diese durch einen neuen Zweig behalten möchten, dann könnte jetzt\n" +"Wenn Sie diese durch einen neuen Branch behalten möchten, dann könnte jetzt\n" "ein guter Zeitpunkt sein dies zu tun mit:\n" "\n" -" git branch neuer_zweig_name %s\n" +" git branch neuer_branch_name %s\n" "\n" -#: builtin/checkout.c:762 +#: builtin/checkout.c:767 msgid "internal error in revision walk" msgstr "interner Fehler im Revisionsgang" -#: builtin/checkout.c:766 +#: builtin/checkout.c:771 msgid "Previous HEAD position was" -msgstr "Vorherige Position der Zweigspitze (HEAD) war" +msgstr "Vorherige Position von HEAD war" -#: builtin/checkout.c:793 builtin/checkout.c:982 +#: builtin/checkout.c:798 builtin/checkout.c:992 msgid "You are on a branch yet to be born" -msgstr "Sie sind auf einem Zweig, der noch geboren wird" +msgstr "Sie sind auf einem Branch, der noch geboren wird" #. case (1) -#: builtin/checkout.c:918 +#: builtin/checkout.c:928 #, c-format msgid "invalid reference: %s" msgstr "Ungültige Referenz: %s" #. case (1): want a tree -#: builtin/checkout.c:957 +#: builtin/checkout.c:967 #, c-format msgid "reference is not a tree: %s" -msgstr "Referenz ist kein Baum: %s" +msgstr "Referenz ist kein \"Tree\"-Objekt: %s" -#: builtin/checkout.c:996 +#: builtin/checkout.c:1006 msgid "paths cannot be used with switching branches" -msgstr "Pfade können nicht beim Wechseln von Zweigen verwendet werden" +msgstr "Pfade können nicht beim Wechseln von Branches verwendet werden" -#: builtin/checkout.c:999 builtin/checkout.c:1003 +#: builtin/checkout.c:1009 builtin/checkout.c:1013 #, c-format msgid "'%s' cannot be used with switching branches" -msgstr "'%s' kann nicht beim Wechseln von Zweigen verwendet werden" +msgstr "'%s' kann nicht beim Wechseln von Branches verwendet werden" -#: builtin/checkout.c:1007 builtin/checkout.c:1010 builtin/checkout.c:1015 -#: builtin/checkout.c:1018 +#: builtin/checkout.c:1017 builtin/checkout.c:1020 builtin/checkout.c:1025 +#: builtin/checkout.c:1028 #, c-format msgid "'%s' cannot be used with '%s'" msgstr "'%s' kann nicht mit '%s' verwendet werden" -#: builtin/checkout.c:1023 +#: builtin/checkout.c:1033 #, c-format msgid "Cannot switch branch to a non-commit '%s'" -msgstr "Kann Zweig nicht zu Nicht-Version '%s' wechseln" +msgstr "Kann Branch nicht zu Nicht-Commit '%s' wechseln" -#: builtin/checkout.c:1045 builtin/checkout.c:1047 builtin/clone.c:90 +#: builtin/checkout.c:1055 builtin/checkout.c:1057 builtin/clone.c:89 #: builtin/remote.c:169 builtin/remote.c:171 msgid "branch" -msgstr "Zweig" +msgstr "Branch" -#: builtin/checkout.c:1046 +#: builtin/checkout.c:1056 msgid "create and checkout a new branch" -msgstr "erzeugt und checkt einen neuen Zweig aus" +msgstr "erzeugt und checkt einen neuen Branch aus" -#: builtin/checkout.c:1048 +#: builtin/checkout.c:1058 msgid "create/reset and checkout a branch" -msgstr "erzeugt/setzt neu und checkt einen Zweig aus" +msgstr "erzeugt/setzt um und checkt einen Branch aus" -#: builtin/checkout.c:1049 +#: builtin/checkout.c:1059 msgid "create reflog for new branch" -msgstr "erzeugt Referenzprotokoll für den neuen Zweig" +msgstr "erzeugt das Reflog für den neuen Branch" -#: builtin/checkout.c:1050 +#: builtin/checkout.c:1060 msgid "detach the HEAD at named commit" -msgstr "setzt die Zweigspitze (HEAD) zu benannter Version" +msgstr "setzt HEAD zu benanntem Commit" -#: builtin/checkout.c:1051 +#: builtin/checkout.c:1061 msgid "set upstream info for new branch" -msgstr "setzt Informationen zum externen Ãœbernahmezweig für den neuen Zweig" +msgstr "setzt Informationen zum Upstream-Branch für den neuen Branch" -#: builtin/checkout.c:1053 +#: builtin/checkout.c:1063 msgid "new branch" -msgstr "neuer Zweig" +msgstr "neuer Branch" -#: builtin/checkout.c:1053 +#: builtin/checkout.c:1063 msgid "new unparented branch" -msgstr "neuer Zweig ohne Elternversion" +msgstr "neuer Branch ohne Eltern-Commit" -#: builtin/checkout.c:1054 +#: builtin/checkout.c:1064 msgid "checkout our version for unmerged files" msgstr "checkt unsere Variante für nicht zusammengeführte Dateien aus" -#: builtin/checkout.c:1056 +#: builtin/checkout.c:1066 msgid "checkout their version for unmerged files" msgstr "checkt ihre Variante für nicht zusammengeführte Dateien aus" -#: builtin/checkout.c:1058 +#: builtin/checkout.c:1068 msgid "force checkout (throw away local modifications)" msgstr "erzwingt Auschecken (verwirft lokale Änderungen)" -#: builtin/checkout.c:1059 +#: builtin/checkout.c:1069 msgid "perform a 3-way merge with the new branch" -msgstr "führt eine 3-Wege-Zusammenführung mit dem neuen Zweig aus" +msgstr "führt einen 3-Wege-Merge mit dem neuen Branch aus" -#: builtin/checkout.c:1060 builtin/merge.c:217 +#: builtin/checkout.c:1070 builtin/merge.c:232 msgid "update ignored files (default)" msgstr "aktualisiert ignorierte Dateien (Standard)" -#: builtin/checkout.c:1061 builtin/log.c:1158 parse-options.h:245 +#: builtin/checkout.c:1071 builtin/log.c:1208 parse-options.h:249 msgid "style" msgstr "Stil" -#: builtin/checkout.c:1062 +#: builtin/checkout.c:1072 msgid "conflict style (merge or diff3)" msgstr "Konfliktstil (merge oder diff3)" -#: builtin/checkout.c:1065 +#: builtin/checkout.c:1075 msgid "do not limit pathspecs to sparse entries only" msgstr "Pfadspezifikationen ignorieren Einstellungen zum partiellen Auschecken" -#: builtin/checkout.c:1067 +#: builtin/checkout.c:1077 msgid "second guess 'git checkout no-such-branch'" msgstr "second guess 'git checkout no-such-branch'" -#: builtin/checkout.c:1091 +#: builtin/checkout.c:1101 msgid "-b, -B and --orphan are mutually exclusive" msgstr "Die Optionen -b, -B und --orphan schließen sich gegenseitig aus." -#: builtin/checkout.c:1108 +#: builtin/checkout.c:1118 msgid "--track needs a branch name" -msgstr "Bei der Option --track muss ein Zweigname angegeben werden." +msgstr "Bei der Option --track muss ein Branchname angegeben werden." -#: builtin/checkout.c:1115 +#: builtin/checkout.c:1125 msgid "Missing branch name; try -b" -msgstr "Vermisse Zweignamen; versuchen Sie -b" +msgstr "Vermisse Branchnamen; versuchen Sie -b" -#: builtin/checkout.c:1150 +#: builtin/checkout.c:1160 msgid "invalid path specification" msgstr "ungültige Pfadspezifikation" -#: builtin/checkout.c:1157 +#: builtin/checkout.c:1167 #, c-format msgid "" "Cannot update paths and switch to branch '%s' at the same time.\n" "Did you intend to checkout '%s' which can not be resolved as commit?" msgstr "" -"Kann nicht gleichzeitig Pfade aktualisieren und zu Zweig '%s' wechseln.\n" -"Haben Sie beabsichtigt '%s' auszuchecken, welcher nicht als Version " -"aufgelöst werden kann?" +"Kann nicht gleichzeitig Pfade aktualisieren und zu Branch '%s' wechseln.\n" +"Haben Sie beabsichtigt '%s' auszuchecken, welcher nicht als Commit aufgelöst " +"werden kann?" -#: builtin/checkout.c:1162 +#: builtin/checkout.c:1172 #, c-format msgid "git checkout: --detach does not take a path argument '%s'" msgstr "git checkout: --detach nimmt kein Pfad-Argument '%s'" -#: builtin/checkout.c:1166 +#: builtin/checkout.c:1176 msgid "" "git checkout: --ours/--theirs, --force and --merge are incompatible when\n" "checking out of the index." msgstr "" "git checkout: --ours/--theirs, --force und --merge sind inkompatibel wenn\n" -"Sie aus der Bereitstellung auschecken." +"Sie aus der Staging-Area auschecken." -#: builtin/clean.c:20 -msgid "git clean [-d] [-f] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." -msgstr "git clean [-d] [-f] [-n] [-q] [-e <Muster>] [-x | -X] [--] <Pfade>..." +#: builtin/clean.c:25 +msgid "" +"git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." +msgstr "" +"git clean [-d] [-f] [-i] [-n] [-q] [-e <Muster>] [-x | -X] [--] <Pfade>..." -#: builtin/clean.c:24 +#: builtin/clean.c:29 #, c-format msgid "Removing %s\n" msgstr "Lösche %s\n" -#: builtin/clean.c:25 +#: builtin/clean.c:30 #, c-format msgid "Would remove %s\n" msgstr "Würde %s löschen\n" -#: builtin/clean.c:26 +#: builtin/clean.c:31 #, c-format msgid "Skipping repository %s\n" -msgstr "Ãœberspringe Projektarchiv %s\n" +msgstr "Ãœberspringe Repository %s\n" -#: builtin/clean.c:27 +#: builtin/clean.c:32 #, c-format msgid "Would skip repository %s\n" -msgstr "Würde Projektarchiv %s überspringen\n" +msgstr "Würde Repository %s überspringen\n" -#: builtin/clean.c:28 +#: builtin/clean.c:33 #, c-format msgid "failed to remove %s" msgstr "Fehler beim Löschen von %s" -#: builtin/clean.c:160 +#: builtin/clean.c:293 +msgid "" +"Prompt help:\n" +"1 - select a numbered item\n" +"foo - select item based on unique prefix\n" +" - (empty) select nothing" +msgstr "" +"Eingabehilfe:\n" +"1 - nummeriertes Element auswählen\n" +"foo - Element anhand eines eindeutigen Prefix auswählen\n" +" - (leer) nichts auswählen" + +#: builtin/clean.c:297 +msgid "" +"Prompt help:\n" +"1 - select a single item\n" +"3-5 - select a range of items\n" +"2-3,6-9 - select multiple ranges\n" +"foo - select item based on unique prefix\n" +"-... - unselect specified items\n" +"* - choose all items\n" +" - (empty) finish selecting" +msgstr "" +"Eingabehilfe:\n" +"1 - einzelnes Element auswählen\n" +"3-5 - Bereich von Elementen auswählen\n" +"2-3,6-9 - mehrere Bereiche auswählen\n" +"foo - Element anhand eines eindeutigen Prefix auswählen\n" +"-... - angegebenes Element abwählen\n" +"* - alle Elemente auswählen\n" +" - (leer) Auswahl beenden" + +#: builtin/clean.c:515 +#, c-format +msgid "Huh (%s)?" +msgstr "Wie bitte (%s)?" + +#: builtin/clean.c:658 +#, c-format +msgid "Input ignore patterns>> " +msgstr "Ignorier-Muster eingeben>> " + +#: builtin/clean.c:695 +#, c-format +msgid "WARNING: Cannot find items matched by: %s" +msgstr "WARNUNG: Kann keine Einträge finden die Muster entsprechen: %s" + +#: builtin/clean.c:716 +msgid "Select items to delete" +msgstr "Wählen Sie Einträge zum Löschen" + +#: builtin/clean.c:756 +#, c-format +msgid "remove %s? " +msgstr "'%s' löschen? " + +#: builtin/clean.c:781 +msgid "Bye." +msgstr "Tschüss." + +#: builtin/clean.c:789 +msgid "" +"clean - start cleaning\n" +"filter by pattern - exclude items from deletion\n" +"select by numbers - select items to be deleted by numbers\n" +"ask each - confirm each deletion (like \"rm -i\")\n" +"quit - stop cleaning\n" +"help - this screen\n" +"? - help for prompt selection" +msgstr "" +"clean - Clean starten\n" +"filter by pattern - Einträge von Löschung ausschließen\n" +"select by numbers - Auswahl von Einträgen über Nummern\n" +"ask each - jede Löschung bestätigen (wie \"rm -i\")\n" +"quit - Clean beenden\n" +"help - diese Meldung anzeigen\n" +"? - Hilfe zur Auswahl mittels Eingabe anzeigen" + +#: builtin/clean.c:816 +msgid "*** Commands ***" +msgstr "*** Kommandos ***" + +#: builtin/clean.c:817 +msgid "What now" +msgstr "Was nun" + +#: builtin/clean.c:825 +msgid "Would remove the following item:" +msgid_plural "Would remove the following items:" +msgstr[0] "Würde das folgende Element entfernen:" +msgstr[1] "Würde die folgenden Elemente entfernen:" + +#: builtin/clean.c:842 +msgid "No more files to clean, exiting." +msgstr "Keine Dateien mehr zum Löschen, beende." + +#: builtin/clean.c:874 msgid "do not print names of files removed" msgstr "gibt keine Namen von gelöschten Dateien aus" -#: builtin/clean.c:162 +#: builtin/clean.c:876 msgid "force" msgstr "erzwingt Aktion" -#: builtin/clean.c:164 +#: builtin/clean.c:877 +msgid "interactive cleaning" +msgstr "interaktives Clean" + +#: builtin/clean.c:879 msgid "remove whole directories" msgstr "löscht ganze Verzeichnisse" -#: builtin/clean.c:165 builtin/describe.c:412 builtin/grep.c:717 -#: builtin/ls-files.c:487 builtin/name-rev.c:231 builtin/show-ref.c:182 +#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:716 +#: builtin/ls-files.c:493 builtin/name-rev.c:315 builtin/show-ref.c:186 msgid "pattern" msgstr "Muster" -#: builtin/clean.c:166 +#: builtin/clean.c:881 msgid "add <pattern> to ignore rules" msgstr "fügt <Muster> zu den Regeln für ignorierte Pfade hinzu" -#: builtin/clean.c:167 +#: builtin/clean.c:882 msgid "remove ignored files, too" msgstr "löscht auch ignorierte Dateien" -#: builtin/clean.c:169 +#: builtin/clean.c:884 msgid "remove only ignored files" msgstr "löscht nur ignorierte Dateien" -#: builtin/clean.c:187 +#: builtin/clean.c:902 msgid "-x and -X cannot be used together" msgstr "Die Optionen -x und -X können nicht gemeinsam verwendet werden." -#: builtin/clean.c:191 +#: builtin/clean.c:906 msgid "" -"clean.requireForce set to true and neither -n nor -f given; refusing to clean" +"clean.requireForce set to true and neither -i, -n nor -f given; refusing to " +"clean" msgstr "" -"clean.requireForce auf \"true\" gesetzt und weder -n noch -f gegeben; " -"Säuberung verweigert" +"clean.requireForce auf \"true\" gesetzt und weder -i, -n noch -f gegeben; " +"\"clean\" verweigert" -#: builtin/clean.c:194 +#: builtin/clean.c:909 msgid "" -"clean.requireForce defaults to true and neither -n nor -f given; refusing to " -"clean" +"clean.requireForce defaults to true and neither -i, -n nor -f given; " +"refusing to clean" msgstr "" -"clean.requireForce standardmäßig auf \"true\" gesetzt und weder -n noch -f " -"gegeben; Säuberung verweigert" +"clean.requireForce standardmäßig auf \"true\" gesetzt und weder -i, -n noch -" +"f gegeben; \"clean\" verweigert" -#: builtin/clone.c:37 +#: builtin/clone.c:36 msgid "git clone [options] [--] <repo> [<dir>]" -msgstr "git clone [Optionen] [--] <Projektarchiv> [<Verzeichnis>]" +msgstr "git clone [Optionen] [--] <Repository> [<Verzeichnis>]" -#: builtin/clone.c:65 builtin/fetch.c:82 builtin/merge.c:214 -#: builtin/push.c:436 +#: builtin/clone.c:64 builtin/fetch.c:82 builtin/merge.c:229 +#: builtin/push.c:462 msgid "force progress reporting" msgstr "erzwingt Fortschrittsanzeige" -#: builtin/clone.c:67 +#: builtin/clone.c:66 msgid "don't create a checkout" msgstr "kein Auschecken" -#: builtin/clone.c:68 builtin/clone.c:70 builtin/init-db.c:488 +#: builtin/clone.c:67 builtin/clone.c:69 builtin/init-db.c:488 msgid "create a bare repository" -msgstr "erstellt ein bloßes Projektarchiv" +msgstr "erstellt ein Bare-Repository" -#: builtin/clone.c:73 +#: builtin/clone.c:72 msgid "create a mirror repository (implies bare)" -msgstr "erstellt ein Spiegelarchiv (impliziert bloßes Projektarchiv)" +msgstr "erstellt ein Spiegelarchiv (impliziert --bare)" -#: builtin/clone.c:75 +#: builtin/clone.c:74 msgid "to clone from a local repository" -msgstr "um von einem lokalen Projektarchiv zu klonen" +msgstr "um von einem lokalen Repository zu klonen" -#: builtin/clone.c:77 +#: builtin/clone.c:76 msgid "don't use local hardlinks, always copy" -msgstr "verwendet lokal keine harten Links, immer Kopien" +msgstr "verwendet lokal keine harten Verweise, immer Kopien" -#: builtin/clone.c:79 +#: builtin/clone.c:78 msgid "setup as shared repository" -msgstr "Einrichtung als verteiltes Projektarchiv" +msgstr "Einrichtung als verteiltes Repository" -#: builtin/clone.c:81 builtin/clone.c:83 +#: builtin/clone.c:80 builtin/clone.c:82 msgid "initialize submodules in the clone" -msgstr "initialisiert Unterprojekte im Klon" +msgstr "initialisiert Submodule im Klon" -#: builtin/clone.c:84 builtin/init-db.c:485 +#: builtin/clone.c:83 builtin/init-db.c:485 msgid "template-directory" msgstr "Vorlagenverzeichnis" -#: builtin/clone.c:85 builtin/init-db.c:486 +#: builtin/clone.c:84 builtin/init-db.c:486 msgid "directory from which templates will be used" msgstr "Verzeichnis, von welchem die Vorlagen verwendet werden" -#: builtin/clone.c:87 +#: builtin/clone.c:86 msgid "reference repository" -msgstr "referenziert Projektarchiv" +msgstr "referenziert Repository" -#: builtin/clone.c:88 builtin/column.c:26 builtin/merge-file.c:44 +#: builtin/clone.c:87 builtin/column.c:26 builtin/merge-file.c:44 msgid "name" msgstr "Name" -#: builtin/clone.c:89 +#: builtin/clone.c:88 msgid "use <name> instead of 'origin' to track upstream" -msgstr "verwendet <Name> statt 'origin' für externes Projektarchiv" +msgstr "verwendet <Name> statt 'origin' für Upstream-Repository" -#: builtin/clone.c:91 +#: builtin/clone.c:90 msgid "checkout <branch> instead of the remote's HEAD" -msgstr "" -"checkt <Zweig> aus, anstatt Zweigspitze (HEAD) des externen Projektarchivs" +msgstr "checkt <Branch> aus, anstatt HEAD des Remote-Repositories" -#: builtin/clone.c:93 +#: builtin/clone.c:92 msgid "path to git-upload-pack on the remote" msgstr "Pfad zu \"git-upload-pack\" auf der Gegenseite" -#: builtin/clone.c:94 builtin/fetch.c:83 builtin/grep.c:662 +#: builtin/clone.c:93 builtin/fetch.c:83 builtin/grep.c:661 msgid "depth" msgstr "Tiefe" -#: builtin/clone.c:95 +#: builtin/clone.c:94 msgid "create a shallow clone of that depth" msgstr "erstellt einen flachen Klon mit dieser Tiefe" -#: builtin/clone.c:97 +#: builtin/clone.c:96 msgid "clone only one branch, HEAD or --branch" -msgstr "klont nur einen Zweig, Zweigspitze (HEAD) oder --branch" +msgstr "klont nur einen Branch, HEAD oder --branch" -#: builtin/clone.c:98 builtin/init-db.c:494 +#: builtin/clone.c:97 builtin/init-db.c:494 msgid "gitdir" msgstr ".git-Verzeichnis" -#: builtin/clone.c:99 builtin/init-db.c:495 +#: builtin/clone.c:98 builtin/init-db.c:495 msgid "separate git dir from working tree" -msgstr "separiert Git-Verzeichnis vom Arbeitsbaum" +msgstr "separiert Git-Verzeichnis vom Arbeitsverzeichnis" -#: builtin/clone.c:100 +#: builtin/clone.c:99 msgid "key=value" msgstr "Schlüssel=Wert" -#: builtin/clone.c:101 +#: builtin/clone.c:100 msgid "set config inside the new repository" -msgstr "setzt Konfiguration innerhalb des neuen Projektarchivs" +msgstr "setzt Konfiguration innerhalb des neuen Repositories" -#: builtin/clone.c:254 +#: builtin/clone.c:253 #, c-format msgid "reference repository '%s' is not a local repository." -msgstr "Referenziertes Projektarchiv '%s' ist kein lokales Projektarchiv." +msgstr "Referenziertes Repository '%s' ist kein lokales Repository." -#: builtin/clone.c:317 +#: builtin/clone.c:316 #, c-format msgid "failed to create directory '%s'" msgstr "Fehler beim Erstellen von Verzeichnis '%s'" -#: builtin/clone.c:319 builtin/diff.c:77 +#: builtin/clone.c:318 builtin/diff.c:77 #, c-format msgid "failed to stat '%s'" msgstr "Konnte '%s' nicht lesen" -#: builtin/clone.c:321 +#: builtin/clone.c:320 #, c-format msgid "%s exists and is not a directory" msgstr "%s existiert und ist kein Verzeichnis" -#: builtin/clone.c:335 +#: builtin/clone.c:334 #, c-format msgid "failed to stat %s\n" msgstr "Konnte %s nicht lesen\n" -#: builtin/clone.c:357 +#: builtin/clone.c:356 #, c-format msgid "failed to create link '%s'" -msgstr "Konnte Verknüpfung '%s' nicht erstellen" +msgstr "Konnte Verweis '%s' nicht erstellen" -#: builtin/clone.c:361 +#: builtin/clone.c:360 #, c-format msgid "failed to copy file to '%s'" msgstr "Konnte Datei nicht nach '%s' kopieren" -#: builtin/clone.c:384 +#: builtin/clone.c:383 #, c-format msgid "done.\n" msgstr "Fertig.\n" -#: builtin/clone.c:397 +#: builtin/clone.c:396 msgid "" "Clone succeeded, but checkout failed.\n" "You can inspect what was checked out with 'git status'\n" @@ -3621,96 +3819,110 @@ msgstr "" "Sie können mit 'git status' prüfen, was ausgecheckt worden ist\n" "und das Auschecken mit 'git checkout -f HEAD' erneut versuchen.\n" -#: builtin/clone.c:476 +#: builtin/clone.c:475 #, c-format msgid "Could not find remote branch %s to clone." -msgstr "Konnte zu klonenden externer Zweig %s nicht finden." +msgstr "Konnte zu klonenden Remote-Branch %s nicht finden." -#: builtin/clone.c:550 +#: builtin/clone.c:555 +#, c-format +msgid "Checking connectivity... " +msgstr "Prüfe Konnektivität... " + +#: builtin/clone.c:558 msgid "remote did not send all necessary objects" -msgstr "Fernarchiv hat nicht alle erforderlichen Objekte gesendet." +msgstr "Remote-Repository hat nicht alle erforderlichen Objekte gesendet." + +#: builtin/clone.c:560 +#, c-format +msgid "done\n" +msgstr "Fertig\n" -#: builtin/clone.c:610 +#: builtin/clone.c:621 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" msgstr "" -"Externe Zweigspitze (HEAD) bezieht sich auf eine nicht existierende Referenz " -"und kann nicht ausgecheckt werden.\n" +"Externer HEAD bezieht sich auf eine nicht existierende Referenz und kann " +"nicht ausgecheckt werden.\n" -#: builtin/clone.c:641 +#: builtin/clone.c:652 msgid "unable to checkout working tree" -msgstr "Arbeitsbaum konnte nicht ausgecheckt werden" +msgstr "Arbeitsverzeichnis konnte nicht ausgecheckt werden" -#: builtin/clone.c:749 +#: builtin/clone.c:760 msgid "Too many arguments." msgstr "Zu viele Argumente." -#: builtin/clone.c:753 +#: builtin/clone.c:764 msgid "You must specify a repository to clone." -msgstr "Sie müssen ein Projektarchiv zum Klonen angeben." +msgstr "Sie müssen ein Repository zum Klonen angeben." -#: builtin/clone.c:764 +#: builtin/clone.c:775 #, c-format msgid "--bare and --origin %s options are incompatible." msgstr "Die Optionen --bare und --origin %s sind inkompatibel." -#: builtin/clone.c:767 +#: builtin/clone.c:778 msgid "--bare and --separate-git-dir are incompatible." msgstr "Die Optionen --bare und --separate-git-dir sind inkompatibel." -#: builtin/clone.c:780 +#: builtin/clone.c:791 #, c-format msgid "repository '%s' does not exist" -msgstr "Projektarchiv '%s' existiert nicht." +msgstr "Repository '%s' existiert nicht." -#: builtin/clone.c:785 +#: builtin/clone.c:796 msgid "--depth is ignored in local clones; use file:// instead." msgstr "" "Die Option --depth wird in lokalen Klonen ignoriert; benutzen Sie " "stattdessen file://" -#: builtin/clone.c:795 +#: builtin/clone.c:798 +msgid "--local is ignored" +msgstr "--local wird ignoriert" + +#: builtin/clone.c:808 #, c-format msgid "destination path '%s' already exists and is not an empty directory." msgstr "Zielpfad '%s' existiert bereits und ist kein leeres Verzeichnis." -#: builtin/clone.c:805 +#: builtin/clone.c:818 #, c-format msgid "working tree '%s' already exists." -msgstr "Arbeitsbaum '%s' existiert bereits." +msgstr "Arbeitsverzeichnis '%s' existiert bereits." -#: builtin/clone.c:818 builtin/clone.c:830 +#: builtin/clone.c:831 builtin/clone.c:843 #, c-format msgid "could not create leading directories of '%s'" msgstr "Konnte führende Verzeichnisse von '%s' nicht erstellen." -#: builtin/clone.c:821 +#: builtin/clone.c:834 #, c-format msgid "could not create work tree dir '%s'." msgstr "Konnte Arbeitsverzeichnis '%s' nicht erstellen." -#: builtin/clone.c:840 +#: builtin/clone.c:853 #, c-format msgid "Cloning into bare repository '%s'...\n" -msgstr "Klone in bloßes Projektarchiv '%s'...\n" +msgstr "Klone in Bare-Repository '%s'...\n" -#: builtin/clone.c:842 +#: builtin/clone.c:855 #, c-format msgid "Cloning into '%s'...\n" msgstr "Klone nach '%s'...\n" -#: builtin/clone.c:877 +#: builtin/clone.c:890 #, c-format msgid "Don't know how to clone %s" msgstr "Weiß nicht wie %s zu klonen ist." -#: builtin/clone.c:926 +#: builtin/clone.c:942 #, c-format msgid "Remote branch %s not found in upstream %s" -msgstr "externer Zweig %s nicht im anderen Projektarchiv %s gefunden" +msgstr "Remote-Branch %s nicht im Upstream-Repository %s gefunden" -#: builtin/clone.c:933 +#: builtin/clone.c:949 msgid "You appear to have cloned an empty repository." -msgstr "Sie scheinen ein leeres Projektarchiv geklont zu haben." +msgstr "Sie scheinen ein leeres Repository geklont zu haben." #: builtin/column.c:9 msgid "git column [options]" @@ -3744,15 +3956,15 @@ msgstr "Abstand zwischen Spalten" msgid "--command must be the first argument" msgstr "Die Option --command muss an erster Stelle stehen." -#: builtin/commit.c:34 +#: builtin/commit.c:35 msgid "git commit [options] [--] <pathspec>..." msgstr "git commit [Optionen] [--] <Pfadspezifikation>..." -#: builtin/commit.c:39 +#: builtin/commit.c:40 msgid "git status [options] [--] <pathspec>..." msgstr "git status [Optionen] [--] <Pfadspezifikation>..." -#: builtin/commit.c:44 +#: builtin/commit.c:45 msgid "" "Your name and email address were configured automatically based\n" "on your username and hostname. Please check that they are accurate.\n" @@ -3773,129 +3985,144 @@ msgstr "" " git config --global user.name \"Ihr Name\"\n" " git config --global user.email ihre@emailadresse.de\n" "\n" -"Nachdem Sie das getan hast, können Sie Ihre Identität für diese Version " +"Nachdem Sie das getan hast, können Sie Ihre Identität für diesen Commit " "ändern mit:\n" "\n" " git commit --amend --reset-author\n" -#: builtin/commit.c:56 +#: builtin/commit.c:57 msgid "" "You asked to amend the most recent commit, but doing so would make\n" "it empty. You can repeat your command with --allow-empty, or you can\n" "remove the commit entirely with \"git reset HEAD^\".\n" msgstr "" -"Sie fragten die jüngste Version nachzubessern, aber das würde diese leer\n" -"machen. Sie können Ihr Kommando mit --allow-empty wiederholen, oder die\n" -"Version mit \"git reset HEAD^\" vollständig entfernen.\n" +"Sie fragten den jüngsten Commit nachzubessern, aber das würde diesen leer\n" +"machen. Sie können Ihr Kommando mit --allow-empty wiederholen, oder diesen\n" +"Commit mit \"git reset HEAD^\" vollständig entfernen.\n" -#: builtin/commit.c:61 +#: builtin/commit.c:62 msgid "" "The previous cherry-pick is now empty, possibly due to conflict resolution.\n" "If you wish to commit it anyway, use:\n" "\n" " git commit --allow-empty\n" "\n" -"Otherwise, please use 'git reset'\n" msgstr "" "Der letzte \"cherry-pick\" ist jetzt leer, möglicherweise durch eine " "Konfliktauflösung.\n" -"Wenn Sie dies trotzdem eintragen wollen, benutzen Sie:\n" +"Wenn Sie dies trotzdem committen wollen, benutzen Sie:\n" "\n" " git commit --allow-empty\n" "\n" -"Andernfalls benutzen Sie bitte 'git reset'\n" -#: builtin/commit.c:260 +#: builtin/commit.c:69 +msgid "Otherwise, please use 'git reset'\n" +msgstr "Andernfalls benutzen Sie bitte 'git reset'\n" + +#: builtin/commit.c:72 +msgid "" +"If you wish to skip this commit, use:\n" +"\n" +" git reset\n" +"\n" +"Then \"git cherry-pick --continue\" will resume cherry-picking\n" +"the remaining commits.\n" +msgstr "" +"Wenn Sie diesen Commit auslassen möchten, benutzen Sie:\n" +"\n" +" git reset\n" +"\n" +"Benutzen Sie anschließend \"git cherry-pick --continue\", um die\n" +"Cherry-Pick-Operation mit den verbleibenden Commits fortzusetzen.\n" + +#: builtin/commit.c:279 msgid "failed to unpack HEAD tree object" -msgstr "Fehler beim Entpacken des Baum-Objektes der Zweigspitze (HEAD)." +msgstr "Fehler beim Entpacken des \"Tree\"-Objektes von HEAD." -#: builtin/commit.c:302 +#: builtin/commit.c:321 msgid "unable to create temporary index" -msgstr "Konnte temporäre Bereitstellung nicht erstellen." +msgstr "Konnte temporäre Staging-Area nicht erstellen." -#: builtin/commit.c:308 +#: builtin/commit.c:327 msgid "interactive add failed" msgstr "interaktives Hinzufügen fehlgeschlagen" -#: builtin/commit.c:341 builtin/commit.c:362 builtin/commit.c:412 +#: builtin/commit.c:360 builtin/commit.c:381 builtin/commit.c:431 msgid "unable to write new_index file" msgstr "Konnte new_index Datei nicht schreiben" -#: builtin/commit.c:393 +#: builtin/commit.c:412 msgid "cannot do a partial commit during a merge." -msgstr "" -"Kann keine partielle Eintragung durchführen, während eine Zusammenführung im " -"Gange ist." +msgstr "Kann keinen Teil-Commit durchführen, während ein Merge im Gange ist." -#: builtin/commit.c:395 +#: builtin/commit.c:414 msgid "cannot do a partial commit during a cherry-pick." msgstr "" -"Kann keine partielle Eintragung durchführen, während \"cherry-pick\" im " -"Gange ist." +"Kann keinen Teil-Commit durchführen, während \"cherry-pick\" im Gange ist." -#: builtin/commit.c:405 +#: builtin/commit.c:424 msgid "cannot read the index" -msgstr "Kann Bereitstellung nicht lesen" +msgstr "Kann Staging-Area nicht lesen" -#: builtin/commit.c:425 +#: builtin/commit.c:444 msgid "unable to write temporary index file" -msgstr "Konnte temporäre Bereitstellungsdatei nicht schreiben." +msgstr "Konnte temporäre Staging-Area-Datei nicht schreiben." -#: builtin/commit.c:513 builtin/commit.c:519 +#: builtin/commit.c:535 builtin/commit.c:541 #, c-format msgid "invalid commit: %s" -msgstr "Ungültige Version: %s" +msgstr "Ungültiger Commit: %s" -#: builtin/commit.c:542 +#: builtin/commit.c:563 msgid "malformed --author parameter" msgstr "Fehlerhafter --author Parameter" -#: builtin/commit.c:562 +#: builtin/commit.c:583 #, c-format msgid "Malformed ident string: '%s'" -msgstr "Fehlerhafte Identifikations-String: '%s'" +msgstr "Fehlerhafter Ident-String: '%s'" -#: builtin/commit.c:600 builtin/commit.c:633 builtin/commit.c:956 +#: builtin/commit.c:621 builtin/commit.c:654 builtin/commit.c:982 #, c-format msgid "could not lookup commit %s" -msgstr "Konnte Version %s nicht nachschlagen" +msgstr "Konnte Commit %s nicht nachschlagen" -#: builtin/commit.c:612 builtin/shortlog.c:270 +#: builtin/commit.c:633 builtin/shortlog.c:271 #, c-format msgid "(reading log message from standard input)\n" msgstr "(lese Log-Nachricht von Standard-Eingabe)\n" -#: builtin/commit.c:614 +#: builtin/commit.c:635 msgid "could not read log from standard input" msgstr "Konnte Log nicht von Standard-Eingabe lesen." -#: builtin/commit.c:618 +#: builtin/commit.c:639 #, c-format msgid "could not read log file '%s'" msgstr "Konnte Log-Datei '%s' nicht lesen" -#: builtin/commit.c:624 +#: builtin/commit.c:645 msgid "commit has empty message" -msgstr "Version hat eine leere Beschreibung" +msgstr "Commit hat eine leere Beschreibung" -#: builtin/commit.c:640 +#: builtin/commit.c:661 msgid "could not read MERGE_MSG" msgstr "Konnte MERGE_MSG nicht lesen" -#: builtin/commit.c:644 +#: builtin/commit.c:665 msgid "could not read SQUASH_MSG" msgstr "Konnte SQUASH_MSG nicht lesen" -#: builtin/commit.c:648 +#: builtin/commit.c:669 #, c-format msgid "could not read '%s'" msgstr "Konnte '%s' nicht lesen" -#: builtin/commit.c:709 +#: builtin/commit.c:730 msgid "could not write commit template" -msgstr "Konnte Versionsvorlage nicht schreiben" +msgstr "Konnte Commit-Vorlage nicht schreiben" -#: builtin/commit.c:720 +#: builtin/commit.c:741 #, c-format msgid "" "\n" @@ -3905,12 +4132,12 @@ msgid "" "and try again.\n" msgstr "" "\n" -"Es sieht so aus, als tragen Sie eine Zusammenführung ein.\n" +"Es sieht so aus, als committen Sie einen Merge.\n" "Falls das nicht korrekt ist, löschen Sie bitte die Datei\n" "\t%s\n" "und versuchen Sie es erneut.\n" -#: builtin/commit.c:725 +#: builtin/commit.c:746 #, c-format msgid "" "\n" @@ -3920,406 +4147,406 @@ msgid "" "and try again.\n" msgstr "" "\n" -"Es sieht so aus, als tragen Sie ein \"cherry-pick\" ein.\n" +"Es sieht so aus, als committen Sie einen \"cherry-pick\".\n" "Falls das nicht korrekt ist, löschen Sie bitte die Datei\n" "\t%s\n" "und versuchen Sie es erneut.\n" -#: builtin/commit.c:737 +#: builtin/commit.c:758 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" "with '%c' will be ignored, and an empty message aborts the commit.\n" msgstr "" -"Bitte geben Sie eine Versionsbeschreibung für Ihre Änderungen ein. Zeilen,\n" -"die mit '%c' beginnen, werden ignoriert, und eine leere " -"Versionsbeschreibung\n" -"bricht die Eintragung ab.\n" +"Bitte geben Sie eine Commit-Beschreibung für Ihre Änderungen ein. Zeilen,\n" +"die mit '%c' beginnen, werden ignoriert, und eine leere Beschreibung\n" +"bricht den Commit ab.\n" -#: builtin/commit.c:742 +#: builtin/commit.c:763 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" "with '%c' will be kept; you may remove them yourself if you want to.\n" "An empty message aborts the commit.\n" msgstr "" -"Bitte geben Sie eine Versionsbeschreibung für Ihre Änderungen ein. Zeilen, " +"Bitte geben Sie eine Commit-Beschreibung für Ihre Änderungen ein. Zeilen, " "die\n" "mit '%c' beginnen, werden beibehalten; wenn Sie möchten, können Sie diese " "entfernen.\n" -"Eine leere Versionsbeschreibung bricht die Eintragung ab.\n" +"Eine leere Beschreibung bricht den Commit ab.\n" -#: builtin/commit.c:755 +#: builtin/commit.c:776 #, c-format msgid "%sAuthor: %s" msgstr "%sAutor: %s" -#: builtin/commit.c:762 +#: builtin/commit.c:783 #, c-format msgid "%sCommitter: %s" -msgstr "%sEintragender: %s" +msgstr "%sCommit-Ersteller: %s" -#: builtin/commit.c:782 +#: builtin/commit.c:803 msgid "Cannot read index" -msgstr "Kann Bereitstellung nicht lesen" +msgstr "Kann Staging-Area nicht lesen" -#: builtin/commit.c:819 +#: builtin/commit.c:845 msgid "Error building trees" -msgstr "Fehler beim Erzeugen der Zweige" +msgstr "Fehler beim Erzeugen der \"Tree\"-Objekte" -#: builtin/commit.c:834 builtin/tag.c:359 +#: builtin/commit.c:860 builtin/tag.c:359 #, c-format msgid "Please supply the message using either -m or -F option.\n" -msgstr "Bitte liefere eine Beschreibung entweder mit der Option -m oder -F.\n" +msgstr "" +"Bitte liefern Sie eine Beschreibung entweder mit der Option -m oder -F.\n" -#: builtin/commit.c:931 +#: builtin/commit.c:957 #, c-format msgid "No existing author found with '%s'" msgstr "Kein existierender Autor mit '%s' gefunden." -#: builtin/commit.c:946 builtin/commit.c:1140 +#: builtin/commit.c:972 builtin/commit.c:1208 #, c-format msgid "Invalid untracked files mode '%s'" msgstr "Ungültiger Modus '%s' für unbeobachtete Dateien" -#: builtin/commit.c:976 +#: builtin/commit.c:1009 +msgid "--long and -z are incompatible" +msgstr "Die Optionen --long und -z sind inkompatibel." + +#: builtin/commit.c:1039 msgid "Using both --reset-author and --author does not make sense" msgstr "" "Die Optionen --reset-author und --author können nicht gemeinsam verwendet " "werden." -#: builtin/commit.c:987 +#: builtin/commit.c:1050 msgid "You have nothing to amend." -msgstr "Sie haben nichts zum nachbessern." +msgstr "Sie haben nichts für \"--amend\"." -#: builtin/commit.c:990 +#: builtin/commit.c:1053 msgid "You are in the middle of a merge -- cannot amend." -msgstr "Eine Zusammenführung ist im Gange -- kann nicht nachbessern." +msgstr "Ein Merge ist im Gange -- kann \"--amend\" nicht ausführen." -#: builtin/commit.c:992 +#: builtin/commit.c:1055 msgid "You are in the middle of a cherry-pick -- cannot amend." -msgstr "\"cherry-pick\" ist im Gange -- kann nicht nachbessern." +msgstr "\"cherry-pick\" ist im Gange -- kann \"--amend\" nicht ausführen." -#: builtin/commit.c:995 +#: builtin/commit.c:1058 msgid "Options --squash and --fixup cannot be used together" msgstr "" "Die Optionen --squash und --fixup können nicht gemeinsam verwendet werden." -#: builtin/commit.c:1005 +#: builtin/commit.c:1068 msgid "Only one of -c/-C/-F/--fixup can be used." msgstr "Es kann nur eine Option von -c/-C/-F/--fixup verwendet werden." -#: builtin/commit.c:1007 +#: builtin/commit.c:1070 msgid "Option -m cannot be combined with -c/-C/-F/--fixup." msgstr "Die Option -m kann nicht mit -c/-C/-F/--fixup kombiniert werden." -#: builtin/commit.c:1015 +#: builtin/commit.c:1078 msgid "--reset-author can be used only with -C, -c or --amend." msgstr "" "Die Option --reset--author kann nur mit -C, -c oder --amend verwendet werden." -#: builtin/commit.c:1032 +#: builtin/commit.c:1095 msgid "Only one of --include/--only/--all/--interactive/--patch can be used." msgstr "" "Es kann nur eine Option von --include/--only/--all/--interactive/--patch " "verwendet werden." -#: builtin/commit.c:1034 +#: builtin/commit.c:1097 msgid "No paths with --include/--only does not make sense." msgstr "" "Die Optionen --include und --only können nur mit der Angabe von Pfaden " "verwendet werden." -#: builtin/commit.c:1036 +#: builtin/commit.c:1099 msgid "Clever... amending the last one with dirty index." msgstr "" -"Klug... die letzte Version mit einer unsauberen Bereitstellung nachbessern." +"Klug... den letzten Commit mit einer geänderten Staging-Area nachbessern." -#: builtin/commit.c:1038 +#: builtin/commit.c:1101 msgid "Explicit paths specified without -i nor -o; assuming --only paths..." msgstr "" "Explizite Pfade ohne -i oder -o angegeben; unter der Annahme von --only " "Pfaden..." -#: builtin/commit.c:1048 builtin/tag.c:575 +#: builtin/commit.c:1111 builtin/tag.c:575 #, c-format msgid "Invalid cleanup mode %s" msgstr "Ungültiger \"cleanup\" Modus %s" -#: builtin/commit.c:1053 +#: builtin/commit.c:1116 msgid "Paths with -a does not make sense." msgstr "Die Option -a kann nur mit der Angabe von Pfaden verwendet werden." -#: builtin/commit.c:1059 builtin/commit.c:1194 -msgid "--long and -z are incompatible" -msgstr "Die Optionen --long und -z sind inkompatibel." - -#: builtin/commit.c:1154 builtin/commit.c:1390 +#: builtin/commit.c:1222 builtin/commit.c:1455 msgid "show status concisely" msgstr "zeigt Status im Kurzformat" -#: builtin/commit.c:1156 builtin/commit.c:1392 +#: builtin/commit.c:1224 builtin/commit.c:1457 msgid "show branch information" -msgstr "zeigt Zweiginformationen" +msgstr "zeigt Branchinformationen" -#: builtin/commit.c:1158 builtin/commit.c:1394 builtin/push.c:426 +#: builtin/commit.c:1226 builtin/commit.c:1459 builtin/push.c:452 msgid "machine-readable output" msgstr "maschinenlesbare Ausgabe" -#: builtin/commit.c:1161 builtin/commit.c:1396 +#: builtin/commit.c:1229 builtin/commit.c:1461 msgid "show status in long format (default)" msgstr "zeigt Status im Langformat (Standard)" -#: builtin/commit.c:1164 builtin/commit.c:1399 +#: builtin/commit.c:1232 builtin/commit.c:1464 msgid "terminate entries with NUL" msgstr "schließt Einträge mit NUL-Zeichen ab" -#: builtin/commit.c:1166 builtin/commit.c:1402 builtin/fast-export.c:659 -#: builtin/fast-export.c:662 builtin/tag.c:459 +#: builtin/commit.c:1234 builtin/commit.c:1467 builtin/fast-export.c:667 +#: builtin/fast-export.c:670 builtin/tag.c:459 msgid "mode" msgstr "Modus" -#: builtin/commit.c:1167 builtin/commit.c:1402 +#: builtin/commit.c:1235 builtin/commit.c:1467 msgid "show untracked files, optional modes: all, normal, no. (Default: all)" msgstr "" "zeigt nicht beobachtete Dateien, optionale Modi: all, normal, no. (Standard: " "all)" -#: builtin/commit.c:1170 +#: builtin/commit.c:1238 msgid "show ignored files" msgstr "zeigt ignorierte Dateien" -#: builtin/commit.c:1171 parse-options.h:151 +#: builtin/commit.c:1239 parse-options.h:154 msgid "when" msgstr "wann" -#: builtin/commit.c:1172 +#: builtin/commit.c:1240 msgid "" "ignore changes to submodules, optional when: all, dirty, untracked. " "(Default: all)" msgstr "" -"ignoriert Änderungen in Unterprojekten, optional wenn: all, dirty, " -"untracked. (Standard: all)" +"ignoriert Änderungen in Submodulen, optional wenn: all, dirty, untracked. " +"(Standard: all)" -#: builtin/commit.c:1174 +#: builtin/commit.c:1242 msgid "list untracked files in columns" msgstr "listet unbeobachtete Dateien in Spalten auf" -#: builtin/commit.c:1248 +#: builtin/commit.c:1313 msgid "couldn't look up newly created commit" -msgstr "Konnte neu erstellte Version nicht nachschlagen." +msgstr "Konnte neu erstellten Commit nicht nachschlagen." -#: builtin/commit.c:1250 +#: builtin/commit.c:1315 msgid "could not parse newly created commit" -msgstr "Konnte neulich erstellte Version nicht analysieren." +msgstr "Konnte neulich erstellten Commit nicht analysieren." -#: builtin/commit.c:1291 +#: builtin/commit.c:1356 msgid "detached HEAD" -msgstr "losgelöste Zweigspitze (HEAD)" +msgstr "losgelöster HEAD" -#: builtin/commit.c:1293 +#: builtin/commit.c:1358 msgid " (root-commit)" -msgstr " (Basis-Version)" +msgstr " (Basis-Commit)" -#: builtin/commit.c:1360 +#: builtin/commit.c:1425 msgid "suppress summary after successful commit" -msgstr "unterdrückt Zusammenfassung nach erfolgreicher Eintragung" +msgstr "unterdrückt Zusammenfassung nach erfolgreichem Commit" -#: builtin/commit.c:1361 +#: builtin/commit.c:1426 msgid "show diff in commit message template" -msgstr "zeigt Unterschiede in Versionsbeschreibungsvorlage an" +msgstr "zeigt Unterschiede in Commit-Beschreibungsvorlage an" -#: builtin/commit.c:1363 +#: builtin/commit.c:1428 msgid "Commit message options" -msgstr "Optionen für Versionsbeschreibung" +msgstr "Optionen für Commit-Beschreibung" -#: builtin/commit.c:1364 builtin/tag.c:457 +#: builtin/commit.c:1429 builtin/tag.c:457 msgid "read message from file" msgstr "liest Beschreibung von Datei" -#: builtin/commit.c:1365 +#: builtin/commit.c:1430 msgid "author" msgstr "Autor" -#: builtin/commit.c:1365 +#: builtin/commit.c:1430 msgid "override author for commit" -msgstr "überschreibt Autor von Version" +msgstr "überschreibt Autor eines Commits" -#: builtin/commit.c:1366 builtin/gc.c:178 +#: builtin/commit.c:1431 builtin/gc.c:178 msgid "date" msgstr "Datum" -#: builtin/commit.c:1366 +#: builtin/commit.c:1431 msgid "override date for commit" -msgstr "überschreibt Datum von Version" +msgstr "überschreibt Datum eines Commits" -#: builtin/commit.c:1367 builtin/merge.c:208 builtin/notes.c:533 -#: builtin/notes.c:690 builtin/tag.c:455 +#: builtin/commit.c:1432 builtin/merge.c:223 builtin/notes.c:405 +#: builtin/notes.c:562 builtin/tag.c:455 msgid "message" msgstr "Beschreibung" -#: builtin/commit.c:1367 +#: builtin/commit.c:1432 msgid "commit message" -msgstr "Versionsbeschreibung" +msgstr "Commit-Beschreibung" -#: builtin/commit.c:1368 +#: builtin/commit.c:1433 msgid "reuse and edit message from specified commit" -msgstr "verwendet wieder und editiert Beschreibung von der angegebenen Version" +msgstr "verwendet wieder und editiert Beschreibung des angegebenen Commits" -#: builtin/commit.c:1369 +#: builtin/commit.c:1434 msgid "reuse message from specified commit" -msgstr "verwendet Beschreibung der angegebenen Version wieder" +msgstr "verwendet Beschreibung des angegebenen Commits wieder" -#: builtin/commit.c:1370 +#: builtin/commit.c:1435 msgid "use autosquash formatted message to fixup specified commit" msgstr "" -"verwendet eine automatisch zusammengesetzte Beschreibung zum Nachbessern der " -"angegebenen Version" +"verwendet eine automatisch zusammengesetzte Beschreibung zum Nachbessern des " +"angegebenen Commits" -#: builtin/commit.c:1371 +#: builtin/commit.c:1436 msgid "use autosquash formatted message to squash specified commit" msgstr "" -"verwendet eine automatisch zusammengesetzte Beschreibung zum Zusammenführen " -"der angegebenen Version" +"verwendet eine automatisch zusammengesetzte Beschreibung beim \"squash\" des " +"angegebenen Commits" -#: builtin/commit.c:1372 +#: builtin/commit.c:1437 msgid "the commit is authored by me now (used with -C/-c/--amend)" -msgstr "Setzt Sie als Autor der Version (verwendet mit -C/-c/--amend)" +msgstr "Setzt Sie als Autor des Commits (verwendet mit -C/-c/--amend)" -#: builtin/commit.c:1373 builtin/log.c:1113 builtin/revert.c:109 +#: builtin/commit.c:1438 builtin/log.c:1160 builtin/revert.c:111 msgid "add Signed-off-by:" msgstr "fügt 'Signed-off-by:'-Zeile hinzu" -#: builtin/commit.c:1374 +#: builtin/commit.c:1439 msgid "use specified template file" msgstr "verwendet angegebene Vorlagendatei" -#: builtin/commit.c:1375 +#: builtin/commit.c:1440 msgid "force edit of commit" -msgstr "erzwingt Bearbeitung der Version" +msgstr "erzwingt Bearbeitung des Commits" -#: builtin/commit.c:1376 +#: builtin/commit.c:1441 msgid "default" msgstr "Standard" -#: builtin/commit.c:1376 builtin/tag.c:460 +#: builtin/commit.c:1441 builtin/tag.c:460 msgid "how to strip spaces and #comments from message" msgstr "" "wie Leerzeichen und #Kommentare von der Beschreibung getrennt werden sollen" -#: builtin/commit.c:1377 +#: builtin/commit.c:1442 msgid "include status in commit message template" -msgstr "fügt Status in die Versionsbeschreibungsvorlage ein" +msgstr "fügt Status in die Commit-Beschreibungsvorlage ein" -#: builtin/commit.c:1378 builtin/merge.c:215 builtin/tag.c:461 +#: builtin/commit.c:1443 builtin/merge.c:230 builtin/tag.c:461 msgid "key id" msgstr "Schlüssel-ID" -#: builtin/commit.c:1379 builtin/merge.c:216 +#: builtin/commit.c:1444 builtin/merge.c:231 msgid "GPG sign commit" -msgstr "signiert Version mit GPG" +msgstr "signiert Commit mit GPG" #. end commit message options -#: builtin/commit.c:1382 +#: builtin/commit.c:1447 msgid "Commit contents options" -msgstr "Optionen für Versionsinhalt" +msgstr "Optionen für Commit-Inhalt" -#: builtin/commit.c:1383 +#: builtin/commit.c:1448 msgid "commit all changed files" -msgstr "trägt alle geänderten Dateien ein" +msgstr "committet alle geänderten Dateien" -#: builtin/commit.c:1384 +#: builtin/commit.c:1449 msgid "add specified files to index for commit" -msgstr "trägt die angegebenen Dateien zusätzlich zur Bereitstellung ein" +msgstr "merkt die angegebenen Dateien zusätzlich zum Commit vor" -#: builtin/commit.c:1385 +#: builtin/commit.c:1450 msgid "interactively add files" msgstr "interaktives Hinzufügen von Dateien" -#: builtin/commit.c:1386 +#: builtin/commit.c:1451 msgid "interactively add changes" msgstr "interaktives Hinzufügen von Änderungen" -#: builtin/commit.c:1387 +#: builtin/commit.c:1452 msgid "commit only specified files" -msgstr "trägt nur die angegebenen Dateien ein" +msgstr "committet nur die angegebenen Dateien" -#: builtin/commit.c:1388 +#: builtin/commit.c:1453 msgid "bypass pre-commit hook" msgstr "umgeht \"pre-commit hook\"" -#: builtin/commit.c:1389 +#: builtin/commit.c:1454 msgid "show what would be committed" -msgstr "zeigt an, was eingetragen werden würde" +msgstr "zeigt an, was committet werden würde" -#: builtin/commit.c:1400 +#: builtin/commit.c:1465 msgid "amend previous commit" -msgstr "ändert vorherige Version" +msgstr "ändert vorherigen Commit" -#: builtin/commit.c:1401 +#: builtin/commit.c:1466 msgid "bypass post-rewrite hook" msgstr "umgeht \"post-rewrite hook\"" -#: builtin/commit.c:1406 +#: builtin/commit.c:1471 msgid "ok to record an empty change" msgstr "erlaubt Aufzeichnung einer leeren Änderung" -#: builtin/commit.c:1409 +#: builtin/commit.c:1474 msgid "ok to record a change with an empty message" msgstr "erlaubt Aufzeichnung einer Änderung mit einer leeren Beschreibung" -#: builtin/commit.c:1441 +#: builtin/commit.c:1507 msgid "could not parse HEAD commit" -msgstr "Konnte Version der Zweigspitze (HEAD) nicht analysieren." +msgstr "Konnte Commit von HEAD nicht analysieren." -#: builtin/commit.c:1479 builtin/merge.c:510 +#: builtin/commit.c:1545 builtin/merge.c:525 #, c-format msgid "could not open '%s' for reading" msgstr "Konnte '%s' nicht zum Lesen öffnen." -#: builtin/commit.c:1486 +#: builtin/commit.c:1552 #, c-format msgid "Corrupt MERGE_HEAD file (%s)" msgstr "Beschädigte MERGE_HEAD-Datei (%s)" -#: builtin/commit.c:1493 +#: builtin/commit.c:1559 msgid "could not read MERGE_MODE" msgstr "Konnte MERGE_MODE nicht lesen" -#: builtin/commit.c:1512 +#: builtin/commit.c:1578 #, c-format msgid "could not read commit message: %s" -msgstr "Konnte Versionsbeschreibung nicht lesen: %s" +msgstr "Konnte Commit-Beschreibung nicht lesen: %s" -#: builtin/commit.c:1526 +#: builtin/commit.c:1592 #, c-format msgid "Aborting commit; you did not edit the message.\n" -msgstr "Eintragung abgebrochen; Sie haben die Beschreibung nicht editiert.\n" +msgstr "Commit abgebrochen; Sie haben die Beschreibung nicht editiert.\n" -#: builtin/commit.c:1531 +#: builtin/commit.c:1597 #, c-format msgid "Aborting commit due to empty commit message.\n" -msgstr "Eintragung aufgrund leerer Versionsbeschreibung abgebrochen.\n" +msgstr "Commit aufgrund leerer Beschreibung abgebrochen.\n" -#: builtin/commit.c:1546 builtin/merge.c:847 builtin/merge.c:872 +#: builtin/commit.c:1612 builtin/merge.c:861 builtin/merge.c:886 msgid "failed to write commit object" -msgstr "Fehler beim Schreiben des Versionsobjektes." +msgstr "Fehler beim Schreiben des Commit-Objektes." -#: builtin/commit.c:1567 +#: builtin/commit.c:1633 msgid "cannot lock HEAD ref" -msgstr "Kann Referenz der Zweigspitze (HEAD) nicht sperren." +msgstr "Kann Referenz von HEAD nicht sperren." -#: builtin/commit.c:1571 +#: builtin/commit.c:1637 msgid "cannot update HEAD ref" -msgstr "Kann Referenz der Zweigspitze (HEAD) nicht aktualisieren." +msgstr "Kann Referenz von HEAD nicht aktualisieren." -#: builtin/commit.c:1582 +#: builtin/commit.c:1648 msgid "" "Repository has been updated, but unable to write\n" "new_index file. Check that disk is not full or quota is\n" "not exceeded, and then \"git reset HEAD\" to recover." msgstr "" -"Das Projektarchiv wurde aktualisiert, aber die \"new_index\"-Datei\n" +"Das Repository wurde aktualisiert, aber die \"new_index\"-Datei\n" "konnte nicht geschrieben werden. Prüfen Sie, dass Ihre Festplatte nicht\n" "voll und Ihr Kontingent nicht aufgebraucht ist und führen Sie\n" "anschließend \"git reset HEAD\" zu Wiederherstellung aus." @@ -4328,115 +4555,123 @@ msgstr "" msgid "git config [options]" msgstr "git config [Optionen]" -#: builtin/config.c:51 +#: builtin/config.c:52 msgid "Config file location" msgstr "Ort der Konfigurationsdatei" -#: builtin/config.c:52 +#: builtin/config.c:53 msgid "use global config file" msgstr "verwendet globale Konfigurationsdatei" -#: builtin/config.c:53 +#: builtin/config.c:54 msgid "use system config file" msgstr "verwendet systemweite Konfigurationsdatei" -#: builtin/config.c:54 +#: builtin/config.c:55 msgid "use repository config file" -msgstr "verwendet Konfigurationsdatei des Projektarchivs" +msgstr "verwendet Konfigurationsdatei des Repositories" -#: builtin/config.c:55 +#: builtin/config.c:56 msgid "use given config file" msgstr "verwendet die angegebene Konfigurationsdatei" -#: builtin/config.c:56 +#: builtin/config.c:57 +msgid "blob-id" +msgstr "Blob-Id" + +#: builtin/config.c:57 +msgid "read config from given blob object" +msgstr "liest Konfiguration von angegebenem Blob-Objekt" + +#: builtin/config.c:58 msgid "Action" msgstr "Aktion" -#: builtin/config.c:57 +#: builtin/config.c:59 msgid "get value: name [value-regex]" msgstr "gibt Wert zurück: Name [Wert-regex]" -#: builtin/config.c:58 +#: builtin/config.c:60 msgid "get all values: key [value-regex]" msgstr "gibt alle Werte zurück: Schlüssel [Wert-regex]" -#: builtin/config.c:59 +#: builtin/config.c:61 msgid "get values for regexp: name-regex [value-regex]" msgstr "gibt Werte für den regulären Ausdruck zurück: Name-regex [Wert-regex]" -#: builtin/config.c:60 +#: builtin/config.c:62 msgid "replace all matching variables: name value [value_regex]" msgstr "ersetzt alle passenden Variablen: Name Wert [Wert-regex] " -#: builtin/config.c:61 +#: builtin/config.c:63 msgid "add a new variable: name value" msgstr "fügt neue Variable hinzu: Name Wert" -#: builtin/config.c:62 +#: builtin/config.c:64 msgid "remove a variable: name [value-regex]" msgstr "entfernt eine Variable: Name [Wert-regex]" -#: builtin/config.c:63 +#: builtin/config.c:65 msgid "remove all matches: name [value-regex]" msgstr "entfernt alle Ãœbereinstimmungen: Name [Wert-regex]" -#: builtin/config.c:64 +#: builtin/config.c:66 msgid "rename section: old-name new-name" msgstr "benennt eine Sektion um: alter-Name neuer-Name" -#: builtin/config.c:65 +#: builtin/config.c:67 msgid "remove a section: name" msgstr "entfernt eine Sektion: Name" -#: builtin/config.c:66 +#: builtin/config.c:68 msgid "list all" msgstr "listet alles auf" -#: builtin/config.c:67 +#: builtin/config.c:69 msgid "open an editor" msgstr "öffnet einen Editor" -#: builtin/config.c:68 builtin/config.c:69 +#: builtin/config.c:70 builtin/config.c:71 msgid "slot" msgstr "Slot" -#: builtin/config.c:68 +#: builtin/config.c:70 msgid "find the color configured: [default]" msgstr "findet die konfigurierte Farbe: [Standard]" -#: builtin/config.c:69 +#: builtin/config.c:71 msgid "find the color setting: [stdout-is-tty]" msgstr "findet die Farbeinstellung: [Standard-Ausgabe-ist-Terminal]" -#: builtin/config.c:70 +#: builtin/config.c:72 msgid "Type" msgstr "Typ" -#: builtin/config.c:71 +#: builtin/config.c:73 msgid "value is \"true\" or \"false\"" msgstr "Wert ist \"true\" oder \"false\"" -#: builtin/config.c:72 +#: builtin/config.c:74 msgid "value is decimal number" msgstr "Wert ist eine Dezimalzahl" -#: builtin/config.c:73 +#: builtin/config.c:75 msgid "value is --bool or --int" msgstr "Wert ist --bool oder --int" -#: builtin/config.c:74 +#: builtin/config.c:76 msgid "value is a path (file or directory name)" msgstr "Wert ist ein Pfad (Datei oder Verzeichnisname)" -#: builtin/config.c:75 +#: builtin/config.c:77 msgid "Other" msgstr "Sonstiges" -#: builtin/config.c:76 +#: builtin/config.c:78 msgid "terminate values with NUL byte" msgstr "schließt Werte mit NUL-Byte ab" -#: builtin/config.c:77 +#: builtin/config.c:79 msgid "respect include directives on lookup" msgstr "beachtet \"include\"-Direktiven beim Nachschlagen" @@ -4448,173 +4683,173 @@ msgstr "git count-objects [-v] [-H | --human-readable]" msgid "print sizes in human readable format" msgstr "gibt Größenangaben in menschenlesbaren Format aus" -#: builtin/describe.c:15 +#: builtin/describe.c:16 msgid "git describe [options] <committish>*" msgstr "git describe [Optionen] <committish>*" -#: builtin/describe.c:16 +#: builtin/describe.c:17 msgid "git describe [options] --dirty" msgstr "git describe [Optionen] --dirty" -#: builtin/describe.c:233 +#: builtin/describe.c:237 #, c-format msgid "annotated tag %s not available" -msgstr "annotierte Markierung %s ist nicht verfügbar" +msgstr "annotierter Tag %s ist nicht verfügbar" -#: builtin/describe.c:237 +#: builtin/describe.c:241 #, c-format msgid "annotated tag %s has no embedded name" -msgstr "annotierte Markierung %s hat keinen eingebetteten Namen" +msgstr "annotierter Tag %s hat keinen eingebetteten Namen" -#: builtin/describe.c:239 +#: builtin/describe.c:243 #, c-format msgid "tag '%s' is really '%s' here" -msgstr "Markierung '%s' ist eigentlich '%s' hier" +msgstr "Tag '%s' ist eigentlich '%s' hier" -#: builtin/describe.c:266 +#: builtin/describe.c:270 #, c-format msgid "Not a valid object name %s" msgstr "%s ist kein gültiger Objekt-Name" -#: builtin/describe.c:269 +#: builtin/describe.c:273 #, c-format msgid "%s is not a valid '%s' object" msgstr "%s ist kein gültiges '%s' Objekt" -#: builtin/describe.c:286 +#: builtin/describe.c:290 #, c-format msgid "no tag exactly matches '%s'" -msgstr "kein Markierung entspricht exakt '%s'" +msgstr "kein Tag entspricht exakt '%s'" -#: builtin/describe.c:288 +#: builtin/describe.c:292 #, c-format msgid "searching to describe %s\n" msgstr "suche zur Beschreibung von %s\n" -#: builtin/describe.c:328 +#: builtin/describe.c:332 #, c-format msgid "finished search at %s\n" msgstr "beendete Suche bei %s\n" -#: builtin/describe.c:352 +#: builtin/describe.c:359 #, c-format msgid "" "No annotated tags can describe '%s'.\n" "However, there were unannotated tags: try --tags." msgstr "" -"Keine annotierten Markierungen können '%s' beschreiben.\n" -"Jedoch gab es nicht annotierte Markierungen: versuchen Sie --tags." +"Keine annotierten Tags können '%s' beschreiben.\n" +"Jedoch gab es nicht-annotierte Tags: versuchen Sie --tags." -#: builtin/describe.c:356 +#: builtin/describe.c:363 #, c-format msgid "" "No tags can describe '%s'.\n" "Try --always, or create some tags." msgstr "" -"Keine Markierungen können '%s' beschreiben.\n" -"Versuchen Sie --always oder erstellen Sie einige Markierungen." +"Keine Tags können '%s' beschreiben.\n" +"Versuchen Sie --always oder erstellen Sie einige Tags." -#: builtin/describe.c:377 +#: builtin/describe.c:384 #, c-format msgid "traversed %lu commits\n" -msgstr "%lu Versionen durchlaufen\n" +msgstr "%lu Commits durchlaufen\n" -#: builtin/describe.c:380 +#: builtin/describe.c:387 #, c-format msgid "" "more than %i tags found; listed %i most recent\n" "gave up search at %s\n" msgstr "" -"mehr als %i Markierungen gefunden; Führe die ersten %i auf\n" +"mehr als %i Tags gefunden; Führe die ersten %i auf\n" "Suche bei %s aufgegeben\n" -#: builtin/describe.c:402 +#: builtin/describe.c:409 msgid "find the tag that comes after the commit" -msgstr "findet die Markierung, die nach der Version kommt" +msgstr "findet den Tag, die nach Commit kommt" -#: builtin/describe.c:403 +#: builtin/describe.c:410 msgid "debug search strategy on stderr" msgstr "protokolliert die Suchstrategie in der Standard-Fehlerausgabe" -#: builtin/describe.c:404 +#: builtin/describe.c:411 msgid "use any ref" msgstr "verwendet alle Referenzen" -#: builtin/describe.c:405 +#: builtin/describe.c:412 msgid "use any tag, even unannotated" -msgstr "verwendet jede Markierung, auch nicht-annotierte" +msgstr "verwendet jeden Tag, auch nicht-annotierte" -#: builtin/describe.c:406 +#: builtin/describe.c:413 msgid "always use long format" msgstr "verwendet immer langes Format" -#: builtin/describe.c:409 +#: builtin/describe.c:414 +msgid "only follow first parent" +msgstr "folgt nur erstem Elternteil" + +#: builtin/describe.c:417 msgid "only output exact matches" msgstr "gibt nur exakte Ãœbereinstimmungen aus" -#: builtin/describe.c:411 +#: builtin/describe.c:419 msgid "consider <n> most recent tags (default: 10)" -msgstr "betrachtet die jüngsten <n> Markierungen (Standard: 10)" +msgstr "betrachtet die jüngsten <n> Tags (Standard: 10)" -#: builtin/describe.c:413 +#: builtin/describe.c:421 msgid "only consider tags matching <pattern>" -msgstr "betrachtet nur Markierungen die <Muster> entsprechen" +msgstr "betrachtet nur Tags die <Muster> entsprechen" -#: builtin/describe.c:415 builtin/name-rev.c:238 +#: builtin/describe.c:423 builtin/name-rev.c:322 msgid "show abbreviated commit object as fallback" -msgstr "zeigt gekürztes Versionsobjekt, wenn sonst nichts zutrifft" +msgstr "zeigt gekürztes Commit-Objekt, wenn sonst nichts zutrifft" -#: builtin/describe.c:416 +#: builtin/describe.c:424 msgid "mark" msgstr "Kennzeichen" -#: builtin/describe.c:417 +#: builtin/describe.c:425 msgid "append <mark> on dirty working tree (default: \"-dirty\")" msgstr "" -"fügt <Kennzeichen> bei geändertem Arbeitsbaum hinzu (Standard: \"-dirty\")" +"fügt <Kennzeichen> bei geändertem Arbeitsverzeichnis hinzu (Standard: \"-" +"dirty\")" -#: builtin/describe.c:435 +#: builtin/describe.c:443 msgid "--long is incompatible with --abbrev=0" msgstr "Die Optionen --long und --abbrev=0 sind inkompatibel." -#: builtin/describe.c:461 +#: builtin/describe.c:469 msgid "No names found, cannot describe anything." msgstr "Keine Namen gefunden, kann nichts beschreiben." -#: builtin/describe.c:481 +#: builtin/describe.c:489 msgid "--dirty is incompatible with committishes" -msgstr "Die Option --dirty kann nicht mit Versionen verwendet werden." +msgstr "Die Option --dirty kann nicht mit Commits verwendet werden." #: builtin/diff.c:79 #, c-format msgid "'%s': not a regular file or symlink" -msgstr "'%s': keine reguläre Datei oder symbolischer Link" +msgstr "'%s': keine reguläre Datei oder symbolischer Verweis" -#: builtin/diff.c:228 +#: builtin/diff.c:230 #, c-format msgid "invalid option: %s" msgstr "Ungültige Option: %s" -#: builtin/diff.c:305 +#: builtin/diff.c:307 msgid "Not a git repository" -msgstr "Kein Git-Projektarchiv" +msgstr "Kein Git-Repository" -#: builtin/diff.c:348 +#: builtin/diff.c:350 #, c-format msgid "invalid object '%s' given." msgstr "Objekt '%s' ist ungültig." -#: builtin/diff.c:353 -#, c-format -msgid "more than %d trees given: '%s'" -msgstr "Mehr als %d Zweige angegeben: '%s'" - -#: builtin/diff.c:363 +#: builtin/diff.c:359 #, c-format msgid "more than two blobs given: '%s'" msgstr "Mehr als zwei Blobs angegeben: '%s'" -#: builtin/diff.c:371 +#: builtin/diff.c:366 #, c-format msgid "unhandled object '%s' given." msgstr "unbehandeltes Objekt '%s' angegeben" @@ -4623,46 +4858,45 @@ msgstr "unbehandeltes Objekt '%s' angegeben" msgid "git fast-export [rev-list-opts]" msgstr "git fast-export [rev-list-opts]" -#: builtin/fast-export.c:658 +#: builtin/fast-export.c:666 msgid "show progress after <n> objects" msgstr "zeigt Fortschritt nach <n> Objekten an" -#: builtin/fast-export.c:660 +#: builtin/fast-export.c:668 msgid "select handling of signed tags" -msgstr "wählt Behandlung von signierten Markierungen" +msgstr "wählt Behandlung von signierten Tags" -#: builtin/fast-export.c:663 +#: builtin/fast-export.c:671 msgid "select handling of tags that tag filtered objects" -msgstr "wählt Behandlung von Markierungen, die gefilterte Objekte markieren" +msgstr "wählt Behandlung von Tags, die gefilterte Objekte markieren" -#: builtin/fast-export.c:666 +#: builtin/fast-export.c:674 msgid "Dump marks to this file" msgstr "Schreibt Kennzeichen in diese Datei" -#: builtin/fast-export.c:668 +#: builtin/fast-export.c:676 msgid "Import marks from this file" msgstr "Importiert Kennzeichen von dieser Datei" -#: builtin/fast-export.c:670 +#: builtin/fast-export.c:678 msgid "Fake a tagger when tags lack one" -msgstr "" -"erzeugt künstlich einen Markierungsersteller, wenn die Markierung keinen hat" +msgstr "erzeugt künstlich einen Tag-Ersteller, wenn der Tag keinen hat" -#: builtin/fast-export.c:672 +#: builtin/fast-export.c:680 msgid "Output full tree for each commit" -msgstr "gibt für jede Version den gesamten Baum aus" +msgstr "gibt für jeden Commit das gesamte Verzeichnis aus" -#: builtin/fast-export.c:674 +#: builtin/fast-export.c:682 msgid "Use the done feature to terminate the stream" msgstr "Benutzt die \"done\"-Funktion um den Strom abzuschließen" -#: builtin/fast-export.c:675 +#: builtin/fast-export.c:683 msgid "Skip output of blob data" msgstr "Ãœberspringt Ausgabe von Blob-Daten" #: builtin/fetch.c:20 msgid "git fetch [<options>] [<repository> [<refspec>...]]" -msgstr "git fetch [<Optionen>] [<Projektarchiv> [<Referenzspezifikation>...]]" +msgstr "git fetch [<Optionen>] [<Repository> [<Refspec>...]]" #: builtin/fetch.c:21 msgid "git fetch [<options>] <group>" @@ -4670,7 +4904,7 @@ msgstr "git fetch [<Optionen>] <Gruppe>" #: builtin/fetch.c:22 msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]" -msgstr "git fetch --multiple [<Optionen>] [(<Projektarchiv> | <Gruppe>)...]" +msgstr "git fetch --multiple [<Optionen>] [(<Repository> | <Gruppe>)...]" #: builtin/fetch.c:23 msgid "git fetch --all [<options>]" @@ -4678,7 +4912,7 @@ msgstr "git fetch --all [<Optionen>]" #: builtin/fetch.c:60 msgid "fetch from all remotes" -msgstr "fordert von allen externen Projektarchiven an" +msgstr "fordert von allen Remote-Repositories an" #: builtin/fetch.c:62 msgid "append to .git/FETCH_HEAD instead of overwriting" @@ -4690,24 +4924,25 @@ msgstr "Pfad des Programms zum Hochladen von Paketen auf der Gegenseite" #: builtin/fetch.c:65 msgid "force overwrite of local branch" -msgstr "erzwingt das Ãœberschreiben von lokalen Zweigen" +msgstr "erzwingt das Ãœberschreiben von lokalen Branches" #: builtin/fetch.c:67 msgid "fetch from multiple remotes" -msgstr "fordert von mehreren externen Projektarchiven an" +msgstr "fordert von mehreren Remote-Repositories an" #: builtin/fetch.c:69 msgid "fetch all tags and associated objects" -msgstr "fordert alle Markierungen und verbundene Objekte an" +msgstr "fordert alle Tags und verbundene Objekte an" #: builtin/fetch.c:71 msgid "do not fetch all tags (--no-tags)" -msgstr "fordert nicht alle Markierungen an (--no-tags)" +msgstr "fordert nicht alle Tags an (--no-tags)" #: builtin/fetch.c:73 msgid "prune remote-tracking branches no longer on remote" msgstr "" -"entfernt externe Ãœbernahmezweige, die sich nicht mehr im Fernarchiv befinden" +"entfernt Remote-Tracking-Branches, die sich nicht mehr im Remote-Repository " +"befinden" #: builtin/fetch.c:74 msgid "on-demand" @@ -4715,7 +4950,7 @@ msgstr "bei-Bedarf" #: builtin/fetch.c:75 msgid "control recursive fetching of submodules" -msgstr "kontrolliert rekursive Anforderungen von Unterprojekten" +msgstr "kontrolliert rekursive Anforderungen von Submodulen" #: builtin/fetch.c:79 msgid "keep downloaded pack" @@ -4727,203 +4962,204 @@ msgstr "erlaubt Aktualisierung der \"HEAD\"-Referenz" #: builtin/fetch.c:84 msgid "deepen history of shallow clone" -msgstr "vertieft die Historie eines flachen Klon" +msgstr "vertieft die Historie eines flachen Klons" #: builtin/fetch.c:86 msgid "convert to a complete repository" -msgstr "konvertiert zu einem vollständigen Projektarchiv" +msgstr "konvertiert zu einem vollständigen Repository" -#: builtin/fetch.c:88 builtin/log.c:1130 +#: builtin/fetch.c:88 builtin/log.c:1177 msgid "dir" msgstr "Verzeichnis" #: builtin/fetch.c:89 msgid "prepend this to submodule path output" -msgstr "stellt dies an die Ausgabe der Unterprojekt-Pfade voran" +msgstr "stellt dies an die Ausgabe der Submodul-Pfade voran" #: builtin/fetch.c:92 msgid "default mode for recursion" msgstr "Standard-Modus für Rekursion" -#: builtin/fetch.c:204 +#: builtin/fetch.c:220 msgid "Couldn't find remote ref HEAD" -msgstr "Konnte externe Referenz der Zweigspitze (HEAD) nicht finden." +msgstr "Konnte Remote-Referenz von HEAD nicht finden." -#: builtin/fetch.c:257 +#: builtin/fetch.c:273 #, c-format msgid "object %s not found" msgstr "Objekt %s nicht gefunden" -#: builtin/fetch.c:262 +#: builtin/fetch.c:278 msgid "[up to date]" msgstr "[aktuell]" -#: builtin/fetch.c:276 +#: builtin/fetch.c:292 #, c-format msgid "! %-*s %-*s -> %s (can't fetch in current branch)" -msgstr "! %-*s %-*s -> %s (kann nicht im aktuellen Zweig anfordern)" +msgstr "" +"! %-*s %-*s -> %s (kann \"fetch\" im aktuellen Branch nicht ausführen)" -#: builtin/fetch.c:277 builtin/fetch.c:363 +#: builtin/fetch.c:293 builtin/fetch.c:379 msgid "[rejected]" msgstr "[zurückgewiesen]" -#: builtin/fetch.c:288 +#: builtin/fetch.c:304 msgid "[tag update]" -msgstr "[Markierungsaktualisierung]" +msgstr "[Tag Aktualisierung]" -#: builtin/fetch.c:290 builtin/fetch.c:325 builtin/fetch.c:343 +#: builtin/fetch.c:306 builtin/fetch.c:341 builtin/fetch.c:359 msgid " (unable to update local ref)" msgstr " (kann lokale Referenz nicht aktualisieren)" -#: builtin/fetch.c:308 +#: builtin/fetch.c:324 msgid "[new tag]" -msgstr "[neue Markierung]" +msgstr "[neuer Tag]" -#: builtin/fetch.c:311 +#: builtin/fetch.c:327 msgid "[new branch]" -msgstr "[neuer Zweig]" +msgstr "[neuer Branch]" -#: builtin/fetch.c:314 +#: builtin/fetch.c:330 msgid "[new ref]" msgstr "[neue Referenz]" -#: builtin/fetch.c:359 +#: builtin/fetch.c:375 msgid "unable to update local ref" msgstr "kann lokale Referenz nicht aktualisieren" -#: builtin/fetch.c:359 +#: builtin/fetch.c:375 msgid "forced update" msgstr "Aktualisierung erzwungen" -#: builtin/fetch.c:365 +#: builtin/fetch.c:381 msgid "(non-fast-forward)" msgstr "(kein Vorspulen)" -#: builtin/fetch.c:396 builtin/fetch.c:688 +#: builtin/fetch.c:412 builtin/fetch.c:718 #, c-format msgid "cannot open %s: %s\n" msgstr "kann %s nicht öffnen: %s\n" -#: builtin/fetch.c:405 +#: builtin/fetch.c:421 #, c-format msgid "%s did not send all necessary objects\n" msgstr "%s hat nicht alle erforderlichen Objekte gesendet\n" -#: builtin/fetch.c:491 +#: builtin/fetch.c:520 #, c-format msgid "From %.*s\n" msgstr "Von %.*s\n" -#: builtin/fetch.c:502 +#: builtin/fetch.c:531 #, c-format msgid "" "some local refs could not be updated; try running\n" " 'git remote prune %s' to remove any old, conflicting branches" msgstr "" "Einige lokale Referenzen konnten nicht aktualisiert werden; versuchen Sie\n" -"'git remote prune %s' um jeden älteren, widersprüchlichen Zweig zu löschen." +"'git remote prune %s' um jeden älteren, widersprüchlichen Branch zu löschen." -#: builtin/fetch.c:552 +#: builtin/fetch.c:581 #, c-format msgid " (%s will become dangling)" msgstr " (%s wird unreferenziert)" -#: builtin/fetch.c:553 +#: builtin/fetch.c:582 #, c-format msgid " (%s has become dangling)" msgstr " (%s wurde unreferenziert)" -#: builtin/fetch.c:560 +#: builtin/fetch.c:589 msgid "[deleted]" msgstr "[gelöscht]" -#: builtin/fetch.c:561 builtin/remote.c:1055 +#: builtin/fetch.c:590 builtin/remote.c:1055 msgid "(none)" msgstr "(nichts)" -#: builtin/fetch.c:678 +#: builtin/fetch.c:708 #, c-format msgid "Refusing to fetch into current branch %s of non-bare repository" msgstr "" -"Das Anfordern in den aktuellen Zweig %s von einem nicht-bloßen Projektarchiv " +"Der \"fetch\" in den aktuellen Branch %s von einem nicht-Bare-Repository " "wurde verweigert." -#: builtin/fetch.c:712 +#: builtin/fetch.c:742 #, c-format msgid "Don't know how to fetch from %s" msgstr "Weiß nicht wie von %s angefordert wird." -#: builtin/fetch.c:789 +#: builtin/fetch.c:823 #, c-format msgid "Option \"%s\" value \"%s\" is not valid for %s" msgstr "Option \"%s\" Wert \"%s\" ist nicht gültig für %s" -#: builtin/fetch.c:792 +#: builtin/fetch.c:826 #, c-format msgid "Option \"%s\" is ignored for %s\n" msgstr "Option \"%s\" wird ignoriert für %s\n" -#: builtin/fetch.c:894 +#: builtin/fetch.c:928 #, c-format msgid "Fetching %s\n" msgstr "Fordere an von %s\n" -#: builtin/fetch.c:896 builtin/remote.c:100 +#: builtin/fetch.c:930 builtin/remote.c:100 #, c-format msgid "Could not fetch %s" msgstr "Konnte nicht von %s anfordern" -#: builtin/fetch.c:915 +#: builtin/fetch.c:949 msgid "" "No remote repository specified. Please, specify either a URL or a\n" "remote name from which new revisions should be fetched." msgstr "" -"Kein externes Projektarchiv angegeben. Bitte geben Sie entweder eine URL\n" -"oder den Namen des externen Archivs an, von welchem neue\n" -"Revisionen angefordert werden sollen." +"Kein Remote-Repository angegeben. Bitte geben Sie entweder eine URL\n" +"oder den Namen des Remote-Repositories an, von welchem neue\n" +"Commits angefordert werden sollen." -#: builtin/fetch.c:935 +#: builtin/fetch.c:969 msgid "You need to specify a tag name." -msgstr "Sie müssen den Namen der Markierung angeben." +msgstr "Sie müssen den Namen des Tags angeben." -#: builtin/fetch.c:981 +#: builtin/fetch.c:1015 msgid "--depth and --unshallow cannot be used together" msgstr "" "Die Optionen --depth und --unshallow können nicht gemeinsam verwendet werden." -#: builtin/fetch.c:983 +#: builtin/fetch.c:1017 msgid "--unshallow on a complete repository does not make sense" msgstr "" -"Die Option --unshallow kann nicht in einem vollständigen Projektarchiv " +"Die Option --unshallow kann nicht in einem vollständigen Repository " "verwendet werden." -#: builtin/fetch.c:1002 +#: builtin/fetch.c:1036 msgid "fetch --all does not take a repository argument" -msgstr "fetch --all akzeptiert kein Projektarchiv als Argument" +msgstr "fetch --all akzeptiert kein Repository als Argument" -#: builtin/fetch.c:1004 +#: builtin/fetch.c:1038 msgid "fetch --all does not make sense with refspecs" -msgstr "fetch --all kann nicht mit Referenzspezifikationen verwendet werden." +msgstr "fetch --all kann nicht mit Refspecs verwendet werden." -#: builtin/fetch.c:1015 +#: builtin/fetch.c:1049 #, c-format msgid "No such remote or remote group: %s" -msgstr "Kein externes Archiv (einzeln oder Gruppe): %s" +msgstr "Kein Remote-Repository (einzeln oder Gruppe): %s" -#: builtin/fetch.c:1023 +#: builtin/fetch.c:1057 msgid "Fetching a group and specifying refspecs does not make sense" msgstr "" -"Das Abholen einer Gruppe von externen Archiven kann nicht mit der Angabe\n" -"von Referenzspezifikationen verwendet werden." +"Das Abholen einer Gruppe von Remote-Repositories kann nicht mit der Angabe\n" +"von Refspecs verwendet werden." #: builtin/fmt-merge-msg.c:13 msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]" msgstr "" "git fmt-merge-msg [-m <Beschreibung>] [--log[=<n>]|--no-log] [--file <Datei>]" -#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:701 -#: builtin/merge.c:188 builtin/show-branch.c:655 builtin/show-ref.c:175 -#: builtin/tag.c:446 parse-options.h:133 parse-options.h:239 +#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:700 +#: builtin/merge.c:203 builtin/show-branch.c:655 builtin/show-ref.c:179 +#: builtin/tag.c:446 parse-options.h:133 parse-options.h:243 msgid "n" msgstr "Anzahl" @@ -5001,7 +5237,7 @@ msgstr "zeigt unreferenzierte Objekte" #: builtin/fsck.c:616 msgid "report tags" -msgstr "meldet Markierungen" +msgstr "meldet Tags" #: builtin/fsck.c:617 msgid "report root nodes" @@ -5009,11 +5245,11 @@ msgstr "meldet Hauptwurzeln" #: builtin/fsck.c:618 msgid "make index objects head nodes" -msgstr "erzeugt Kopfknoten der Bereitstellungsobjekte" +msgstr "prüft Objekte in der Staging-Area" #: builtin/fsck.c:619 msgid "make reflogs head nodes (default)" -msgstr "erzeugt Kopfknoten des Referenzprotokolls (Standard)" +msgstr "prüft die Reflogs (Standard)" #: builtin/fsck.c:620 msgid "also consider packs and alternate objects" @@ -5063,7 +5299,7 @@ msgid "" "Auto packing the repository for optimum performance. You may also\n" "run \"git gc\" manually. See \"git help gc\" for more information.\n" msgstr "" -"Die Datenbank des Projektarchivs wird für eine optimale Performance\n" +"Die Datenbank des Repositories wird für eine optimale Performance\n" "komprimiert. Sie können auch \"git gc\" manuell ausführen.\n" "Siehe \"git help gc\" für weitere Informationen.\n" @@ -5076,240 +5312,240 @@ msgstr "" #: builtin/grep.c:22 msgid "git grep [options] [-e] <pattern> [<rev>...] [[--] <path>...]" -msgstr "git grep [Optionen] [-e] <Muster> [<Revision>...] [[--] <Pfad>...]" +msgstr "git grep [Optionen] [-e] <Muster> [<Commit>...] [[--] <Pfad>...]" #: builtin/grep.c:217 #, c-format msgid "grep: failed to create thread: %s" msgstr "grep: Fehler beim Erzeugen eines Thread: %s" -#: builtin/grep.c:365 +#: builtin/grep.c:364 #, c-format msgid "Failed to chdir: %s" msgstr "Fehler beim Verzeichniswechsel: %s" -#: builtin/grep.c:443 builtin/grep.c:478 +#: builtin/grep.c:442 builtin/grep.c:477 #, c-format msgid "unable to read tree (%s)" -msgstr "konnte Zweig (%s) nicht lesen" +msgstr "konnte \"Tree\"-Objekt (%s) nicht lesen" -#: builtin/grep.c:493 +#: builtin/grep.c:492 #, c-format msgid "unable to grep from object of type %s" msgstr "kann \"grep\" nicht mit Objekten des Typs %s durchführen" -#: builtin/grep.c:551 +#: builtin/grep.c:550 #, c-format msgid "switch `%c' expects a numerical value" msgstr "Schalter '%c' erwartet einen numerischen Wert" -#: builtin/grep.c:568 +#: builtin/grep.c:567 #, c-format msgid "cannot open '%s'" msgstr "kann '%s' nicht öffnen" -#: builtin/grep.c:643 +#: builtin/grep.c:642 msgid "search in index instead of in the work tree" -msgstr "sucht in der Bereitstellung anstatt im Arbeitsbaum" +msgstr "sucht in der Staging-Area anstatt im Arbeitsverzeichnis" -#: builtin/grep.c:645 +#: builtin/grep.c:644 msgid "find in contents not managed by git" msgstr "findet auch in Inhalten, die nicht von Git verwaltet werden" -#: builtin/grep.c:647 +#: builtin/grep.c:646 msgid "search in both tracked and untracked files" msgstr "sucht in beobachteten und unbeobachteten Dateien" -#: builtin/grep.c:649 +#: builtin/grep.c:648 msgid "search also in ignored files" msgstr "sucht auch in ignorierten Dateien" -#: builtin/grep.c:652 +#: builtin/grep.c:651 msgid "show non-matching lines" msgstr "zeigt Zeilen ohne Ãœbereinstimmungen" -#: builtin/grep.c:654 +#: builtin/grep.c:653 msgid "case insensitive matching" msgstr "findet Ãœbereinstimmungen unabhängig von Groß- und Kleinschreibung" -#: builtin/grep.c:656 +#: builtin/grep.c:655 msgid "match patterns only at word boundaries" msgstr "sucht nur ganze Wörter" -#: builtin/grep.c:658 +#: builtin/grep.c:657 msgid "process binary files as text" msgstr "verarbeitet binäre Dateien als Text" -#: builtin/grep.c:660 +#: builtin/grep.c:659 msgid "don't match patterns in binary files" msgstr "findet keine Muster in Binärdateien" -#: builtin/grep.c:663 +#: builtin/grep.c:662 msgid "descend at most <depth> levels" msgstr "durchläuft höchstens <Tiefe> Ebenen" -#: builtin/grep.c:667 +#: builtin/grep.c:666 msgid "use extended POSIX regular expressions" msgstr "verwendet erweiterte reguläre Ausdrücke aus POSIX" -#: builtin/grep.c:670 +#: builtin/grep.c:669 msgid "use basic POSIX regular expressions (default)" msgstr "verwendet grundlegende reguläre Ausdrücke aus POSIX (Standard)" -#: builtin/grep.c:673 +#: builtin/grep.c:672 msgid "interpret patterns as fixed strings" msgstr "interpretiert Muster als feste Zeichenketten" -#: builtin/grep.c:676 +#: builtin/grep.c:675 msgid "use Perl-compatible regular expressions" msgstr "verwendet Perl-kompatible reguläre Ausdrücke" -#: builtin/grep.c:679 +#: builtin/grep.c:678 msgid "show line numbers" msgstr "zeigt Zeilennummern" -#: builtin/grep.c:680 +#: builtin/grep.c:679 msgid "don't show filenames" msgstr "zeigt keine Dateinamen" -#: builtin/grep.c:681 +#: builtin/grep.c:680 msgid "show filenames" msgstr "zeigt Dateinamen" -#: builtin/grep.c:683 +#: builtin/grep.c:682 msgid "show filenames relative to top directory" msgstr "zeigt Dateinamen relativ zum Projektverzeichnis" -#: builtin/grep.c:685 +#: builtin/grep.c:684 msgid "show only filenames instead of matching lines" msgstr "zeigt nur Dateinamen anstatt übereinstimmende Zeilen" -#: builtin/grep.c:687 +#: builtin/grep.c:686 msgid "synonym for --files-with-matches" msgstr "Synonym für --files-with-matches" -#: builtin/grep.c:690 +#: builtin/grep.c:689 msgid "show only the names of files without match" msgstr "zeigt nur die Dateinamen ohne Ãœbereinstimmungen" -#: builtin/grep.c:692 +#: builtin/grep.c:691 msgid "print NUL after filenames" msgstr "gibt NUL-Zeichen nach Dateinamen aus" -#: builtin/grep.c:694 +#: builtin/grep.c:693 msgid "show the number of matches instead of matching lines" msgstr "zeigt, anstatt der Zeilen, die Anzahl der übereinstimmenden Zeilen" -#: builtin/grep.c:695 +#: builtin/grep.c:694 msgid "highlight matches" msgstr "hebt Ãœbereinstimmungen hervor" -#: builtin/grep.c:697 +#: builtin/grep.c:696 msgid "print empty line between matches from different files" msgstr "" "gibt eine Leerzeile zwischen Ãœbereinstimmungen in verschiedenen Dateien aus" -#: builtin/grep.c:699 +#: builtin/grep.c:698 msgid "show filename only once above matches from same file" msgstr "" "zeigt den Dateinamen nur einmal oberhalb der Ãœbereinstimmungen aus dieser " "Datei an" -#: builtin/grep.c:702 +#: builtin/grep.c:701 msgid "show <n> context lines before and after matches" msgstr "zeigt <n> Zeilen vor und nach den Ãœbereinstimmungen an" -#: builtin/grep.c:705 +#: builtin/grep.c:704 msgid "show <n> context lines before matches" msgstr "zeigt <n> Zeilen vor den Ãœbereinstimmungen an" -#: builtin/grep.c:707 +#: builtin/grep.c:706 msgid "show <n> context lines after matches" msgstr "zeigt <n> Zeilen nach den Ãœbereinstimmungen an" -#: builtin/grep.c:708 +#: builtin/grep.c:707 msgid "shortcut for -C NUM" msgstr "Kurzform für -C NUM" -#: builtin/grep.c:711 +#: builtin/grep.c:710 msgid "show a line with the function name before matches" msgstr "zeigt eine Zeile mit dem Funktionsnamen vor Ãœbereinstimmungen an" -#: builtin/grep.c:713 +#: builtin/grep.c:712 msgid "show the surrounding function" msgstr "zeigt die umgebende Funktion an" -#: builtin/grep.c:716 +#: builtin/grep.c:715 msgid "read patterns from file" msgstr "liest Muster von einer Datei" -#: builtin/grep.c:718 +#: builtin/grep.c:717 msgid "match <pattern>" msgstr "findet <Muster>" -#: builtin/grep.c:720 +#: builtin/grep.c:719 msgid "combine patterns specified with -e" msgstr "kombiniert Muster, die mit -e angegeben wurden" -#: builtin/grep.c:732 +#: builtin/grep.c:731 msgid "indicate hit with exit status without output" msgstr "zeigt Ãœbereinstimmungen nur durch Beendigungsstatus an" -#: builtin/grep.c:734 +#: builtin/grep.c:733 msgid "show only matches from files that match all patterns" msgstr "zeigt nur Ãœbereinstimmungen von Dateien, die allen Mustern entsprechen" -#: builtin/grep.c:736 +#: builtin/grep.c:735 msgid "show parse tree for grep expression" -msgstr "zeigt geparsten Baum für \"grep\"-Ausdruck" +msgstr "zeigt geparstes Verzeichnis für \"grep\"-Ausdruck" -#: builtin/grep.c:740 +#: builtin/grep.c:739 msgid "pager" msgstr "Anzeigeprogramm" -#: builtin/grep.c:740 +#: builtin/grep.c:739 msgid "show matching files in the pager" msgstr "zeigt Dateien mit Ãœbereinstimmungen im Anzeigeprogramm" -#: builtin/grep.c:743 +#: builtin/grep.c:742 msgid "allow calling of grep(1) (ignored by this build)" msgstr "erlaubt den Aufruf von grep(1) (von dieser Programmversion ignoriert)" -#: builtin/grep.c:744 builtin/show-ref.c:184 +#: builtin/grep.c:743 builtin/show-ref.c:188 msgid "show usage" msgstr "zeigt Verwendung" -#: builtin/grep.c:811 +#: builtin/grep.c:810 msgid "no pattern given." msgstr "keine Muster angegeben" -#: builtin/grep.c:866 +#: builtin/grep.c:865 msgid "--open-files-in-pager only works on the worktree" msgstr "" -"Die Option --open-files-in-pager kann nur innerhalb des Arbeitsbaums " -"verwendet werden." +"Die Option --open-files-in-pager kann nur innerhalb des " +"Arbeitsverzeichnisses verwendet werden." -#: builtin/grep.c:889 +#: builtin/grep.c:888 msgid "--cached or --untracked cannot be used with --no-index." msgstr "" "Die Optionen --cached und --untracked können nicht mit --no-index verwendet " "werden." -#: builtin/grep.c:894 +#: builtin/grep.c:893 msgid "--no-index or --untracked cannot be used with revs." msgstr "" -"Die Optionen --no-index und --untracked können nicht mit Versionen verwendet " +"Die Optionen --no-index und --untracked können nicht mit Commits verwendet " "werden." -#: builtin/grep.c:897 +#: builtin/grep.c:896 msgid "--[no-]exclude-standard cannot be used for tracked contents." msgstr "" "Die Option --[no-]exclude-standard kann nicht mit beobachteten Inhalten " "verwendet werden." -#: builtin/grep.c:905 +#: builtin/grep.c:904 msgid "both --cached and trees are given." -msgstr "Die Option --cached kann nicht mit Zweigen verwendet werden." +msgstr "Die Option --cached kann nicht mit \"Tree\"-Objekten verwendet werden." #: builtin/hash-object.c:60 msgid "" @@ -5347,54 +5583,54 @@ msgstr "speichert Datei wie sie ist, ohne Filter" msgid "process file as it were from this path" msgstr "verarbeitet Datei, als ob sie von diesem Pfad wäre" -#: builtin/help.c:43 +#: builtin/help.c:41 msgid "print all available commands" msgstr "Anzeige aller vorhandenen Kommandos" -#: builtin/help.c:44 +#: builtin/help.c:42 msgid "print list of useful guides" msgstr "zeigt Liste von allgemein verwendeten Anleitungen" -#: builtin/help.c:45 +#: builtin/help.c:43 msgid "show man page" msgstr "zeigt Handbuch" -#: builtin/help.c:46 +#: builtin/help.c:44 msgid "show manual in web browser" msgstr "zeigt Handbuch in einem Webbrowser" -#: builtin/help.c:48 +#: builtin/help.c:46 msgid "show info page" msgstr "zeigt Info-Seite" -#: builtin/help.c:54 +#: builtin/help.c:52 msgid "git help [--all] [--guides] [--man|--web|--info] [command]" msgstr "git help [--all] [--guides] [--man|--web|--info] [Kommando]" -#: builtin/help.c:66 +#: builtin/help.c:64 #, c-format msgid "unrecognized help format '%s'" msgstr "nicht erkanntes Hilfeformat: %s" -#: builtin/help.c:94 +#: builtin/help.c:92 msgid "Failed to start emacsclient." msgstr "Konnte emacsclient nicht starten." -#: builtin/help.c:107 +#: builtin/help.c:105 msgid "Failed to parse emacsclient version." msgstr "Konnte Version des emacsclient nicht parsen." -#: builtin/help.c:115 +#: builtin/help.c:113 #, c-format msgid "emacsclient version '%d' too old (< 22)." msgstr "Version des emacsclient '%d' ist zu alt (< 22)." -#: builtin/help.c:133 builtin/help.c:161 builtin/help.c:170 builtin/help.c:178 +#: builtin/help.c:131 builtin/help.c:159 builtin/help.c:168 builtin/help.c:176 #, c-format msgid "failed to exec '%s': %s" msgstr "Fehler beim Ausführen von '%s': %s" -#: builtin/help.c:218 +#: builtin/help.c:216 #, c-format msgid "" "'%s': path for unsupported man viewer.\n" @@ -5403,7 +5639,7 @@ msgstr "" "'%s': Pfad für nicht unterstützten Handbuchbetrachter.\n" "Sie könnten stattdessen 'man.<Werkzeug>.cmd' benutzen." -#: builtin/help.c:230 +#: builtin/help.c:228 #, c-format msgid "" "'%s': cmd for supported man viewer.\n" @@ -5412,336 +5648,336 @@ msgstr "" "'%s': Kommando für unterstützten Handbuchbetrachter.\n" "Sie könnten stattdessen 'man.<Werkzeug>.path' benutzen." -#: builtin/help.c:351 +#: builtin/help.c:349 #, c-format msgid "'%s': unknown man viewer." msgstr "'%s': unbekannter Handbuch-Betrachter." -#: builtin/help.c:368 +#: builtin/help.c:366 msgid "no man viewer handled the request" msgstr "kein Handbuch-Betrachter konnte mit dieser Anfrage umgehen" -#: builtin/help.c:376 +#: builtin/help.c:374 msgid "no info viewer handled the request" msgstr "kein Informations-Betrachter konnte mit dieser Anfrage umgehen" -#: builtin/help.c:422 +#: builtin/help.c:420 msgid "Defining attributes per path" msgstr "Definition von Attributen pro Pfad" -#: builtin/help.c:423 +#: builtin/help.c:421 msgid "A Git glossary" msgstr "Ein Git-Glossar" -#: builtin/help.c:424 +#: builtin/help.c:422 msgid "Specifies intentionally untracked files to ignore" msgstr "Spezifikation von bewusst ignorierten, unbeobachteten Dateien" -#: builtin/help.c:425 +#: builtin/help.c:423 msgid "Defining submodule properties" -msgstr "Definition von Unterprojekt-Eigenschaften" +msgstr "Definition von Submodul-Eigenschaften" -#: builtin/help.c:426 +#: builtin/help.c:424 msgid "Specifying revisions and ranges for Git" -msgstr "Spezifikation von Revisionen und Bereichen für Git" +msgstr "Spezifikation von Commits und Bereichen für Git" -#: builtin/help.c:427 +#: builtin/help.c:425 msgid "A tutorial introduction to Git (for version 1.5.1 or newer)" msgstr "Eine einführende Anleitung zu Git (für Version 1.5.1 oder neuer)" -#: builtin/help.c:428 +#: builtin/help.c:426 msgid "An overview of recommended workflows with Git" msgstr "Eine Ãœbersicht über empfohlene Arbeitsabläufe mit Git" -#: builtin/help.c:440 +#: builtin/help.c:438 msgid "The common Git guides are:\n" msgstr "Die allgemein verwendeten Git-Anleitungen sind:\n" -#: builtin/help.c:462 builtin/help.c:478 +#: builtin/help.c:460 builtin/help.c:476 #, c-format msgid "usage: %s%s" msgstr "Verwendung: %s%s" -#: builtin/help.c:494 +#: builtin/help.c:492 #, c-format msgid "`git %s' is aliased to `%s'" msgstr "für `git %s' wurde der Alias `%s' angelegt" -#: builtin/index-pack.c:182 +#: builtin/index-pack.c:184 #, c-format msgid "object type mismatch at %s" msgstr "Objekt-Typen passen bei %s nicht zusammen" -#: builtin/index-pack.c:202 +#: builtin/index-pack.c:204 msgid "object of unexpected type" msgstr "Objekt hat unerwarteten Typ" -#: builtin/index-pack.c:239 +#: builtin/index-pack.c:244 #, c-format msgid "cannot fill %d byte" msgid_plural "cannot fill %d bytes" msgstr[0] "kann %d Byte nicht lesen" msgstr[1] "kann %d Bytes nicht lesen" -#: builtin/index-pack.c:249 +#: builtin/index-pack.c:254 msgid "early EOF" msgstr "zu frühes Dateiende" -#: builtin/index-pack.c:250 +#: builtin/index-pack.c:255 msgid "read error on input" msgstr "Fehler beim Lesen der Eingabe" -#: builtin/index-pack.c:262 +#: builtin/index-pack.c:267 msgid "used more bytes than were available" msgstr "verwendete mehr Bytes als verfügbar waren" -#: builtin/index-pack.c:269 +#: builtin/index-pack.c:274 msgid "pack too large for current definition of off_t" msgstr "Paket ist zu groß für die aktuelle Definition von off_t" -#: builtin/index-pack.c:285 +#: builtin/index-pack.c:290 #, c-format msgid "unable to create '%s'" msgstr "konnte '%s' nicht erstellen" -#: builtin/index-pack.c:290 +#: builtin/index-pack.c:295 #, c-format msgid "cannot open packfile '%s'" msgstr "Kann Paketdatei '%s' nicht öffnen" -#: builtin/index-pack.c:304 +#: builtin/index-pack.c:309 msgid "pack signature mismatch" msgstr "Paketsignatur stimmt nicht überein" -#: builtin/index-pack.c:306 +#: builtin/index-pack.c:311 #, c-format msgid "pack version %<PRIu32> unsupported" msgstr "Paketversion %<PRIu32> nicht unterstützt" -#: builtin/index-pack.c:324 +#: builtin/index-pack.c:329 #, c-format msgid "pack has bad object at offset %lu: %s" msgstr "Paket hat ein ungültiges Objekt bei Versatz %lu: %s" -#: builtin/index-pack.c:446 +#: builtin/index-pack.c:451 #, c-format msgid "inflate returned %d" msgstr "Dekomprimierung gab %d zurück" -#: builtin/index-pack.c:495 +#: builtin/index-pack.c:500 msgid "offset value overflow for delta base object" msgstr "Wert für Versatz bei Differenzobjekt übergelaufen" -#: builtin/index-pack.c:503 +#: builtin/index-pack.c:508 msgid "delta base offset is out of bound" msgstr "" "Wert für Versatz bei Differenzobjekt liegt außerhalb des gültigen Bereichs" -#: builtin/index-pack.c:511 +#: builtin/index-pack.c:516 #, c-format msgid "unknown object type %d" msgstr "Unbekannter Objekt-Typ %d" -#: builtin/index-pack.c:542 +#: builtin/index-pack.c:547 msgid "cannot pread pack file" msgstr "Kann Paketdatei %s nicht lesen" -#: builtin/index-pack.c:544 +#: builtin/index-pack.c:549 #, c-format msgid "premature end of pack file, %lu byte missing" msgid_plural "premature end of pack file, %lu bytes missing" msgstr[0] "frühzeitiges Ende der Paketdatei, vermisse %lu Byte" msgstr[1] "frühzeitiges Ende der Paketdatei, vermisse %lu Bytes" -#: builtin/index-pack.c:570 +#: builtin/index-pack.c:575 msgid "serious inflate inconsistency" msgstr "ernsthafte Inkonsistenz nach Dekomprimierung" -#: builtin/index-pack.c:661 builtin/index-pack.c:667 builtin/index-pack.c:690 -#: builtin/index-pack.c:724 builtin/index-pack.c:733 +#: builtin/index-pack.c:666 builtin/index-pack.c:672 builtin/index-pack.c:695 +#: builtin/index-pack.c:729 builtin/index-pack.c:738 #, c-format msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "SHA1 KOLLISION MIT %s GEFUNDEN !" -#: builtin/index-pack.c:664 builtin/pack-objects.c:170 +#: builtin/index-pack.c:669 builtin/pack-objects.c:170 #: builtin/pack-objects.c:262 #, c-format msgid "unable to read %s" msgstr "kann %s nicht lesen" -#: builtin/index-pack.c:730 +#: builtin/index-pack.c:735 #, c-format msgid "cannot read existing object %s" msgstr "Kann existierendes Objekt %s nicht lesen." -#: builtin/index-pack.c:744 +#: builtin/index-pack.c:749 #, c-format msgid "invalid blob object %s" msgstr "ungültiges Blob-Objekt %s" -#: builtin/index-pack.c:759 +#: builtin/index-pack.c:763 #, c-format msgid "invalid %s" msgstr "Ungültiger Objekt-Typ %s" -#: builtin/index-pack.c:761 +#: builtin/index-pack.c:766 msgid "Error in object" msgstr "Fehler in Objekt" -#: builtin/index-pack.c:763 +#: builtin/index-pack.c:768 #, c-format msgid "Not all child objects of %s are reachable" msgstr "Nicht alle Kind-Objekte von %s sind erreichbar" -#: builtin/index-pack.c:833 builtin/index-pack.c:863 +#: builtin/index-pack.c:838 builtin/index-pack.c:868 msgid "failed to apply delta" msgstr "Konnte Dateiunterschied nicht anwenden" -#: builtin/index-pack.c:1004 +#: builtin/index-pack.c:1009 msgid "Receiving objects" msgstr "Empfange Objekte" -#: builtin/index-pack.c:1004 +#: builtin/index-pack.c:1009 msgid "Indexing objects" msgstr "Indiziere Objekte" -#: builtin/index-pack.c:1030 +#: builtin/index-pack.c:1035 msgid "pack is corrupted (SHA1 mismatch)" msgstr "Paket ist beschädigt (SHA1 unterschiedlich)" -#: builtin/index-pack.c:1035 +#: builtin/index-pack.c:1040 msgid "cannot fstat packfile" msgstr "kann Paketdatei nicht lesen" -#: builtin/index-pack.c:1038 +#: builtin/index-pack.c:1043 msgid "pack has junk at the end" msgstr "Paketende enthält nicht verwendbaren Inhalt" -#: builtin/index-pack.c:1049 +#: builtin/index-pack.c:1054 msgid "confusion beyond insanity in parse_pack_objects()" msgstr "Fehler beim Ausführen von \"parse_pack_objects()\"" -#: builtin/index-pack.c:1072 +#: builtin/index-pack.c:1077 msgid "Resolving deltas" msgstr "Löse Unterschiede auf" -#: builtin/index-pack.c:1082 +#: builtin/index-pack.c:1087 #, c-format msgid "unable to create thread: %s" msgstr "kann Thread nicht erzeugen: %s" -#: builtin/index-pack.c:1124 +#: builtin/index-pack.c:1129 msgid "confusion beyond insanity" msgstr "Fehler beim Auflösen der Unterschiede" -#: builtin/index-pack.c:1132 +#: builtin/index-pack.c:1137 #, c-format msgid "completed with %d local objects" msgstr "vervollständigt mit %d lokalen Objekten" -#: builtin/index-pack.c:1142 +#: builtin/index-pack.c:1147 #, c-format msgid "Unexpected tail checksum for %s (disk corruption?)" msgstr "Unerwartete Prüfsumme für %s (Festplattenfehler?)" -#: builtin/index-pack.c:1146 +#: builtin/index-pack.c:1151 #, c-format msgid "pack has %d unresolved delta" msgid_plural "pack has %d unresolved deltas" msgstr[0] "Paket hat %d unaufgelöste Unterschied" msgstr[1] "Paket hat %d unaufgelöste Unterschiede" -#: builtin/index-pack.c:1171 +#: builtin/index-pack.c:1176 #, c-format msgid "unable to deflate appended object (%d)" msgstr "Konnte angehängtes Objekt (%d) nicht komprimieren" -#: builtin/index-pack.c:1250 +#: builtin/index-pack.c:1255 #, c-format msgid "local object %s is corrupt" msgstr "lokales Objekt %s ist beschädigt" -#: builtin/index-pack.c:1274 +#: builtin/index-pack.c:1279 msgid "error while closing pack file" msgstr "Fehler beim Schließen der Paketdatei" -#: builtin/index-pack.c:1287 +#: builtin/index-pack.c:1292 #, c-format msgid "cannot write keep file '%s'" msgstr "Kann Paketbeschreibungsdatei '%s' nicht schreiben" -#: builtin/index-pack.c:1295 +#: builtin/index-pack.c:1300 #, c-format msgid "cannot close written keep file '%s'" msgstr "Kann eben erstellte Paketbeschreibungsdatei '%s' nicht schließen" -#: builtin/index-pack.c:1308 +#: builtin/index-pack.c:1313 msgid "cannot store pack file" msgstr "Kann Paketdatei nicht speichern" -#: builtin/index-pack.c:1319 +#: builtin/index-pack.c:1324 msgid "cannot store index file" msgstr "Kann Indexdatei nicht speichern" -#: builtin/index-pack.c:1352 +#: builtin/index-pack.c:1357 #, c-format msgid "bad pack.indexversion=%<PRIu32>" msgstr "\"pack.indexversion=%<PRIu32>\" ist ungültig" -#: builtin/index-pack.c:1358 +#: builtin/index-pack.c:1363 #, c-format msgid "invalid number of threads specified (%d)" msgstr "ungültige Anzahl von Threads angegeben (%d)" -#: builtin/index-pack.c:1362 builtin/index-pack.c:1535 +#: builtin/index-pack.c:1367 builtin/index-pack.c:1545 #, c-format msgid "no threads support, ignoring %s" msgstr "keine Unterstützung von Threads, '%s' wird ignoriert" -#: builtin/index-pack.c:1420 +#: builtin/index-pack.c:1425 #, c-format msgid "Cannot open existing pack file '%s'" msgstr "Kann existierende Paketdatei '%s' nicht öffnen" -#: builtin/index-pack.c:1422 +#: builtin/index-pack.c:1427 #, c-format msgid "Cannot open existing pack idx file for '%s'" msgstr "Kann existierende Indexdatei für Paket '%s' nicht öffnen" -#: builtin/index-pack.c:1469 +#: builtin/index-pack.c:1474 #, c-format msgid "non delta: %d object" msgid_plural "non delta: %d objects" msgstr[0] "kein Unterschied: %d Objekt" msgstr[1] "kein Unterschied: %d Objekte" -#: builtin/index-pack.c:1476 +#: builtin/index-pack.c:1481 #, c-format msgid "chain length = %d: %lu object" msgid_plural "chain length = %d: %lu objects" msgstr[0] "Länge der Objekt-Liste = %d: %lu Objekt" msgstr[1] "Länge der Objekt-Liste = %d: %lu Objekte" -#: builtin/index-pack.c:1503 +#: builtin/index-pack.c:1509 msgid "Cannot come back to cwd" msgstr "Kann nicht zurück zu Arbeitsverzeichnis wechseln" -#: builtin/index-pack.c:1547 builtin/index-pack.c:1550 -#: builtin/index-pack.c:1562 builtin/index-pack.c:1566 +#: builtin/index-pack.c:1557 builtin/index-pack.c:1560 +#: builtin/index-pack.c:1572 builtin/index-pack.c:1576 #, c-format msgid "bad %s" msgstr "%s ist ungültig" -#: builtin/index-pack.c:1580 +#: builtin/index-pack.c:1590 msgid "--fix-thin cannot be used without --stdin" msgstr "Die Option --fix-thin kann nicht ohne --stdin verwendet werden." -#: builtin/index-pack.c:1584 builtin/index-pack.c:1594 +#: builtin/index-pack.c:1594 builtin/index-pack.c:1604 #, c-format msgid "packfile name '%s' does not end with '.pack'" msgstr "Name der Paketdatei '%s' endet nicht mit '.pack'" -#: builtin/index-pack.c:1603 +#: builtin/index-pack.c:1613 msgid "--verify with no packfile name given" msgstr "Die Option --verify wurde ohne Namen der Paketdatei angegeben." @@ -5773,17 +6009,17 @@ msgstr "kann Verzeichnis '%s' nicht öffnen" #: builtin/init-db.c:97 #, c-format msgid "cannot readlink '%s'" -msgstr "kann Verknüpfung '%s' nicht lesen" +msgstr "kann Verweis '%s' nicht lesen" #: builtin/init-db.c:99 #, c-format msgid "insanely long symlink %s" -msgstr "zu lange symbolische Verknüpfung %s" +msgstr "zu langer symbolischer Verweis %s" #: builtin/init-db.c:102 #, c-format msgid "cannot symlink '%s' '%s'" -msgstr "kann '%s' nicht mit '%s' symbolisch verknüpfen" +msgstr "kann symbolischen Verweis '%s' auf '%s' nicht erstellen" #: builtin/init-db.c:106 #, c-format @@ -5833,7 +6069,7 @@ msgstr "Konnte %s nicht nach %s verschieben" #: builtin/init-db.c:363 #, c-format msgid "Could not create git link %s" -msgstr "Konnte git-Verknüpfung %s nicht erstellen" +msgstr "Konnte git-Verweis %s nicht erstellen" #. #. * TRANSLATORS: The first '%s' is either "Reinitialized @@ -5843,7 +6079,7 @@ msgstr "Konnte git-Verknüpfung %s nicht erstellen" #: builtin/init-db.c:420 #, c-format msgid "%s%s Git repository in %s%s\n" -msgstr "%s%s Git-Projektarchiv in %s%s\n" +msgstr "%s%s Git-Repository in %s%s\n" #: builtin/init-db.c:421 msgid "Reinitialized existing" @@ -5875,10 +6111,9 @@ msgstr "Berechtigungen" #: builtin/init-db.c:491 msgid "specify that the git repository is to be shared amongst several users" -msgstr "" -"gibt an, dass das Git-Projektarchiv mit mehreren Benutzern geteilt wird" +msgstr "gibt an, dass das Git-Repository mit mehreren Benutzern geteilt wird" -#: builtin/init-db.c:493 builtin/prune-packed.c:77 +#: builtin/init-db.c:493 builtin/prune-packed.c:75 msgid "be quiet" msgstr "weniger Ausgaben" @@ -5908,368 +6143,385 @@ msgstr "Kann nicht auf aktuelles Arbeitsverzeichnis zugreifen." #: builtin/init-db.c:586 #, c-format msgid "Cannot access work tree '%s'" -msgstr "Kann nicht auf Arbeitsbaum '%s' zugreifen." +msgstr "Kann nicht auf Arbeitsverzeichnis '%s' zugreifen." -#: builtin/log.c:40 +#: builtin/log.c:41 msgid "git log [<options>] [<revision range>] [[--] <path>...]\n" -msgstr "git log [<Optionen>] [Revisionsbereich>] [[--] <Pfad>...]\n" +msgstr "git log [<Optionen>] [Commitbereich>] [[--] <Pfad>...]\n" -#: builtin/log.c:41 +#: builtin/log.c:42 msgid " or: git show [options] <object>..." msgstr " oder: git show [Optionen] <Objekt>..." -#: builtin/log.c:103 +#: builtin/log.c:124 msgid "suppress diff output" msgstr "unterdrückt Ausgabe der Unterschiede" -#: builtin/log.c:104 +#: builtin/log.c:125 msgid "show source" msgstr "zeigt Quelle" -#: builtin/log.c:105 +#: builtin/log.c:126 msgid "Use mail map file" msgstr "verwendet \"mailmap\"-Datei" -#: builtin/log.c:106 +#: builtin/log.c:127 msgid "decorate options" msgstr "decorate-Optionen" -#: builtin/log.c:199 +#: builtin/log.c:230 #, c-format msgid "Final output: %d %s\n" msgstr "letzte Ausgabe: %d %s\n" -#: builtin/log.c:422 builtin/log.c:514 +#: builtin/log.c:453 builtin/log.c:545 #, c-format msgid "Could not read object %s" msgstr "Kann Objekt %s nicht lesen." -#: builtin/log.c:538 +#: builtin/log.c:569 #, c-format msgid "Unknown type: %d" msgstr "Unbekannter Typ: %d" -#: builtin/log.c:638 +#: builtin/log.c:669 msgid "format.headers without value" msgstr "format.headers ohne Wert" -#: builtin/log.c:720 +#: builtin/log.c:751 msgid "name of output directory is too long" msgstr "Name des Ausgabeverzeichnisses ist zu lang." -#: builtin/log.c:736 +#: builtin/log.c:767 #, c-format msgid "Cannot open patch file %s" msgstr "Kann Patch-Datei %s nicht öffnen" -#: builtin/log.c:750 +#: builtin/log.c:781 msgid "Need exactly one range." -msgstr "Brauche genau einen Versionsbereich." +msgstr "Brauche genau einen Commit-Bereich." -#: builtin/log.c:758 +#: builtin/log.c:789 msgid "Not a range." -msgstr "Kein Versionsbereich." +msgstr "Kein Commit-Bereich." -#: builtin/log.c:860 +#: builtin/log.c:891 msgid "Cover letter needs email format" msgstr "Anschreiben benötigt E-Mail-Format" -#: builtin/log.c:936 +#: builtin/log.c:967 #, c-format msgid "insane in-reply-to: %s" msgstr "ungültiges in-reply-to: %s" -#: builtin/log.c:964 +#: builtin/log.c:995 msgid "git format-patch [options] [<since> | <revision range>]" -msgstr "git format-patch [Optionen] [<seit> | <Revisionsbereich>]" +msgstr "git format-patch [Optionen] [<seit> | <Commitbereich>]" -#: builtin/log.c:1009 +#: builtin/log.c:1040 msgid "Two output directories?" msgstr "Zwei Ausgabeverzeichnisse?" -#: builtin/log.c:1108 +#: builtin/log.c:1155 msgid "use [PATCH n/m] even with a single patch" msgstr "verwendet [PATCH n/m] auch mit einzelnem Patch" -#: builtin/log.c:1111 +#: builtin/log.c:1158 msgid "use [PATCH] even with multiple patches" msgstr "verwendet [PATCH] auch mit mehreren Patches" -#: builtin/log.c:1115 +#: builtin/log.c:1162 msgid "print patches to standard out" msgstr "Ausgabe der Patches in Standard-Ausgabe" -#: builtin/log.c:1117 +#: builtin/log.c:1164 msgid "generate a cover letter" msgstr "erzeugt ein Deckblatt" -#: builtin/log.c:1119 +#: builtin/log.c:1166 msgid "use simple number sequence for output file names" msgstr "verwendet einfache Nummernfolge für die Namen der Ausgabedateien" -#: builtin/log.c:1120 +#: builtin/log.c:1167 msgid "sfx" msgstr "Dateiendung" -#: builtin/log.c:1121 +#: builtin/log.c:1168 msgid "use <sfx> instead of '.patch'" msgstr "verwendet <Dateiendung> anstatt '.patch'" -#: builtin/log.c:1123 +#: builtin/log.c:1170 msgid "start numbering patches at <n> instead of 1" msgstr "beginnt die Nummerierung der Patches bei <n> anstatt bei 1" -#: builtin/log.c:1125 +#: builtin/log.c:1172 msgid "mark the series as Nth re-roll" msgstr "kennzeichnet die Serie als n-te Fassung" -#: builtin/log.c:1127 +#: builtin/log.c:1174 msgid "Use [<prefix>] instead of [PATCH]" msgstr "verwendet [<Prefix>] anstatt [PATCH]" -#: builtin/log.c:1130 +#: builtin/log.c:1177 msgid "store resulting files in <dir>" msgstr "speichert erzeugte Dateien in <Verzeichnis>" -#: builtin/log.c:1133 +#: builtin/log.c:1180 msgid "don't strip/add [PATCH]" msgstr "[PATCH] wird nicht entfernt/hinzugefügt" -#: builtin/log.c:1136 +#: builtin/log.c:1183 msgid "don't output binary diffs" msgstr "gibt keine binären Unterschiede aus" -#: builtin/log.c:1138 +#: builtin/log.c:1185 msgid "don't include a patch matching a commit upstream" msgstr "" -"schließt keine Patches ein, die einer Version im Ãœbernahmezweig entsprechen" +"schließt keine Patches ein, die einem Commit im Upstream-Branch entsprechen" -#: builtin/log.c:1140 +#: builtin/log.c:1187 msgid "show patch format instead of default (patch + stat)" msgstr "zeigt Patchformat anstatt des Standards (Patch + Zusammenfassung)" -#: builtin/log.c:1142 +#: builtin/log.c:1189 msgid "Messaging" msgstr "Email-Einstellungen" -#: builtin/log.c:1143 +#: builtin/log.c:1190 msgid "header" msgstr "Header" -#: builtin/log.c:1144 +#: builtin/log.c:1191 msgid "add email header" msgstr "fügt Email-Header hinzu" -#: builtin/log.c:1145 builtin/log.c:1147 +#: builtin/log.c:1192 builtin/log.c:1194 msgid "email" msgstr "Email" -#: builtin/log.c:1145 +#: builtin/log.c:1192 msgid "add To: header" msgstr "fügt \"To:\"-Header hinzu" -#: builtin/log.c:1147 +#: builtin/log.c:1194 msgid "add Cc: header" msgstr "fügt \"Cc:\"-Header hinzu" -#: builtin/log.c:1149 +#: builtin/log.c:1196 +msgid "ident" +msgstr "Ident" + +#: builtin/log.c:1197 +msgid "set From address to <ident> (or committer ident if absent)" +msgstr "" +"setzt \"From\"-Adresse auf <Ident> (oder Ident des Commit-Erstellers,wenn " +"fehlend)" + +#: builtin/log.c:1199 msgid "message-id" msgstr "message-id" -#: builtin/log.c:1150 +#: builtin/log.c:1200 msgid "make first mail a reply to <message-id>" msgstr "macht aus erster Email eine Antwort zu <message-id>" -#: builtin/log.c:1151 builtin/log.c:1154 +#: builtin/log.c:1201 builtin/log.c:1204 msgid "boundary" msgstr "Grenze" -#: builtin/log.c:1152 +#: builtin/log.c:1202 msgid "attach the patch" msgstr "hängt einen Patch an" -#: builtin/log.c:1155 +#: builtin/log.c:1205 msgid "inline the patch" msgstr "fügt den Patch direkt in die Nachricht ein" -#: builtin/log.c:1159 +#: builtin/log.c:1209 msgid "enable message threading, styles: shallow, deep" msgstr "aktiviert Nachrichtenverkettung, Stile: shallow, deep" -#: builtin/log.c:1161 +#: builtin/log.c:1211 msgid "signature" msgstr "Signatur" -#: builtin/log.c:1162 +#: builtin/log.c:1212 msgid "add a signature" msgstr "fügt eine Signatur hinzu" -#: builtin/log.c:1164 +#: builtin/log.c:1214 msgid "don't print the patch filenames" msgstr "zeigt keine Dateinamen der Patches" -#: builtin/log.c:1248 +#: builtin/log.c:1288 +#, c-format +msgid "invalid ident line: %s" +msgstr "Ungültige Identifikationszeile: %s" + +#: builtin/log.c:1303 msgid "-n and -k are mutually exclusive." msgstr "Die Optionen -n und -k schließen sich gegenseitig aus." -#: builtin/log.c:1250 +#: builtin/log.c:1305 msgid "--subject-prefix and -k are mutually exclusive." msgstr "Die Optionen --subject-prefix und -k schließen sich gegenseitig aus." -#: builtin/log.c:1258 +#: builtin/log.c:1313 msgid "--name-only does not make sense" msgstr "Die Option --name-only kann nicht verwendet werden." -#: builtin/log.c:1260 +#: builtin/log.c:1315 msgid "--name-status does not make sense" msgstr "Die Option --name-status kann nicht verwendet werden." -#: builtin/log.c:1262 +#: builtin/log.c:1317 msgid "--check does not make sense" msgstr "Die Option --check kann nicht verwendet werden." -#: builtin/log.c:1285 +#: builtin/log.c:1340 msgid "standard output, or directory, which one?" msgstr "Standard-Ausgabe oder Verzeichnis, welches von beidem?" -#: builtin/log.c:1287 +#: builtin/log.c:1342 #, c-format msgid "Could not create directory '%s'" msgstr "Konnte Verzeichnis '%s' nicht erstellen." -#: builtin/log.c:1435 +#: builtin/log.c:1490 msgid "Failed to create output files" msgstr "Fehler beim Erstellen der Ausgabedateien." -#: builtin/log.c:1484 +#: builtin/log.c:1539 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]" -msgstr "git cherry [-v] [<Ãœbernahmezweig> [<Arbeitszweig> [<Limit>]]]" +msgstr "git cherry [-v] [<Upstream> [<Branch> [<Limit>]]]" -#: builtin/log.c:1539 +#: builtin/log.c:1594 #, c-format msgid "" "Could not find a tracked remote branch, please specify <upstream> manually.\n" msgstr "" -"Konnte gefolgten, externen Zweig nicht finden, bitte geben Sie <upstream> " +"Konnte gefolgten Remote-Branch nicht finden, bitte geben Sie <Upstream> " "manuell an.\n" -#: builtin/log.c:1552 builtin/log.c:1554 builtin/log.c:1566 +#: builtin/log.c:1607 builtin/log.c:1609 builtin/log.c:1621 #, c-format msgid "Unknown commit %s" -msgstr "Unbekannte Version %s" +msgstr "Unbekannter Commit %s" -#: builtin/ls-files.c:402 +#: builtin/ls-files.c:408 msgid "git ls-files [options] [<file>...]" msgstr "git ls-files [Optionen] [<Datei>...]" -#: builtin/ls-files.c:459 +#: builtin/ls-files.c:465 msgid "identify the file status with tags" -msgstr "zeigt den Dateistatus mit Markierungen" +msgstr "zeigt den Dateistatus mit Tags" -#: builtin/ls-files.c:461 +#: builtin/ls-files.c:467 msgid "use lowercase letters for 'assume unchanged' files" msgstr "" "verwendet Kleinbuchstaben für Dateien mit 'assume unchanged' Markierung" -#: builtin/ls-files.c:463 +#: builtin/ls-files.c:469 msgid "show cached files in the output (default)" msgstr "zeigt zwischengespeicherten Dateien in der Ausgabe an (Standard)" -#: builtin/ls-files.c:465 +#: builtin/ls-files.c:471 msgid "show deleted files in the output" msgstr "zeigt entfernte Dateien in der Ausgabe an" -#: builtin/ls-files.c:467 +#: builtin/ls-files.c:473 msgid "show modified files in the output" msgstr "zeigt geänderte Dateien in der Ausgabe an" -#: builtin/ls-files.c:469 +#: builtin/ls-files.c:475 msgid "show other files in the output" msgstr "zeigt sonstige Dateien in der Ausgabe an" -#: builtin/ls-files.c:471 +#: builtin/ls-files.c:477 msgid "show ignored files in the output" msgstr "zeigt ignorierte Dateien in der Ausgabe an" -#: builtin/ls-files.c:474 +#: builtin/ls-files.c:480 msgid "show staged contents' object name in the output" -msgstr "zeigt Objektnamen von Inhalten in der Bereitstellung in der Ausgabe an" +msgstr "" +"zeigt Objektnamen von Inhalten, die zum Commit vorgemerkt sind, in der " +"Ausgabe an" -#: builtin/ls-files.c:476 +#: builtin/ls-files.c:482 msgid "show files on the filesystem that need to be removed" msgstr "zeigt Dateien im Dateisystem, die gelöscht werden müssen, an" -#: builtin/ls-files.c:478 +#: builtin/ls-files.c:484 msgid "show 'other' directories' name only" msgstr "zeigt nur Namen von 'sonstigen' Verzeichnissen an" -#: builtin/ls-files.c:481 +#: builtin/ls-files.c:487 msgid "don't show empty directories" msgstr "zeigt keine leeren Verzeichnisse an" -#: builtin/ls-files.c:484 +#: builtin/ls-files.c:490 msgid "show unmerged files in the output" msgstr "zeigt nicht zusammengeführte Dateien in der Ausgabe an" -#: builtin/ls-files.c:486 +#: builtin/ls-files.c:492 msgid "show resolve-undo information" msgstr "zeigt 'resolve-undo' Informationen an" -#: builtin/ls-files.c:488 +#: builtin/ls-files.c:494 msgid "skip files matching pattern" msgstr "lässt Dateien aus, die einem Muster entsprechen" -#: builtin/ls-files.c:491 +#: builtin/ls-files.c:497 msgid "exclude patterns are read from <file>" msgstr "schließt Muster, gelesen von <Datei>, aus" -#: builtin/ls-files.c:494 +#: builtin/ls-files.c:500 msgid "read additional per-directory exclude patterns in <file>" msgstr "liest zusätzliche pro-Verzeichnis Auschlussmuster aus <Datei>" -#: builtin/ls-files.c:496 +#: builtin/ls-files.c:502 msgid "add the standard git exclusions" msgstr "fügt die standardmäßigen Git-Ausschlüsse hinzu" -#: builtin/ls-files.c:499 +#: builtin/ls-files.c:505 msgid "make the output relative to the project top directory" msgstr "Ausgabe relativ zum Projektverzeichnis" -#: builtin/ls-files.c:502 +#: builtin/ls-files.c:508 msgid "if any <file> is not in the index, treat this as an error" msgstr "" -"behandle es als Fehler, wenn sich eine <Datei> nicht in der Bereitstellung " +"behandle es als Fehler, wenn sich eine <Datei> nicht in der Staging-Area " "befindet" -#: builtin/ls-files.c:503 +#: builtin/ls-files.c:509 msgid "tree-ish" -msgstr "Versionsreferenz" +msgstr "Commit-Referenz" -#: builtin/ls-files.c:504 +#: builtin/ls-files.c:510 msgid "pretend that paths removed since <tree-ish> are still present" msgstr "" -"gibt vor, dass Pfade, die seit <Versionsreferenz> gelöscht wurden, immer " -"noch vorhanden sind" +"gibt vor, dass Pfade, die seit <Commit-Referenz> gelöscht wurden, immer noch " +"vorhanden sind" -#: builtin/ls-files.c:506 +#: builtin/ls-files.c:512 msgid "show debugging data" msgstr "zeigt Ausgaben zur Fehlersuche an" #: builtin/ls-tree.c:27 msgid "git ls-tree [<options>] <tree-ish> [<path>...]" -msgstr "git ls-tree [<Optionen>] <Versionsreferenz> [<Pfad>...]" +msgstr "git ls-tree [<Optionen>] <Commit-Referenz> [<Pfad>...]" #: builtin/ls-tree.c:125 msgid "only show trees" -msgstr "zeigt nur Bäume an" +msgstr "zeigt nur Verzeichnisse an" #: builtin/ls-tree.c:127 msgid "recurse into subtrees" -msgstr "führt Rekursion in Teilbäumen durch" +msgstr "führt Rekursion in Unterverzeichnissen durch" #: builtin/ls-tree.c:129 msgid "show trees when recursing" -msgstr "zeigt Bäume bei Rekursion an" +msgstr "zeigt Verzeichnisse bei Rekursion an" #: builtin/ls-tree.c:132 msgid "terminate entries with NUL byte" @@ -6290,195 +6542,187 @@ msgstr "verwendet vollständige Pfadnamen" #: builtin/ls-tree.c:142 msgid "list entire tree; not just current directory (implies --full-name)" msgstr "" -"listet den gesamten Baum auf; nicht nur das aktuelle Verzeichnis (impliziert " -"--full-name)" +"listet das gesamte Verzeichnis auf; nicht nur das aktuelle Verzeichnis " +"(impliziert --full-name)" #: builtin/merge.c:43 msgid "git merge [options] [<commit>...]" -msgstr "git merge [Optionen] [<Version>...]" +msgstr "git merge [Optionen] [<Commit>...]" #: builtin/merge.c:44 msgid "git merge [options] <msg> HEAD <commit>" -msgstr "git merge [Optionen] <Beschreibung> HEAD <Version>" +msgstr "git merge [Optionen] <Beschreibung> HEAD <Commit>" #: builtin/merge.c:45 msgid "git merge --abort" msgstr "git merge --abort" -#: builtin/merge.c:90 +#: builtin/merge.c:98 msgid "switch `m' requires a value" msgstr "Schalter 'm' erfordert einen Wert." -#: builtin/merge.c:127 +#: builtin/merge.c:135 #, c-format msgid "Could not find merge strategy '%s'.\n" -msgstr "Konnte Zusammenführungsstrategie '%s' nicht finden.\n" +msgstr "Konnte Merge-Strategie '%s' nicht finden.\n" -#: builtin/merge.c:128 +#: builtin/merge.c:136 #, c-format msgid "Available strategies are:" msgstr "Verfügbare Strategien sind:" -#: builtin/merge.c:133 +#: builtin/merge.c:141 #, c-format msgid "Available custom strategies are:" msgstr "Verfügbare benutzerdefinierte Strategien sind:" -#: builtin/merge.c:183 +#: builtin/merge.c:198 msgid "do not show a diffstat at the end of the merge" -msgstr "" -"zeigt keine Zusammenfassung der Unterschiede am Schluss der Zusammenführung " -"an" +msgstr "zeigt keine Zusammenfassung der Unterschiede am Schluss des Merges an" -#: builtin/merge.c:186 +#: builtin/merge.c:201 msgid "show a diffstat at the end of the merge" -msgstr "" -"zeigt eine Zusammenfassung der Unterschiede am Schluss der Zusammenführung an" +msgstr "zeigt eine Zusammenfassung der Unterschiede am Schluss des Merges an" -#: builtin/merge.c:187 +#: builtin/merge.c:202 msgid "(synonym to --stat)" msgstr "(Synonym für --stat)" -#: builtin/merge.c:189 +#: builtin/merge.c:204 msgid "add (at most <n>) entries from shortlog to merge commit message" msgstr "" -"fügt (höchstens <n>) Einträge von \"shortlog\" zur Beschreibung der " -"Zusammenführung hinzu" +"fügt (höchstens <n>) Einträge von \"shortlog\" zur Beschreibung des Merge-" +"Commits hinzu" -#: builtin/merge.c:192 +#: builtin/merge.c:207 msgid "create a single commit instead of doing a merge" -msgstr "erzeugt eine einzelne Version anstatt einer Zusammenführung" +msgstr "erzeugt einen einzelnen Commit anstatt eines Merges" -#: builtin/merge.c:194 +#: builtin/merge.c:209 msgid "perform a commit if the merge succeeds (default)" -msgstr "" -"führt eine Eintragung durch, wenn die Zusammenführung erfolgreich war " -"(Standard)" +msgstr "führt einen Commit durch, wenn der Merge erfolgreich war (Standard)" -#: builtin/merge.c:196 +#: builtin/merge.c:211 msgid "edit message before committing" -msgstr "Bearbeitung der Versionsbeschreibung vor der Eintragung" +msgstr "Bearbeitung der Beschreibung vor dem Commit" -#: builtin/merge.c:198 +#: builtin/merge.c:212 msgid "allow fast-forward (default)" msgstr "erlaubt Vorspulen (Standard)" -#: builtin/merge.c:200 +#: builtin/merge.c:214 msgid "abort if fast-forward is not possible" msgstr "bricht ab, wenn kein Vorspulen möglich ist" -#: builtin/merge.c:203 +#: builtin/merge.c:218 msgid "Verify that the named commit has a valid GPG signature" -msgstr "überprüft die genannte Version auf eine gültige GPG-Signatur" +msgstr "überprüft den genannten Commit auf eine gültige GPG-Signatur" -#: builtin/merge.c:204 builtin/notes.c:866 builtin/revert.c:112 +#: builtin/merge.c:219 builtin/notes.c:738 builtin/revert.c:114 msgid "strategy" msgstr "Strategie" -#: builtin/merge.c:205 +#: builtin/merge.c:220 msgid "merge strategy to use" -msgstr "zu verwendende Zusammenführungsstrategie" +msgstr "zu verwendende Merge-Strategie" -#: builtin/merge.c:206 +#: builtin/merge.c:221 msgid "option=value" msgstr "Option=Wert" -#: builtin/merge.c:207 +#: builtin/merge.c:222 msgid "option for selected merge strategy" -msgstr "Option für ausgewählte Zusammenführungsstrategie" +msgstr "Option für ausgewählte Merge-Strategie" -#: builtin/merge.c:209 +#: builtin/merge.c:224 msgid "merge commit message (for a non-fast-forward merge)" msgstr "" -"führt Versionsbeschreibung zusammen (für eine Zusammenführung, die kein " -"Vorspulen war)" +"führt Commit-Beschreibung zusammen (für einen Merge, der kein Vorspulen war)" -#: builtin/merge.c:213 +#: builtin/merge.c:228 msgid "abort the current in-progress merge" -msgstr "bricht die sich im Gange befindliche Zusammenführung ab" +msgstr "bricht den sich im Gange befindlichen Merge ab" -#: builtin/merge.c:242 +#: builtin/merge.c:257 msgid "could not run stash." msgstr "Konnte \"stash\" nicht ausführen." -#: builtin/merge.c:247 +#: builtin/merge.c:262 msgid "stash failed" msgstr "\"stash\" fehlgeschlagen" -#: builtin/merge.c:252 +#: builtin/merge.c:267 #, c-format msgid "not a valid object: %s" msgstr "kein gültiges Objekt: %s" -#: builtin/merge.c:271 builtin/merge.c:288 +#: builtin/merge.c:286 builtin/merge.c:303 msgid "read-tree failed" msgstr "read-tree fehlgeschlagen" -#: builtin/merge.c:318 +#: builtin/merge.c:333 msgid " (nothing to squash)" msgstr " (nichts zu quetschen)" -#: builtin/merge.c:331 +#: builtin/merge.c:346 #, c-format msgid "Squash commit -- not updating HEAD\n" -msgstr "Quetsche Version -- Zweigspitze (HEAD) wird nicht aktualisiert\n" +msgstr "Quetsche Commit -- HEAD wird nicht aktualisiert\n" -#: builtin/merge.c:363 +#: builtin/merge.c:378 msgid "Writing SQUASH_MSG" msgstr "Schreibe SQUASH_MSG" -#: builtin/merge.c:365 +#: builtin/merge.c:380 msgid "Finishing SQUASH_MSG" msgstr "Schließe SQUASH_MSG ab" -#: builtin/merge.c:388 +#: builtin/merge.c:403 #, c-format msgid "No merge message -- not updating HEAD\n" -msgstr "" -"Keine Zusammenführungsbeschreibung -- Zweigspitze (HEAD) wird nicht " -"aktualisiert\n" +msgstr "Keine Merge-Commit-Beschreibung -- HEAD wird nicht aktualisiert\n" -#: builtin/merge.c:438 +#: builtin/merge.c:453 #, c-format msgid "'%s' does not point to a commit" -msgstr "'%s' zeigt auf keine Version" +msgstr "'%s' zeigt auf keinen Commit" -#: builtin/merge.c:550 +#: builtin/merge.c:565 #, c-format msgid "Bad branch.%s.mergeoptions string: %s" msgstr "Ungültiger branch.%s.mergeoptions String: %s" -#: builtin/merge.c:643 +#: builtin/merge.c:657 msgid "git write-tree failed to write a tree" -msgstr "\"git write-tree\" schlug beim Schreiben eines Baumes fehl" +msgstr "\"git write-tree\" schlug beim Schreiben eines \"Tree\"-Objektes fehl" -#: builtin/merge.c:671 +#: builtin/merge.c:685 msgid "Not handling anything other than two heads merge." -msgstr "Es wird nur die Zusammenführung von zwei Zweigen behandelt." +msgstr "Es wird nur der Merge von zwei Branches behandelt." -#: builtin/merge.c:685 +#: builtin/merge.c:699 #, c-format msgid "Unknown option for merge-recursive: -X%s" msgstr "Unbekannte Option für merge-recursive: -X%s" -#: builtin/merge.c:699 +#: builtin/merge.c:713 #, c-format msgid "unable to write %s" msgstr "konnte %s nicht schreiben" -#: builtin/merge.c:788 +#: builtin/merge.c:802 #, c-format msgid "Could not read from '%s'" msgstr "konnte nicht von '%s' lesen" -#: builtin/merge.c:797 +#: builtin/merge.c:811 #, c-format msgid "Not committing merge; use 'git commit' to complete the merge.\n" msgstr "" -"Zusammenführung wurde nicht eingetragen; benutzen Sie 'git commit' um die " -"Zusammenführung abzuschließen.\n" +"Merge wurde nicht committet; benutzen Sie 'git commit' um den Merge " +"abzuschließen.\n" -#: builtin/merge.c:803 +#: builtin/merge.c:817 #, c-format msgid "" "Please enter a commit message to explain why this merge is necessary,\n" @@ -6487,219 +6731,212 @@ msgid "" "Lines starting with '%c' will be ignored, and an empty message aborts\n" "the commit.\n" msgstr "" -"Bitte geben Sie eine Versionsbeschreibung ein um zu erklären, warum diese " -"Zusammenführung erforderlich ist,\n" -"insbesondere wenn es einen aktualisierten, externen Zweig mit einem Thema-" -"Zweig zusammenführt.\n" +"Bitte geben Sie eine Commit-Beschreibung ein um zu erklären, warum dieser\n" +"Merge erforderlich ist, insbesondere wenn es einen aktualisierten\n" +"Upstream-Branch mit einem Thema-Branch zusammenführt.\n" "\n" -"Zeilen beginnend mit '%c' werden ignoriert, und eine leere Beschreibung " -"bricht die Eintragung ab.\n" +"Zeilen beginnend mit '%c' werden ignoriert, und eine leere Beschreibung\n" +"bricht den Commit ab.\n" -#: builtin/merge.c:827 +#: builtin/merge.c:841 msgid "Empty commit message." -msgstr "Leere Versionsbeschreibung" +msgstr "Leere Commit-Beschreibung" -#: builtin/merge.c:839 +#: builtin/merge.c:853 #, c-format msgid "Wonderful.\n" msgstr "Wunderbar.\n" -#: builtin/merge.c:904 +#: builtin/merge.c:918 #, c-format msgid "Automatic merge failed; fix conflicts and then commit the result.\n" msgstr "" -"Automatische Zusammenführung fehlgeschlagen; beheben Sie die Konflikte und " -"tragen Sie dann das Ergebnis ein.\n" +"Automatischer Merge fehlgeschlagen; beheben Sie die Konflikte und committen " +"Sie dann das Ergebnis.\n" -#: builtin/merge.c:920 +#: builtin/merge.c:934 #, c-format msgid "'%s' is not a commit" -msgstr "'%s' ist keine Version" +msgstr "'%s' ist kein Commit" -#: builtin/merge.c:961 +#: builtin/merge.c:975 msgid "No current branch." -msgstr "Sie befinden sich auf keinem Zweig." +msgstr "Sie befinden sich auf keinem Branch." -#: builtin/merge.c:963 +#: builtin/merge.c:977 msgid "No remote for the current branch." -msgstr "Kein externes Archiv für den aktuellen Zweig." +msgstr "Kein Remote-Repository für den aktuellen Branch." -#: builtin/merge.c:965 +#: builtin/merge.c:979 msgid "No default upstream defined for the current branch." msgstr "" -"Es ist kein externes Standard-Projektarchiv für den aktuellen Zweig " -"definiert." +"Es ist kein Standard-Upstream-Branch für den aktuellen Branch definiert." -#: builtin/merge.c:970 +#: builtin/merge.c:984 #, c-format -msgid "No remote tracking branch for %s from %s" -msgstr "Kein externer Ãœbernahmezweig für %s von %s" +msgid "No remote-tracking branch for %s from %s" +msgstr "Kein Remote-Tracking-Branch für %s von %s" -#: builtin/merge.c:1057 builtin/merge.c:1214 -#, c-format -msgid "%s - not something we can merge" -msgstr "%s - nichts was wir zusammenführen können" - -#: builtin/merge.c:1125 +#: builtin/merge.c:1140 msgid "There is no merge to abort (MERGE_HEAD missing)." -msgstr "Es gibt keine Zusammenführung zum Abbrechen (vermisse MERGE_HEAD)" +msgstr "Es gibt keinen Merge zum Abbrechen (vermisse MERGE_HEAD)" -#: builtin/merge.c:1141 git-pull.sh:31 +#: builtin/merge.c:1156 git-pull.sh:31 msgid "" "You have not concluded your merge (MERGE_HEAD exists).\n" "Please, commit your changes before you can merge." msgstr "" -"Sie haben Ihre Zusammenführung nicht abgeschlossen (MERGE_HEAD existiert).\n" -"Bitte tragen Sie Ihre Änderungen ein, bevor Sie zusammenführen können." +"Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert).\n" +"Bitte committen Sie Ihre Änderungen, bevor Sie \"merge\" ausführen können." -#: builtin/merge.c:1144 git-pull.sh:34 +#: builtin/merge.c:1159 git-pull.sh:34 msgid "You have not concluded your merge (MERGE_HEAD exists)." -msgstr "" -"Sie haben Ihre Zusammenführung nicht abgeschlossen (MERGE_HEAD existiert)." +msgstr "Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert)." -#: builtin/merge.c:1148 +#: builtin/merge.c:1163 msgid "" "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" "Please, commit your changes before you can merge." msgstr "" "Sie haben \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD existiert).\n" -"Bitte tragen Sie Ihre Änderungen ein, bevor Sie zusammenführen können." +"Bitte committen Sie Ihre Änderungen, bevor Sie \"merge\" ausführen können." -#: builtin/merge.c:1151 +#: builtin/merge.c:1166 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." msgstr "" "Sie haben \"cherry-pick\" nicht abgeschlossen (CHERRY_PICK_HEAD existiert)." -#: builtin/merge.c:1160 +#: builtin/merge.c:1175 msgid "You cannot combine --squash with --no-ff." msgstr "Sie können --squash nicht mit --no-ff kombinieren." -#: builtin/merge.c:1165 -msgid "You cannot combine --no-ff with --ff-only." -msgstr "Sie können --no-ff nicht mit --ff--only kombinieren." - -#: builtin/merge.c:1172 +#: builtin/merge.c:1184 msgid "No commit specified and merge.defaultToUpstream not set." -msgstr "Keine Version angegeben und merge.defaultToUpstream ist nicht gesetzt." +msgstr "Kein Commit angegeben und merge.defaultToUpstream ist nicht gesetzt." -#: builtin/merge.c:1204 +#: builtin/merge.c:1216 msgid "Can merge only exactly one commit into empty head" -msgstr "Kann nur exakt eine Version in einem leeren Zweig zusammenführen." +msgstr "Kann nur exakt einen Commit in einem leeren Branch zusammenführen." -#: builtin/merge.c:1207 +#: builtin/merge.c:1219 msgid "Squash commit into empty head not supported yet" -msgstr "Bin auf einem Zweig, der noch geboren wird; kann nicht quetschen." +msgstr "" +"Bin auf einem Commit, der noch geboren wird; kann \"squash\" nicht ausführen." -#: builtin/merge.c:1209 +#: builtin/merge.c:1221 msgid "Non-fast-forward commit does not make sense into an empty head" msgstr "" -"Nicht vorzuspulende Version kann nicht in einem leeren Zweig verwendet " +"Nicht vorzuspulender Commit kann nicht in einem leeren Branch verwendet " "werden." -#: builtin/merge.c:1265 +#: builtin/merge.c:1226 +#, c-format +msgid "%s - not something we can merge" +msgstr "%s - nichts was wir zusammenführen können" + +#: builtin/merge.c:1277 #, c-format msgid "Commit %s has an untrusted GPG signature, allegedly by %s." msgstr "" -"Version %s hat eine nicht vertrauenswürdige GPG-Signatur, angeblich von %s." +"Commit %s hat eine nicht vertrauenswürdige GPG-Signatur, angeblich von %s." -#: builtin/merge.c:1268 +#: builtin/merge.c:1280 #, c-format msgid "Commit %s has a bad GPG signature allegedly by %s." -msgstr "Version %s hat eine ungültige GPG-Signatur, angeblich von %s." +msgstr "Commit %s hat eine ungültige GPG-Signatur, angeblich von %s." #. 'N' -#: builtin/merge.c:1271 +#: builtin/merge.c:1283 #, c-format msgid "Commit %s does not have a GPG signature." -msgstr "Version %s hat keine GPG-Signatur." +msgstr "Commit %s hat keine GPG-Signatur." -#: builtin/merge.c:1274 +#: builtin/merge.c:1286 #, c-format msgid "Commit %s has a good GPG signature by %s\n" -msgstr "Version %s hat eine gültige GPG-Signatur von %s\n" +msgstr "Commit %s hat eine gültige GPG-Signatur von %s\n" -#: builtin/merge.c:1358 +#: builtin/merge.c:1370 #, c-format msgid "Updating %s..%s\n" msgstr "Aktualisiere %s..%s\n" -#: builtin/merge.c:1397 +#: builtin/merge.c:1409 #, c-format msgid "Trying really trivial in-index merge...\n" -msgstr "Probiere wirklich triviale \"in-index\"-Zusammenführung...\n" +msgstr "Probiere wirklich trivialen \"in-index\"-Merge...\n" -#: builtin/merge.c:1404 +#: builtin/merge.c:1416 #, c-format msgid "Nope.\n" msgstr "Nein.\n" -#: builtin/merge.c:1436 +#: builtin/merge.c:1448 msgid "Not possible to fast-forward, aborting." msgstr "Vorspulen nicht möglich, breche ab." -#: builtin/merge.c:1459 builtin/merge.c:1538 +#: builtin/merge.c:1471 builtin/merge.c:1550 #, c-format msgid "Rewinding the tree to pristine...\n" -msgstr "Rücklauf des Zweiges bis zum Ursprung...\n" +msgstr "Rücklauf des Verzeichnisses bis zum Ursprung...\n" -#: builtin/merge.c:1463 +#: builtin/merge.c:1475 #, c-format msgid "Trying merge strategy %s...\n" -msgstr "Probiere Zusammenführungsstrategie %s...\n" +msgstr "Probiere Merge-Strategie %s...\n" -#: builtin/merge.c:1529 +#: builtin/merge.c:1541 #, c-format msgid "No merge strategy handled the merge.\n" -msgstr "Keine Zusammenführungsstrategie behandelt diese Zusammenführung.\n" +msgstr "Keine Merge-Strategie behandelt diesen Merge.\n" -#: builtin/merge.c:1531 +#: builtin/merge.c:1543 #, c-format msgid "Merge with strategy %s failed.\n" -msgstr "Zusammenführung mit Strategie %s fehlgeschlagen.\n" +msgstr "Merge mit Strategie %s fehlgeschlagen.\n" -#: builtin/merge.c:1540 +#: builtin/merge.c:1552 #, c-format msgid "Using the %s to prepare resolving by hand.\n" msgstr "Benutzen Sie \"%s\" um die Auflösung per Hand vorzubereiten.\n" -#: builtin/merge.c:1552 +#: builtin/merge.c:1564 #, c-format msgid "Automatic merge went well; stopped before committing as requested\n" msgstr "" -"Automatische Zusammenführung abgeschlossen; halte, wie gewünscht, vor der " -"Eintragung an\n" +"Automatischer Merge abgeschlossen; halte, wie gewünscht, vor dem Commit an\n" #: builtin/merge-base.c:26 msgid "git merge-base [-a|--all] <commit> <commit>..." -msgstr "git merge-base [-a|--all] <Version> <Version>..." +msgstr "git merge-base [-a|--all] <Commit> <Commit>..." #: builtin/merge-base.c:27 msgid "git merge-base [-a|--all] --octopus <commit>..." -msgstr "git merge-base [-a|--all] --octopus <Version>..." +msgstr "git merge-base [-a|--all] --octopus <Commit>..." #: builtin/merge-base.c:28 msgid "git merge-base --independent <commit>..." -msgstr "git merge-base --independent <Version>..." +msgstr "git merge-base --independent <Commit>..." #: builtin/merge-base.c:29 msgid "git merge-base --is-ancestor <commit> <commit>" -msgstr "git merge-base --is-ancestor <Version> <Version>" +msgstr "git merge-base --is-ancestor <Commit> <Commit>" #: builtin/merge-base.c:98 msgid "output all common ancestors" -msgstr "Ausgabe aller gemeinsamen Vorfahren" +msgstr "Ausgabe aller gemeinsamen Vorgänger-Commits" #: builtin/merge-base.c:99 msgid "find ancestors for a single n-way merge" -msgstr "findet Vorfahren für eine einzelne n-Wege-Zusammenführung" +msgstr "findet Vorgänger-Commits für einen einzelnen n-Wege-Merge" #: builtin/merge-base.c:100 msgid "list revs not reachable from others" -msgstr "listet Versionen auf, die nicht durch Andere erreichbar sind" +msgstr "listet Commits auf, die nicht durch Andere erreichbar sind" #: builtin/merge-base.c:102 msgid "is the first one ancestor of the other?" -msgstr "ist der Erste ein Vorfahre von dem Anderen?" +msgstr "ist der Erste ein Vorgänger-Commit von dem Anderen?" #: builtin/merge-file.c:8 msgid "" @@ -6715,7 +6952,7 @@ msgstr "sendet Ergebnisse zur Standard-Ausgabe" #: builtin/merge-file.c:34 msgid "use a diff3 based merge" -msgstr "verwendet eine diff3 basierte Zusammenführung" +msgstr "verwendet einen diff3 basierten Merge" #: builtin/merge-file.c:35 msgid "for conflicts, use our version" @@ -6755,7 +6992,7 @@ msgstr "erlaubt fehlende Objekte" #: builtin/mktree.c:155 msgid "allow creation of more than one tree" -msgstr "erlaubt die Erstellung von mehr als einem Baum" +msgstr "erlaubt die Erstellung von mehr als einem \"Tree\"-Objekt" #: builtin/mv.c:14 msgid "git mv [options] <source>... <destination>" @@ -6789,7 +7026,7 @@ msgstr "kann Verzeichnis nicht über Datei verschieben" #: builtin/mv.c:128 #, c-format msgid "Huh? %.*s is in index?" -msgstr "Huh? %.*s ist in der Bereitstellung?" +msgstr "Huh? %.*s ist zum Commit vorgemerkt?" #: builtin/mv.c:140 msgid "source directory is empty" @@ -6831,47 +7068,51 @@ msgstr "Benenne %s nach %s um\n" msgid "renaming '%s' failed" msgstr "Umbenennung von '%s' fehlgeschlagen" -#: builtin/name-rev.c:175 +#: builtin/name-rev.c:259 msgid "git name-rev [options] <commit>..." -msgstr "git name-rev [Optionen] <Version>..." +msgstr "git name-rev [Optionen] <Commit>..." -#: builtin/name-rev.c:176 +#: builtin/name-rev.c:260 msgid "git name-rev [options] --all" msgstr "git name-rev [Optionen] --all" -#: builtin/name-rev.c:177 +#: builtin/name-rev.c:261 msgid "git name-rev [options] --stdin" msgstr "git name-rev [Optionen] --stdin" -#: builtin/name-rev.c:229 +#: builtin/name-rev.c:313 msgid "print only names (no SHA-1)" msgstr "zeigt nur Namen an (keine SHA-1)" -#: builtin/name-rev.c:230 +#: builtin/name-rev.c:314 msgid "only use tags to name the commits" -msgstr "verwendet nur Markierungen um die Versionen zu benennen" +msgstr "verwendet nur Tags um die Commits zu benennen" -#: builtin/name-rev.c:232 +#: builtin/name-rev.c:316 msgid "only use refs matching <pattern>" msgstr "verwendet nur Referenzen die <Muster> entsprechen" -#: builtin/name-rev.c:234 +#: builtin/name-rev.c:318 msgid "list all commits reachable from all refs" -msgstr "listet alle Versionen auf, die von allen Referenzen erreichbar sind" +msgstr "listet alle Commits auf, die von allen Referenzen erreichbar sind" -#: builtin/name-rev.c:235 +#: builtin/name-rev.c:319 msgid "read from stdin" msgstr "liest von der Standard-Eingabe" -#: builtin/name-rev.c:236 +#: builtin/name-rev.c:320 msgid "allow to print `undefined` names" msgstr "erlaubt Ausgabe von `undefinierten` Namen" -#: builtin/notes.c:26 +#: builtin/name-rev.c:326 +msgid "dereference tags in the input (internal use)" +msgstr "dereferenziert Tags in der Eingabe (interne Verwendung)" + +#: builtin/notes.c:24 msgid "git notes [--ref <notes_ref>] [list [<object>]]" msgstr "git notes [--ref <Notiz-Referenz>] [list [<Objekt>]]" -#: builtin/notes.c:27 +#: builtin/notes.c:25 msgid "" "git notes [--ref <notes_ref>] add [-f] [-m <msg> | -F <file> | (-c | -C) " "<object>] [<object>]" @@ -6879,12 +7120,12 @@ msgstr "" "git notes [--ref <Notiz-Referenz>] add [-f] [-m <Nachricht> | -F <Datei> | (-" "c | -C) <Objekt>] [<Objekt>]" -#: builtin/notes.c:28 +#: builtin/notes.c:26 msgid "git notes [--ref <notes_ref>] copy [-f] <from-object> <to-object>" msgstr "" "git notes [--ref <Notiz-Referenz>] copy [-f] <von-Objekt> <nach-Objekt>" -#: builtin/notes.c:29 +#: builtin/notes.c:27 msgid "" "git notes [--ref <notes_ref>] append [-m <msg> | -F <file> | (-c | -C) " "<object>] [<object>]" @@ -6892,223 +7133,201 @@ msgstr "" "git notes [--ref <Notiz-Referenz>] append [-m <Nachricht> | -F <Datei> | (-c " "| -C) <Objekt>] [<Objekt>]" -#: builtin/notes.c:30 +#: builtin/notes.c:28 msgid "git notes [--ref <notes_ref>] edit [<object>]" msgstr "git notes [--ref <Notiz-Referenz>] edit [<Objekt>]" -#: builtin/notes.c:31 +#: builtin/notes.c:29 msgid "git notes [--ref <notes_ref>] show [<object>]" msgstr "git notes [--ref <Notiz-Referenz>] show [<Objekt>]" -#: builtin/notes.c:32 +#: builtin/notes.c:30 msgid "" "git notes [--ref <notes_ref>] merge [-v | -q] [-s <strategy> ] <notes_ref>" msgstr "" "git notes [--ref <Notiz-Referenz>] merge [-v | -q] [-s <Strategie> ] <Notiz-" "Referenz>" -#: builtin/notes.c:33 +#: builtin/notes.c:31 msgid "git notes merge --commit [-v | -q]" msgstr "git notes merge --commit [-v | -q]" -#: builtin/notes.c:34 +#: builtin/notes.c:32 msgid "git notes merge --abort [-v | -q]" msgstr "git notes merge --abort [-v | -q]" -#: builtin/notes.c:35 +#: builtin/notes.c:33 msgid "git notes [--ref <notes_ref>] remove [<object>...]" msgstr "git notes [--ref <Notiz-Referenz>] remove [<Objekt>...]" -#: builtin/notes.c:36 +#: builtin/notes.c:34 msgid "git notes [--ref <notes_ref>] prune [-n | -v]" msgstr "git notes [--ref <Notiz-Referenz>] prune [-n | -v]" -#: builtin/notes.c:37 +#: builtin/notes.c:35 msgid "git notes [--ref <notes_ref>] get-ref" msgstr "git notes [--ref <Notiz-Referenz>] get-ref" -#: builtin/notes.c:42 +#: builtin/notes.c:40 msgid "git notes [list [<object>]]" msgstr "git notes [list [<Objekt>]]" -#: builtin/notes.c:47 +#: builtin/notes.c:45 msgid "git notes add [<options>] [<object>]" msgstr "git notes add [<Optionen>] [<Objekt>]" -#: builtin/notes.c:52 +#: builtin/notes.c:50 msgid "git notes copy [<options>] <from-object> <to-object>" msgstr "git notes copy [<Optionen>] <von-Objekt> <nach-Objekt>" -#: builtin/notes.c:53 +#: builtin/notes.c:51 msgid "git notes copy --stdin [<from-object> <to-object>]..." msgstr "git notes copy --stdin [<von-Objekt> <nach-Objekt>]..." -#: builtin/notes.c:58 +#: builtin/notes.c:56 msgid "git notes append [<options>] [<object>]" msgstr "git notes append [<Optionen>] [<Objekt>]" -#: builtin/notes.c:63 +#: builtin/notes.c:61 msgid "git notes edit [<object>]" msgstr "git notes edit [<Objekt>]" -#: builtin/notes.c:68 +#: builtin/notes.c:66 msgid "git notes show [<object>]" msgstr "git notes show [<Objekt>]" -#: builtin/notes.c:73 +#: builtin/notes.c:71 msgid "git notes merge [<options>] <notes_ref>" msgstr "git notes merge [<Optionen>] <Notiz-Referenz>" -#: builtin/notes.c:74 +#: builtin/notes.c:72 msgid "git notes merge --commit [<options>]" msgstr "git notes merge --commit [<Optionen>]" -#: builtin/notes.c:75 +#: builtin/notes.c:73 msgid "git notes merge --abort [<options>]" msgstr "git notes merge --abort [<Optionen>]" -#: builtin/notes.c:80 +#: builtin/notes.c:78 msgid "git notes remove [<object>]" msgstr "git notes remove [<Objekt>]" -#: builtin/notes.c:85 +#: builtin/notes.c:83 msgid "git notes prune [<options>]" msgstr "git notes prune [<Optionen>]" -#: builtin/notes.c:90 +#: builtin/notes.c:88 msgid "git notes get-ref" msgstr "git notes get-ref" -#: builtin/notes.c:139 +#: builtin/notes.c:137 #, c-format msgid "unable to start 'show' for object '%s'" msgstr "konnte 'show' für Objekt '%s' nicht starten" -#: builtin/notes.c:143 +#: builtin/notes.c:141 msgid "could not read 'show' output" msgstr "Konnte Ausgabe von 'show' nicht lesen." -#: builtin/notes.c:151 +#: builtin/notes.c:149 #, c-format msgid "failed to finish 'show' for object '%s'" msgstr "konnte 'show' für Objekt '%s' nicht abschließen" -#: builtin/notes.c:169 builtin/tag.c:341 +#: builtin/notes.c:167 builtin/tag.c:341 #, c-format msgid "could not create file '%s'" msgstr "konnte Datei '%s' nicht erstellen" -#: builtin/notes.c:188 +#: builtin/notes.c:186 msgid "Please supply the note contents using either -m or -F option" msgstr "" "Bitte liefern Sie den Notiz-Inhalt unter Verwendung der Option -m oder -F." -#: builtin/notes.c:209 builtin/notes.c:972 +#: builtin/notes.c:207 builtin/notes.c:844 #, c-format msgid "Removing note for object %s\n" msgstr "Entferne Notiz für Objekt %s\n" -#: builtin/notes.c:214 +#: builtin/notes.c:212 msgid "unable to write note object" msgstr "Konnte Notiz-Objekt nicht schreiben" -#: builtin/notes.c:216 +#: builtin/notes.c:214 #, c-format msgid "The note contents has been left in %s" msgstr "Die Notiz-Inhalte wurden in %s belassen" -#: builtin/notes.c:250 builtin/tag.c:540 +#: builtin/notes.c:248 builtin/tag.c:540 #, c-format msgid "cannot read '%s'" msgstr "kann '%s' nicht lesen" -#: builtin/notes.c:252 builtin/tag.c:543 +#: builtin/notes.c:250 builtin/tag.c:543 #, c-format msgid "could not open or read '%s'" msgstr "konnte '%s' nicht öffnen oder lesen" -#: builtin/notes.c:271 builtin/notes.c:444 builtin/notes.c:446 -#: builtin/notes.c:506 builtin/notes.c:560 builtin/notes.c:643 -#: builtin/notes.c:648 builtin/notes.c:723 builtin/notes.c:765 -#: builtin/notes.c:967 builtin/tag.c:556 +#: builtin/notes.c:269 builtin/notes.c:316 builtin/notes.c:318 +#: builtin/notes.c:378 builtin/notes.c:432 builtin/notes.c:515 +#: builtin/notes.c:520 builtin/notes.c:595 builtin/notes.c:637 +#: builtin/notes.c:839 builtin/tag.c:556 #, c-format msgid "Failed to resolve '%s' as a valid ref." msgstr "Konnte '%s' nicht als gültige Referenz auflösen." -#: builtin/notes.c:274 +#: builtin/notes.c:272 #, c-format msgid "Failed to read object '%s'." msgstr "Fehler beim Lesen des Objektes '%s'." -#: builtin/notes.c:298 -msgid "Cannot commit uninitialized/unreferenced notes tree" -msgstr "Kann uninitialisierten/unreferenzierten Notiz-Baum nicht eintragen." - -#: builtin/notes.c:339 -#, c-format -msgid "Bad notes.rewriteMode value: '%s'" -msgstr "Ungültiger notes.rewriteMode Wert: '%s'" - -#: builtin/notes.c:349 -#, c-format -msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" -msgstr "" -"Umschreiben der Notizen in %s zurückgewiesen (außerhalb von refs/notes/)" - -#. TRANSLATORS: The first %s is the name of the -#. environment variable, the second %s is its value -#: builtin/notes.c:376 -#, c-format -msgid "Bad %s value: '%s'" -msgstr "Ungültiger %s Wert: '%s'" - -#: builtin/notes.c:440 +#: builtin/notes.c:312 #, c-format msgid "Malformed input line: '%s'." msgstr "Fehlerhafte Eingabezeile: '%s'." -#: builtin/notes.c:455 +#: builtin/notes.c:327 #, c-format msgid "Failed to copy notes from '%s' to '%s'" msgstr "Fehler beim Kopieren der Notizen von '%s' nach '%s'" -#: builtin/notes.c:499 builtin/notes.c:553 builtin/notes.c:626 -#: builtin/notes.c:638 builtin/notes.c:711 builtin/notes.c:758 -#: builtin/notes.c:1032 +#: builtin/notes.c:371 builtin/notes.c:425 builtin/notes.c:498 +#: builtin/notes.c:510 builtin/notes.c:583 builtin/notes.c:630 +#: builtin/notes.c:904 msgid "too many parameters" msgstr "zu viele Parameter" -#: builtin/notes.c:512 builtin/notes.c:771 +#: builtin/notes.c:384 builtin/notes.c:643 #, c-format msgid "No note found for object %s." msgstr "Kein Notiz für Objekt %s gefunden." -#: builtin/notes.c:534 builtin/notes.c:691 +#: builtin/notes.c:406 builtin/notes.c:563 msgid "note contents as a string" msgstr "Notizinhalte als Zeichenkette" -#: builtin/notes.c:537 builtin/notes.c:694 +#: builtin/notes.c:409 builtin/notes.c:566 msgid "note contents in a file" msgstr "Notizinhalte in einer Datei" -#: builtin/notes.c:539 builtin/notes.c:542 builtin/notes.c:696 -#: builtin/notes.c:699 builtin/tag.c:474 +#: builtin/notes.c:411 builtin/notes.c:414 builtin/notes.c:568 +#: builtin/notes.c:571 builtin/tag.c:474 msgid "object" msgstr "Objekt" -#: builtin/notes.c:540 builtin/notes.c:697 +#: builtin/notes.c:412 builtin/notes.c:569 msgid "reuse and edit specified note object" msgstr "Wiederverwendung und Bearbeitung des angegebenen Notiz-Objektes" -#: builtin/notes.c:543 builtin/notes.c:700 +#: builtin/notes.c:415 builtin/notes.c:572 msgid "reuse specified note object" msgstr "Wiederverwendung des angegebenen Notiz-Objektes" -#: builtin/notes.c:545 builtin/notes.c:613 +#: builtin/notes.c:417 builtin/notes.c:485 msgid "replace existing notes" msgstr "ersetzt existierende Notizen" -#: builtin/notes.c:579 +#: builtin/notes.c:451 #, c-format msgid "" "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite " @@ -7117,26 +7336,26 @@ msgstr "" "Konnte Notizen nicht hinzufügen. Existierende Notizen für Objekt %s " "gefunden. Verwenden Sie '-f' um die existierenden Notizen zu überschreiben." -#: builtin/notes.c:584 builtin/notes.c:661 +#: builtin/notes.c:456 builtin/notes.c:533 #, c-format msgid "Overwriting existing notes for object %s\n" msgstr "Ãœberschreibe existierende Notizen für Objekt %s\n" -#: builtin/notes.c:614 +#: builtin/notes.c:486 msgid "read objects from stdin" msgstr "liest Objekte von der Standard-Eingabe" -#: builtin/notes.c:616 +#: builtin/notes.c:488 msgid "load rewriting config for <command> (implies --stdin)" msgstr "" "lädt Konfiguration für <Kommando> beim Umschreiben von Versionen (impliziert " "--stdin)" -#: builtin/notes.c:634 +#: builtin/notes.c:506 msgid "too few parameters" msgstr "zu wenig Parameter" -#: builtin/notes.c:655 +#: builtin/notes.c:527 #, c-format msgid "" "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite " @@ -7145,12 +7364,12 @@ msgstr "" "Kann Notizen nicht kopieren. Existierende Notizen für Objekt %s gefunden. " "Verwenden Sie '-f' um die existierenden Notizen zu überschreiben." -#: builtin/notes.c:667 +#: builtin/notes.c:539 #, c-format msgid "Missing notes on source object %s. Cannot copy." msgstr "Keine Notizen für Quell-Objekt %s. Kopie nicht möglich." -#: builtin/notes.c:716 +#: builtin/notes.c:588 #, c-format msgid "" "The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n" @@ -7159,15 +7378,15 @@ msgstr "" "Die Optionen -m/-F/-c/-C sind für das Unterkommando 'edit' veraltet.\n" "Bitte benutzen Sie stattdessen 'git notes add -f -m/-F/-c/-C'.\n" -#: builtin/notes.c:863 +#: builtin/notes.c:735 msgid "General options" msgstr "Allgemeine Optionen" -#: builtin/notes.c:865 +#: builtin/notes.c:737 msgid "Merge options" -msgstr "Optionen für Zusammenführung" +msgstr "Merge-Optionen" -#: builtin/notes.c:867 +#: builtin/notes.c:739 msgid "" "resolve notes conflicts using the given strategy (manual/ours/theirs/union/" "cat_sort_uniq)" @@ -7175,46 +7394,46 @@ msgstr "" "löst Konflikte bei Notizen mit der angegebenen Strategie auf (manual/ours/" "theirs/union/cat_sort_uniq)" -#: builtin/notes.c:869 +#: builtin/notes.c:741 msgid "Committing unmerged notes" msgstr "trägt nicht zusammengeführte Notizen ein" -#: builtin/notes.c:871 +#: builtin/notes.c:743 msgid "finalize notes merge by committing unmerged notes" msgstr "" -"schließt Zusammenführung von Notizen ab, in dem nicht zusammengeführte " -"Notizen eingetragen werden" +"schließt Merge von Notizen ab, in dem nicht zusammengeführte Notizen " +"committet werden" -#: builtin/notes.c:873 +#: builtin/notes.c:745 msgid "Aborting notes merge resolution" -msgstr "bricht Konfliktauflösung bei Zusammenführung von Notizen ab" +msgstr "bricht Konfliktauflösung beim Merge von Notizen ab" -#: builtin/notes.c:875 +#: builtin/notes.c:747 msgid "abort notes merge" -msgstr "bricht Zusammenführung von Notizen ab" +msgstr "bricht Merge von Notizen ab" -#: builtin/notes.c:970 +#: builtin/notes.c:842 #, c-format msgid "Object %s has no note\n" msgstr "Objekt %s hat keine Notiz\n" -#: builtin/notes.c:982 +#: builtin/notes.c:854 msgid "attempt to remove non-existent note is not an error" msgstr "der Versuch, eine nicht existierende Notiz zu löschen, ist kein Fehler" -#: builtin/notes.c:985 +#: builtin/notes.c:857 msgid "read object names from the standard input" msgstr "liest Objektnamen von der Standard-Eingabe" -#: builtin/notes.c:1066 +#: builtin/notes.c:938 msgid "notes_ref" msgstr "Notiz-Referenz" -#: builtin/notes.c:1067 +#: builtin/notes.c:939 msgid "use notes from <notes_ref>" msgstr "verwendet Notizen von <Notiz-Referenz>" -#: builtin/notes.c:1102 builtin/remote.c:1598 +#: builtin/notes.c:974 builtin/remote.c:1598 #, c-format msgid "Unknown subcommand: %s" msgstr "Unbekanntes Unterkommando: %s" @@ -7237,12 +7456,12 @@ msgstr "Fehler beim Komprimieren (%d)" #: builtin/pack-objects.c:2397 #, c-format msgid "unsupported index version %s" -msgstr "Nicht unterstützte Bereitstellungsversion %s" +msgstr "Nicht unterstützte Staging-Area-Version %s" #: builtin/pack-objects.c:2401 #, c-format msgid "bad index version '%s'" -msgstr "Ungültige Bereitstellungsversion '%s'" +msgstr "Ungültige Staging-Area-Version '%s'" #: builtin/pack-objects.c:2424 #, c-format @@ -7328,7 +7547,7 @@ msgstr "erzeugt keine leeren Pakete" #: builtin/pack-objects.c:2481 msgid "read revision arguments from standard input" -msgstr "liest Argumente bezüglich Revisionen von der Standard-Eingabe" +msgstr "liest Argumente bezüglich Commits von der Standard-Eingabe" #: builtin/pack-objects.c:2483 msgid "limit the objects to those that are not yet packed" @@ -7341,8 +7560,7 @@ msgstr "schließt Objekte ein, die von jeder Referenz erreichbar sind" #: builtin/pack-objects.c:2489 msgid "include objects referred by reflog entries" msgstr "" -"schließt Objekte ein, die von Einträgen des Referenzprotokolls referenziert " -"werden" +"schließt Objekte ein, die von Einträgen des Reflogs referenziert werden" #: builtin/pack-objects.c:2492 msgid "output pack to stdout" @@ -7350,8 +7568,7 @@ msgstr "schreibt Paket in die Standard-Ausgabe" #: builtin/pack-objects.c:2494 msgid "include tag objects that refer to objects to be packed" -msgstr "" -"schließt Markierungsobjekte ein, die auf gepackte Objekte referenzieren" +msgstr "schließt Tag-Objekte ein, die auf gepackte Objekte referenzieren" #: builtin/pack-objects.c:2496 msgid "keep unreachable objects" @@ -7379,7 +7596,7 @@ msgstr "Komprimierungsgrad für Paketierung" #: builtin/pack-objects.c:2507 msgid "do not hide commits by grafts" -msgstr "verbirgt keine Versionen mit künstlichen Vorgängern (\"grafts\")" +msgstr "verbirgt keine Commits mit künstlichen Vorgängern (\"grafts\")" #: builtin/pack-refs.c:6 msgid "git pack-refs [options]" @@ -7399,7 +7616,7 @@ msgstr "git prune-packed [-n|--dry-run] [-q|--quiet]" #: builtin/prune.c:12 msgid "git prune [-n] [-v] [--expire <time>] [--] [<head>...]" -msgstr "git prune [-n] [-v] [--expire <Zeit>] [--] [<Zweigspitze>...]" +msgstr "git prune [-n] [-v] [--expire <Zeit>] [--] [<head>...]" #: builtin/prune.c:132 msgid "do not remove, show only" @@ -7415,11 +7632,11 @@ msgstr "lässt Objekte älter als <Zeit> verfallen" #: builtin/push.c:14 msgid "git push [<options>] [<repository> [<refspec>...]]" -msgstr "git push [<Optionen>] [<Projektarchiv> [<Referenzspezifikation>...]]" +msgstr "git push [<Optionen>] [<Repository> [<Refspec>...]]" #: builtin/push.c:45 msgid "tag shorthand without <tag>" -msgstr "Kurzschrift für Markierung ohne <Markierung>" +msgstr "Kurzschrift für Tag ohne <Tag>" #: builtin/push.c:64 msgid "--delete only accepts plain target ref names" @@ -7448,19 +7665,19 @@ msgid "" " git push %s %s\n" "%s" msgstr "" -"Der Name des externen Ãœbernahmezweiges stimmt nicht mit dem Namen Ihres\n" -"aktuellen Zweiges überein. Um auf den Ãœbernahmezweig in dem externen\n" -"Projektarchiv zu versenden, benutzen Sie:\n" +"Der Name des Upstream-Branches stimmt nicht mit dem Namen Ihres\n" +"aktuellen Branches überein. Um auf den Upstream-Branch in dem Remote-\n" +"Repository zu versenden, benutzen Sie:\n" "\n" " git push %s HEAD:%s\n" "\n" -"Um auf den Zweig mit dem selben Namen in dem externen Projekarchiv\n" -"zu versenden, benutzen Sie:\n" +"Um auf den Branch mit dem selben Namen im Remote-Repository zu versenden,\n" +"benutzen Sie:\n" "\n" " git push %s %s\n" "%s" -#: builtin/push.c:121 +#: builtin/push.c:117 #, c-format msgid "" "You are not currently on a branch.\n" @@ -7469,13 +7686,13 @@ msgid "" "\n" " git push %s HEAD:<name-of-remote-branch>\n" msgstr "" -"Sie befinden sich im Moment auf keinem Zweig.\n" -"Um die Historie, führend zum aktuellen (freistehende Zweigspitze (HEAD))\n" +"Sie befinden sich im Moment auf keinem Branch.\n" +"Um die Historie, führend zum aktuellen (losgelöster HEAD)\n" "Status zu versenden, benutzen Sie\n" "\n" -" git push %s HEAD:<Name-des-externen-Zweiges>\n" +" git push %s HEAD:<Name-des-Remote-Branches>\n" -#: builtin/push.c:128 +#: builtin/push.c:131 #, c-format msgid "" "The current branch %s has no upstream branch.\n" @@ -7483,29 +7700,30 @@ msgid "" "\n" " git push --set-upstream %s %s\n" msgstr "" -"Der aktuelle Zweig %s hat keinen Zweig im externen Projektarchiv.\n" -"Um den aktuellen Zweig zu versenden und das Fernarchiv als externes\n" -"Projektarchiv zu verwenden, benutzen Sie\n" +"Der aktuelle Branch %s hat keinen Upstream-Branch.\n" +"Um den aktuellen Branch zu versenden und den Remote-Branch\n" +"als Upstream-Branch zu setzen, benutzen Sie\n" "\n" " git push --set-upstream %s %s\n" -#: builtin/push.c:136 +#: builtin/push.c:139 #, c-format msgid "The current branch %s has multiple upstream branches, refusing to push." -msgstr "Der aktuelle Zweig %s hat mehrere externe Zweige, Versand verweigert." +msgstr "" +"Der aktuelle Branch %s hat mehrere Upstream-Branches, \"push\" verweigert." -#: builtin/push.c:139 +#: builtin/push.c:142 #, c-format msgid "" "You are pushing to remote '%s', which is not the upstream of\n" "your current branch '%s', without telling me what to push\n" "to update which remote branch." msgstr "" -"Sie versenden nach '%s', welches kein externes Projektarchiv Ihres\n" -"aktuellen Zweiges '%s' ist, ohne mir mitzuteilen, was ich versenden\n" -"soll, um welchen externen Zweig zu aktualisieren." +"Sie versenden nach '%s', welches kein Upstream-Repository Ihres aktuellen\n" +"Branches '%s' ist, ohne mir mitzuteilen, was ich versenden soll, um welchen\n" +"Remote-Branch zu aktualisieren." -#: builtin/push.c:151 +#: builtin/push.c:165 msgid "" "push.default is unset; its implicit value is changing in\n" "Git 2.0 from 'matching' to 'simple'. To squelch this message\n" @@ -7526,6 +7744,7 @@ msgstr "" "wird in Git 2.0 von 'matching' nach 'simple' geändert. Um diese Meldung zu\n" "unterdrücken und das aktuelle Verhalten nach Änderung des Standardwertes\n" "beizubehalten, benutzen Sie:\n" +"\n" " git config --global push.default matching\n" "\n" "Um diese Meldung zu unterdrücken und das neue Verhalten jetzt zu übernehmen, " @@ -7539,28 +7758,28 @@ msgstr "" "Modus 'current' anstatt 'simple', falls Sie gelegentlich ältere Versionen " "von Git benutzen.)" -#: builtin/push.c:199 +#: builtin/push.c:225 msgid "" "You didn't specify any refspecs to push, and push.default is \"nothing\"." msgstr "" -"Sie haben keine Referenzspezifikationen zum Versenden angegeben, und push." -"default ist \"nothing\"." +"Sie haben keine Refspec für \"push\" angegeben, und push.default ist " +"\"nothing\"." -#: builtin/push.c:206 +#: builtin/push.c:232 msgid "" "Updates were rejected because the tip of your current branch is behind\n" -"its remote counterpart. Merge the remote changes (e.g. 'git pull')\n" -"before pushing again.\n" +"its remote counterpart. Integrate the remote changes (e.g.\n" +"'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "Aktualisierungen wurden zurückgewiesen, weil die Spitze Ihres aktuellen\n" -"Zweiges hinter seinem externen Gegenstück zurückgefallen ist. Führen Sie\n" -"die externen Änderungen zusammen (z.B. 'git pull') bevor Sie erneut\n" -"versenden.\n" +"Branches hinter seinem externen Gegenstück zurückgefallen ist. Führen Sie\n" +"die externen Änderungen zusammen (z.B. 'git pull ...') bevor Sie \"push\"\n" +"erneut ausführen.\n" "Siehe auch die Sektion 'Note about fast-forwards' in 'git push --help'\n" "für weitere Details." -#: builtin/push.c:212 +#: builtin/push.c:238 msgid "" "Updates were rejected because a pushed branch tip is behind its remote\n" "counterpart. If you did not intend to push that branch, you may want to\n" @@ -7568,80 +7787,79 @@ msgid "" "to 'simple', 'current' or 'upstream' to push only the current branch." msgstr "" "Aktualisierungen wurden zurückgewiesen, weil die Spitze eines versendeten\n" -"Zweiges hinter seinem externen Gegenstück zurückgefallen ist. Wenn Sie " +"Branches hinter seinem externen Gegenstück zurückgefallen ist. Wenn Sie " "nicht\n" -"beabsichtigt haben, diesen Zweig zu versenden, können Sie auch den zu " +"beabsichtigt haben, diesen Branch zu versenden, können Sie auch den zu " "versendenden\n" -"Zweig spezifizieren oder die Konfigurationsvariable 'push.default' zu " +"Branch spezifizieren oder die Konfigurationsvariable 'push.default' zu " "'simple', 'current'\n" -"oder 'upstream' setzen, um nur den aktuellen Zweig zu versenden." +"oder 'upstream' setzen, um nur den aktuellen Branch zu versenden." -#: builtin/push.c:218 +#: builtin/push.c:244 msgid "" "Updates were rejected because a pushed branch tip is behind its remote\n" -"counterpart. Check out this branch and merge the remote changes\n" -"(e.g. 'git pull') before pushing again.\n" +"counterpart. Check out this branch and integrate the remote changes\n" +"(e.g. 'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "Aktualisierungen wurden zurückgewiesen, weil die Spitze eines versendeten\n" -"Zweiges hinter seinem externen Gegenstück zurückgefallen ist. Checken Sie\n" -"diesen Zweig aus und führen Sie die externen Änderungen zusammen\n" -"(z.B. 'git pull') bevor Sie erneut versenden.\n" +"Branches hinter seinem externen Gegenstück zurückgefallen ist. Checken Sie\n" +"diesen Branch aus und führen Sie die externen Änderungen zusammen\n" +"(z.B. 'git pull ...') bevor Sie erneut \"push\" ausführen.\n" "Siehe auch die Sektion 'Note about fast-forwards' in 'git push --help'\n" "für weitere Details." -#: builtin/push.c:224 +#: builtin/push.c:250 msgid "" "Updates were rejected because the remote contains work that you do\n" "not have locally. This is usually caused by another repository pushing\n" -"to the same ref. You may want to first merge the remote changes (e.g.,\n" -"'git pull') before pushing again.\n" +"to the same ref. You may want to first integrate the remote changes\n" +"(e.g., 'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" -"Aktualisierungen wurden zurückgewiesen, weil das Fernarchiv Versionen " +"Aktualisierungen wurden zurückgewiesen, weil das Remote-Repository Commits " "enthält,\n" -"die lokal nicht vorhanden sind. Das wird üblicherweise durch das Versenden " +"die lokal nicht vorhanden sind. Das wird üblicherweise durch einen \"push\" " "von\n" -"Versionen auf dieselbe Referenz von einem anderen Projektarchiv aus " -"verursacht.\n" +"Commits auf dieselbe Referenz von einem anderen Repository aus verursacht.\n" "Vielleicht müssen Sie die externen Änderungen zusammenzuführen (z.B. 'git " -"pull')\n" -"bevor Sie erneut versenden.\n" +"pull ...')\n" +"bevor Sie erneut \"push\" ausführen.\n" "Siehe auch die Sektion 'Note about fast-forwards' in 'git push --help'\n" "für weitere Details." -#: builtin/push.c:231 +#: builtin/push.c:257 msgid "Updates were rejected because the tag already exists in the remote." msgstr "" -"Aktualisierungen wurden zurückgewiesen, weil die Markierung bereits\n" -"im Fernarchiv existiert." +"Aktualisierungen wurden zurückgewiesen, weil der Tag bereits\n" +"im Remote-Repository existiert." -#: builtin/push.c:234 +#: builtin/push.c:260 msgid "" "You cannot update a remote ref that points at a non-commit object,\n" "or update a remote ref to make it point at a non-commit object,\n" "without using the '--force' option.\n" msgstr "" -"Sie können keine externe Referenz aktualisieren, die auf ein Objekt zeigt,\n" -"das keine Version ist, oder es auf ein solches Objekt zeigen lassen, ohne\n" +"Sie können keine Remote-Referenz aktualisieren, die auf ein Objekt zeigt,\n" +"das kein Commit ist, oder es auf ein solches Objekt zeigen lassen, ohne\n" "die Option '--force' zu verwenden.\n" -#: builtin/push.c:294 +#: builtin/push.c:320 #, c-format msgid "Pushing to %s\n" msgstr "Versende nach %s\n" -#: builtin/push.c:298 +#: builtin/push.c:324 #, c-format msgid "failed to push some refs to '%s'" msgstr "Fehler beim Versenden einiger Referenzen nach '%s'" -#: builtin/push.c:331 +#: builtin/push.c:357 #, c-format msgid "bad repository '%s'" -msgstr "ungültiges Projektarchiv '%s'" +msgstr "ungültiges Repository '%s'" -#: builtin/push.c:332 +#: builtin/push.c:358 msgid "" "No configured push destination.\n" "Either specify the URL from the command-line or configure a remote " @@ -7653,100 +7871,97 @@ msgid "" "\n" " git push <name>\n" msgstr "" -"Kein Ziel zum Versenden konfiguriert.\n" +"Kein Ziel für \"push\" konfiguriert.\n" "Entweder spezifizieren Sie die URL von der Kommandozeile oder konfigurieren " -"ein externes Projektarchiv unter Benutzung von\n" +"ein Remote-Repository unter Benutzung von\n" "\n" " git remote add <Name> <URL>\n" "\n" -"und versenden dann unter Benutzung dieses Namens\n" +"und führen \"push\" dann unter Benutzung dieses Namens aus\n" "\n" " git push <Name>\n" -#: builtin/push.c:347 +#: builtin/push.c:373 msgid "--all and --tags are incompatible" msgstr "Die Optionen --all und --tags sind inkompatibel." -#: builtin/push.c:348 +#: builtin/push.c:374 msgid "--all can't be combined with refspecs" -msgstr "" -"Die Option --all kann nicht mit Referenzspezifikationen kombiniert werden." +msgstr "Die Option --all kann nicht mit Refspecs kombiniert werden." -#: builtin/push.c:353 +#: builtin/push.c:379 msgid "--mirror and --tags are incompatible" msgstr "Die Optionen --mirror und --tags sind inkompatibel." -#: builtin/push.c:354 +#: builtin/push.c:380 msgid "--mirror can't be combined with refspecs" -msgstr "" -"Die Option --mirror kann nicht mit Referenzspezifikationen kombiniert werden." +msgstr "Die Option --mirror kann nicht mit Refspecs kombiniert werden." -#: builtin/push.c:359 +#: builtin/push.c:385 msgid "--all and --mirror are incompatible" msgstr "Die Optionen --all und --mirror sind inkompatibel." -#: builtin/push.c:419 +#: builtin/push.c:445 msgid "repository" -msgstr "Projektarchiv" +msgstr "Repository" -#: builtin/push.c:420 +#: builtin/push.c:446 msgid "push all refs" msgstr "versendet alle Referenzen" -#: builtin/push.c:421 +#: builtin/push.c:447 msgid "mirror all refs" msgstr "spiegelt alle Referenzen" -#: builtin/push.c:423 +#: builtin/push.c:449 msgid "delete refs" msgstr "löscht Referenzen" -#: builtin/push.c:424 +#: builtin/push.c:450 msgid "push tags (can't be used with --all or --mirror)" -msgstr "" -"versendet Markierungen (kann nicht mit --all oder --mirror verwendet werden)" +msgstr "versendet Tags (kann nicht mit --all oder --mirror verwendet werden)" -#: builtin/push.c:427 +#: builtin/push.c:453 msgid "force updates" msgstr "erzwingt Aktualisierung" -#: builtin/push.c:428 +#: builtin/push.c:454 msgid "check" msgstr "" -#: builtin/push.c:429 +#: builtin/push.c:455 msgid "control recursive pushing of submodules" -msgstr "steuert rekursives Versenden von Unterprojekten" +msgstr "steuert rekursiven \"push\" von Submodulen" -#: builtin/push.c:431 +#: builtin/push.c:457 msgid "use thin pack" msgstr "verwendet kleinere Pakete" -#: builtin/push.c:432 builtin/push.c:433 +#: builtin/push.c:458 builtin/push.c:459 msgid "receive pack program" msgstr "'receive pack' Programm" -#: builtin/push.c:434 +#: builtin/push.c:460 msgid "set upstream for git pull/status" -msgstr "setzt externes Projektarchiv für \"git pull/status\"" +msgstr "setzt Upstream für \"git pull/status\"" -#: builtin/push.c:437 +#: builtin/push.c:463 msgid "prune locally removed refs" msgstr "entfernt lokal gelöschte Referenzen" -#: builtin/push.c:439 +#: builtin/push.c:465 msgid "bypass pre-push hook" msgstr "umgeht \"pre-push hook\"" -#: builtin/push.c:440 +#: builtin/push.c:466 msgid "push missing but relevant tags" -msgstr "versendet fehlende, aber relevante Markierungen" +msgstr "versendet fehlende, aber relevante Tags" -#: builtin/push.c:450 +#: builtin/push.c:476 msgid "--delete is incompatible with --all, --mirror and --tags" msgstr "Die Option --delete ist inkompatibel mit --all, --mirror und --tags." -#: builtin/push.c:452 +#: builtin/push.c:478 msgid "--delete doesn't make sense without any refs" msgstr "Die Option --delete kann nur mit Referenzen verwendet werden." @@ -7758,76 +7973,83 @@ msgid "" msgstr "" "git read-tree [[-m [--trivial] [--aggressive] | --reset | --prefix=<Prefix>] " "[-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--" -"index-output=<Datei>] (--empty | <Versionsreferenz1> [<Versionsreferenz2> " -"[<Versionsreferenz3>]])" +"index-output=<Datei>] (--empty | <Commit-Referenz1> [<Commit-Referenz2> " +"[<Commit-Referenz3>]])" -#: builtin/read-tree.c:108 +#: builtin/read-tree.c:109 msgid "write resulting index to <file>" -msgstr "schreibt resultierende Bereitstellung nach <Datei>" +msgstr "schreibt resultierende Staging-Area nach <Datei>" -#: builtin/read-tree.c:111 +#: builtin/read-tree.c:112 msgid "only empty the index" -msgstr "leert die Bereitstellung" +msgstr "leert die Staging-Area" -#: builtin/read-tree.c:113 +#: builtin/read-tree.c:114 msgid "Merging" -msgstr "Zusammenführung" +msgstr "Merge" -#: builtin/read-tree.c:115 +#: builtin/read-tree.c:116 msgid "perform a merge in addition to a read" -msgstr "führt eine Zusammenführung zusätzlich zum Lesen aus" +msgstr "führt einen Merge zusätzlich zum Lesen aus" -#: builtin/read-tree.c:117 +#: builtin/read-tree.c:118 msgid "3-way merge if no file level merging required" -msgstr "" -"3-Wege-Zusammenführung, wenn keine Zusammenführung auf Dateiebene " -"erforderlich ist" +msgstr "3-Wege-Merge, wenn kein Merge auf Dateiebene erforderlich ist" -#: builtin/read-tree.c:119 +#: builtin/read-tree.c:120 msgid "3-way merge in presence of adds and removes" -msgstr "" -"3-Wege-Zusammenführung bei Vorhandensein von hinzugefügten/entfernten Zeilen" +msgstr "3-Wege-Merge bei Vorhandensein von hinzugefügten/entfernten Zeilen" -#: builtin/read-tree.c:121 +#: builtin/read-tree.c:122 msgid "same as -m, but discard unmerged entries" msgstr "genau wie -m, verwirft aber nicht zusammengeführte Einträge" -#: builtin/read-tree.c:122 +#: builtin/read-tree.c:123 msgid "<subdirectory>/" msgstr "<Unterverzeichnis>/" -#: builtin/read-tree.c:123 +#: builtin/read-tree.c:124 msgid "read the tree into the index under <subdirectory>/" -msgstr "liest den Baum in die Bereitstellung unter <Unterverzeichnis>/" +msgstr "liest das Verzeichnis in die Staging-Area unter <Unterverzeichnis>/" -#: builtin/read-tree.c:126 +#: builtin/read-tree.c:127 msgid "update working tree with merge result" -msgstr "aktualisiert Arbeitsbaum mit Ergebnis der Zusammenführung" +msgstr "aktualisiert Arbeitsverzeichnis mit dem Ergebnis des Merges" -#: builtin/read-tree.c:128 +#: builtin/read-tree.c:129 msgid "gitignore" msgstr "gitignore" -#: builtin/read-tree.c:129 +#: builtin/read-tree.c:130 msgid "allow explicitly ignored files to be overwritten" msgstr "erlaubt explizit ignorierte Dateien zu überschreiben" -#: builtin/read-tree.c:132 +#: builtin/read-tree.c:133 msgid "don't check the working tree after merging" -msgstr "prüft nicht den Arbeitsbaum nach der Zusammenführung" +msgstr "prüft nicht das Arbeitsverzeichnis nach dem Merge" -#: builtin/read-tree.c:133 +#: builtin/read-tree.c:134 msgid "don't update the index or the work tree" -msgstr "aktualisiert weder die Bereitstellung, noch den Arbeitsbaum" +msgstr "aktualisiert weder die Staging-Area, noch das Arbeitsverzeichnis" -#: builtin/read-tree.c:135 +#: builtin/read-tree.c:136 msgid "skip applying sparse checkout filter" msgstr "überspringt Anwendung des Filters für spärliches Auschecken" -#: builtin/read-tree.c:137 +#: builtin/read-tree.c:138 msgid "debug unpack-trees" msgstr "protokolliert Entpacken der Bäume" +#: builtin/reflog.c:500 +#, c-format +msgid "%s' for '%s' is not a valid timestamp" +msgstr "'%s' für '%s' ist kein gültiger Zeitstempel" + +#: builtin/reflog.c:616 builtin/reflog.c:621 +#, c-format +msgid "'%s' is not a valid timestamp" +msgstr "'%s' ist kein gültiger Zeitstempel" + #: builtin/remote.c:11 msgid "git remote [-v | --verbose]" msgstr "git remote [-v | --verbose]" @@ -7837,7 +8059,7 @@ msgid "" "git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--" "mirror=<fetch|push>] <name> <url>" msgstr "" -"git remote add [-t <Zweig>] [-m <master>] [-f] [--tags|--no-tags] [--" +"git remote add [-t <Branch>] [-m <master>] [-f] [--tags|--no-tags] [--" "mirror=<fetch|push>] <Name> <URL>" #: builtin/remote.c:13 builtin/remote.c:32 @@ -7850,7 +8072,7 @@ msgstr "git remote remove <Name>" #: builtin/remote.c:15 builtin/remote.c:42 msgid "git remote set-head <name> (-a | -d | <branch>)" -msgstr "git remote set-head <Name> (-a | -d | <Zweig>)" +msgstr "git remote set-head <Name> (-a | -d | <Branch>)" #: builtin/remote.c:16 msgid "git remote [-v | --verbose] show [-n] <name>" @@ -7864,12 +8086,11 @@ msgstr "git remote prune [-n | --dry-run] <Name>" msgid "" "git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]" msgstr "" -"git remote [-v | --verbose] update [-p | --prune] [(<Gruppe> | " -"<externesProjektarchiv>)...]" +"git remote [-v | --verbose] update [-p | --prune] [(<Gruppe> | <Remote>)...]" #: builtin/remote.c:19 msgid "git remote set-branches [--add] <name> <branch>..." -msgstr "git remote set-branches [--add] <Name> <Zweig>..." +msgstr "git remote set-branches [--add] <Name> <Branch>..." #: builtin/remote.c:20 builtin/remote.c:68 msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]" @@ -7889,11 +8110,11 @@ msgstr "git remote add [<Optionen>] <Name> <URL>" #: builtin/remote.c:47 msgid "git remote set-branches <name> <branch>..." -msgstr "git remote set-branches <Name> <Zweig>..." +msgstr "git remote set-branches <Name> <Branch>..." #: builtin/remote.c:48 msgid "git remote set-branches --add <name> <branch>..." -msgstr "git remote set-branches --add <Name> <Zweig>..." +msgstr "git remote set-branches --add <Name> <Branch>..." #: builtin/remote.c:53 msgid "git remote show [<options>] <name>" @@ -7905,7 +8126,7 @@ msgstr "git remote prune [<Optionen>] <Name>" #: builtin/remote.c:63 msgid "git remote update [<options>] [<group> | <remote>]..." -msgstr "git remote update [<Optionen>] [<Gruppe> | <externesProjektarchiv>]..." +msgstr "git remote update [<Optionen>] [<Gruppe> | <externesRepository>]..." #: builtin/remote.c:98 #, c-format @@ -7927,11 +8148,11 @@ msgstr "unbekanntes Argument für Option --mirror: %s" #: builtin/remote.c:163 msgid "fetch the remote branches" -msgstr "fordert die externen Zweige an" +msgstr "fordert die Remote-Branches an" #: builtin/remote.c:165 msgid "import all tags and associated objects when fetching" -msgstr "importiert alle Markierungen und verbundene Objekte beim Anfordern" +msgstr "importiert alle Tags und verbundene Objekte beim Anfordern" #: builtin/remote.c:168 msgid "or do not fetch any tag at all (--no-tags)" @@ -7939,11 +8160,11 @@ msgstr "oder fordere gar keine Zweige an (--no-tags)" #: builtin/remote.c:170 msgid "branch(es) to track" -msgstr "Zweige zur Ãœbernahme" +msgstr "Branch(es) zur Ãœbernahme" #: builtin/remote.c:171 msgid "master branch" -msgstr "Hauptzweig" +msgstr "Hauptbranch" #: builtin/remote.c:172 msgid "push|fetch" @@ -7952,34 +8173,35 @@ msgstr "push|fetch" #: builtin/remote.c:173 msgid "set up remote as a mirror to push to or fetch from" msgstr "" -"Aufsetzen des Fernarchivs als Spiegelarchiv zum Versenden und Anfordern" +"Aufsetzen des Remote-Repositories als Spiegel-Repository für \"push\" und " +"\"fetch\"" #: builtin/remote.c:185 msgid "specifying a master branch makes no sense with --mirror" msgstr "" -"Die Option --mirror kann nicht mit der Angabe eines Hauptzweiges verwendet " +"Die Option --mirror kann nicht mit der Angabe eines Hauptbranches verwendet " "werden." #: builtin/remote.c:187 msgid "specifying branches to track makes sense only with fetch mirrors" msgstr "" -"Die Angabe von zu folgenden Zweigen kann nur mit dem Anfordern von " +"Die Angabe von zu folgenden Branches kann nur mit dem Anfordern von " "Spiegelarchiven verwendet werden." #: builtin/remote.c:195 builtin/remote.c:646 #, c-format msgid "remote %s already exists." -msgstr "externes Projektarchiv %s existiert bereits" +msgstr "externes Repository %s existiert bereits" #: builtin/remote.c:199 builtin/remote.c:650 #, c-format msgid "'%s' is not a valid remote name" -msgstr "'%s' ist kein gültiger Name für ein externes Projektarchiv" +msgstr "'%s' ist kein gültiger Name für ein Remote-Repository" #: builtin/remote.c:243 #, c-format msgid "Could not setup master '%s'" -msgstr "Konnte symbolische Referenz für Hauptzweig von '%s' nicht einrichten" +msgstr "Konnte symbolische Referenz für Hauptbranch von '%s' nicht einrichten" #: builtin/remote.c:299 #, c-format @@ -7989,7 +8211,7 @@ msgstr "mehr als ein %s" #: builtin/remote.c:339 #, c-format msgid "Could not get fetch map for refspec %s" -msgstr "Konnte Abholungszuordnung für Referenzspezifikation %s nicht bekommen" +msgstr "Konnte Fetch-Map für Refspec %s nicht bekommen" #: builtin/remote.c:440 builtin/remote.c:448 msgid "(matching)" @@ -8007,7 +8229,7 @@ msgstr "Konnte '%s' nicht an '%s' anhängen." #: builtin/remote.c:639 builtin/remote.c:792 builtin/remote.c:890 #, c-format msgid "No such remote: %s" -msgstr "Kein solches externes Archiv: %s" +msgstr "Kein solches Remote-Repository: %s" #: builtin/remote.c:656 #, c-format @@ -8026,8 +8248,7 @@ msgid "" "\t%s\n" "\tPlease update the configuration manually if necessary." msgstr "" -"Keine Aktualisierung der nicht standardmäßigen Referenzspezifikation zum " -"Abholen\n" +"Keine Aktualisierung der nicht standardmäßigen Refspec für \"fetch\"\n" "\t%s\n" "\tBitte aktualisieren Sie, falls notwendig, die Konfiguration manuell." @@ -8054,7 +8275,7 @@ msgstr "Konnte '%s' nicht erstellen" #: builtin/remote.c:764 #, c-format msgid "Could not remove branch %s" -msgstr "Konnte Zweig %s nicht löschen" +msgstr "Konnte Branch %s nicht löschen" #: builtin/remote.c:834 msgid "" @@ -8064,18 +8285,18 @@ msgid_plural "" "Note: Some branches outside the refs/remotes/ hierarchy were not removed;\n" "to delete them, use:" msgstr[0] "" -"Hinweis: Ein Zweig außerhalb der /refs/remotes/ Hierachie wurde nicht " +"Hinweis: Ein Branch außerhalb der refs/remotes/ Hierachie wurde nicht " "gelöscht;\n" "um diesen zu löschen, benutzen Sie:" msgstr[1] "" -"Hinweis: Einige Zweige außer der /refs/remotes/ Hierarchie wurden nicht " +"Hinweis: Einige Branches außer der refs/remotes/ Hierarchie wurden nicht " "entfernt;\n" "um diese zu entfernen, benutzen Sie:" #: builtin/remote.c:943 #, c-format msgid " new (next fetch will store in remotes/%s)" -msgstr " neu (wird bei nächster Abholung in remotes/%s gespeichert)" +msgstr " neu (wird bei nächstem \"fetch\" in remotes/%s gespeichert)" #: builtin/remote.c:946 msgid " tracked" @@ -8092,30 +8313,30 @@ msgstr " ???" #: builtin/remote.c:991 #, c-format msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch" -msgstr "ungültiges branch.%s.merge; kann nicht auf > 1 Zweig neu aufbauen" +msgstr "ungültiges branch.%s.merge; kann Rebase nicht auf > 1 Branch ausführen" #: builtin/remote.c:998 #, c-format msgid "rebases onto remote %s" -msgstr "baut neu auf externen Zweig %s auf" +msgstr "Rebase auf Remote-Branch %s" #: builtin/remote.c:1001 #, c-format msgid " merges with remote %s" -msgstr " führt mit externem Zweig %s zusammen" +msgstr " führt mit Remote-Branch %s zusammen" #: builtin/remote.c:1002 msgid " and with remote" -msgstr " und mit externem Zweig" +msgstr " und mit Remote-Branch" #: builtin/remote.c:1004 #, c-format msgid "merges with remote %s" -msgstr "führt mit externem Zweig %s zusammen" +msgstr "führt mit Remote-Branch %s zusammen" #: builtin/remote.c:1005 msgid " and with remote" -msgstr " und mit externem Zweig" +msgstr " und mit Remote-Branch" #: builtin/remote.c:1051 msgid "create" @@ -8159,12 +8380,12 @@ msgstr " %-*s versendet nach %s" #: builtin/remote.c:1091 msgid "do not query remotes" -msgstr "keine Abfrage von Fernarchiven" +msgstr "keine Abfrage von Remote-Repositories" #: builtin/remote.c:1118 #, c-format msgid "* remote %s" -msgstr "* externes Projektarchiv %s" +msgstr "* Remote-Repository %s" #: builtin/remote.c:1119 #, c-format @@ -8183,22 +8404,22 @@ msgstr " URL zum Versenden: %s" #: builtin/remote.c:1133 builtin/remote.c:1135 builtin/remote.c:1137 #, c-format msgid " HEAD branch: %s" -msgstr " Hauptzweig: %s" +msgstr " Hauptbranch: %s" #: builtin/remote.c:1139 #, c-format msgid "" " HEAD branch (remote HEAD is ambiguous, may be one of the following):\n" msgstr "" -" Hauptzweig (externer Hauptzweig ist mehrdeutig, könnte einer der folgenden " +" Hauptbranch (externer HEAD ist mehrdeutig, könnte einer der folgenden " "sein):\n" #: builtin/remote.c:1151 #, c-format msgid " Remote branch:%s" msgid_plural " Remote branches:%s" -msgstr[0] " externer Zweig:%s" -msgstr[1] " externe Zweige:%s" +msgstr[0] " Remote-Branch:%s" +msgstr[1] " Remote-Branches:%s" #: builtin/remote.c:1154 builtin/remote.c:1181 msgid " (status not queried)" @@ -8207,8 +8428,8 @@ msgstr " (Zustand nicht abgefragt)" #: builtin/remote.c:1163 msgid " Local branch configured for 'git pull':" msgid_plural " Local branches configured for 'git pull':" -msgstr[0] " Lokaler Zweig konfiguriert für 'git pull':" -msgstr[1] " Lokale Zweige konfiguriert für 'git pull':" +msgstr[0] " Lokaler Branch konfiguriert für 'git pull':" +msgstr[1] " Lokale Branches konfiguriert für 'git pull':" #: builtin/remote.c:1171 msgid " Local refs will be mirrored by 'git push'" @@ -8223,7 +8444,7 @@ msgstr[1] " Lokale Referenzen konfiguriert für 'git push'%s:" #: builtin/remote.c:1199 msgid "set refs/remotes/<name>/HEAD according to remote" -msgstr "setzt refs/remotes/<Name>/HEAD gemäß dem Fernarchiv" +msgstr "setzt refs/remotes/<Name>/HEAD gemäß dem Remote-Repository" #: builtin/remote.c:1201 msgid "delete refs/remotes/<name>/HEAD" @@ -8231,13 +8452,13 @@ msgstr "entfernt refs/remotes/<Name>/HEAD" #: builtin/remote.c:1216 msgid "Cannot determine remote HEAD" -msgstr "Kann Hauptzweig des externen Projektarchivs nicht bestimmen" +msgstr "Kann HEAD des Remote-Repositories nicht bestimmen" #: builtin/remote.c:1218 msgid "Multiple remote HEAD branches. Please choose one explicitly with:" msgstr "" -"Mehrere Hauptzweige im externen Projektarchiv. Bitte wählen Sie explizit " -"einen aus mit:" +"Mehrere Hauptbranches im Remote-Repository. Bitte wählen Sie explizit einen " +"aus mit:" #: builtin/remote.c:1228 #, c-format @@ -8267,7 +8488,7 @@ msgstr " %s wurde unreferenziert!" #: builtin/remote.c:1281 #, c-format msgid "Pruning %s" -msgstr "entferne veraltete Zweige von %s" +msgstr "entferne veraltete Branches von %s" #: builtin/remote.c:1282 #, c-format @@ -8277,33 +8498,33 @@ msgstr "URL: %s" #: builtin/remote.c:1295 #, c-format msgid " * [would prune] %s" -msgstr " * [würde veralteten Zweig entfernen] %s" +msgstr " * [würde veralteten Branch entfernen] %s" #: builtin/remote.c:1298 #, c-format msgid " * [pruned] %s" -msgstr "* [veralteten Zweig entfernt] %s" +msgstr "* [veralteten Branch entfernt] %s" #: builtin/remote.c:1321 msgid "prune remotes after fetching" -msgstr "entfernt veraltete Zweige im Fernarchiv nach dem Abholen" +msgstr "entfernt veraltete Branches im Remote-Repository nach \"fetch\"" #: builtin/remote.c:1387 builtin/remote.c:1461 #, c-format msgid "No such remote '%s'" -msgstr "Kein solches externes Projektarchiv '%s'" +msgstr "Kein solches Remote-Repository '%s'" #: builtin/remote.c:1407 msgid "add branch" -msgstr "fügt Zweig hinzu" +msgstr "fügt Branch hinzu" #: builtin/remote.c:1414 msgid "no remote specified" -msgstr "kein externes Projektarchiv angegeben" +msgstr "kein Remote-Repository angegeben" #: builtin/remote.c:1436 msgid "manipulate push URLs" -msgstr "manipuliert URLs zum Versenden" +msgstr "manipuliert URLs für \"push\"" #: builtin/remote.c:1438 msgid "add URL" @@ -8330,7 +8551,7 @@ msgstr "Keine solche URL gefunden: %s" #: builtin/remote.c:1497 msgid "Will not delete all non-push URLs" -msgstr "Werde keine URLs entfernen, die nicht für den Versand bestimmt sind" +msgstr "Werde keine URLs entfernen, die nicht für \"push\" bestimmt sind" #: builtin/remote.c:1569 msgid "be verbose; must be placed before a subcommand" @@ -8366,21 +8587,21 @@ msgstr "git rerere [clean | forget path... | status | remaining | diff | gc]" #: builtin/rerere.c:56 msgid "register clean resolutions in index" -msgstr "registriert saubere Auflösungen in der Bereitstellung" +msgstr "registriert saubere Auflösungen in der Staging-Area" #: builtin/reset.c:25 msgid "" "git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]" msgstr "" -"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<Version>]" +"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<Commit>]" #: builtin/reset.c:26 msgid "git reset [-q] <tree-ish> [--] <paths>..." -msgstr "git reset [-q] <Versionsreferenz> [--] <Pfade>..." +msgstr "git reset [-q] <Commit-Referenz> [--] <Pfade>..." #: builtin/reset.c:27 msgid "git reset --patch [<tree-ish>] [--] [<paths>...]" -msgstr "git reset --patch [<Versionsreferenz>] [--] [<Pfade>...]" +msgstr "git reset --patch [<Commit-Referenz>] [--] [<Pfade>...]" #: builtin/reset.c:33 msgid "mixed" @@ -8404,110 +8625,108 @@ msgstr "keep" #: builtin/reset.c:73 msgid "You do not have a valid HEAD." -msgstr "Sie haben keine gültige Zweigspitze (HEAD)." +msgstr "Sie haben keinen gültigen HEAD." #: builtin/reset.c:75 msgid "Failed to find tree of HEAD." -msgstr "Fehler beim Finden des Baumes der Zweigspitze (HEAD)." +msgstr "Fehler beim Finden des \"Tree\"-Objektes von HEAD." #: builtin/reset.c:81 #, c-format msgid "Failed to find tree of %s." -msgstr "Fehler beim Finden des Baumes von %s." +msgstr "Fehler beim Finden des \"Tree\"-Objektes von %s." -#: builtin/reset.c:98 +#: builtin/reset.c:99 #, c-format msgid "HEAD is now at %s" -msgstr "Zweigspitze (HEAD) ist jetzt bei %s" +msgstr "HEAD ist jetzt bei %s" -#: builtin/reset.c:169 +#: builtin/reset.c:172 #, c-format msgid "Cannot do a %s reset in the middle of a merge." -msgstr "" -"Kann keine '%s' Zurücksetzung durchführen, während eine Zusammenführung im " -"Gange ist." +msgstr "Kann keinen '%s'-Reset durchführen, während ein Merge im Gange ist." -#: builtin/reset.c:248 +#: builtin/reset.c:251 msgid "be quiet, only report errors" msgstr "weniger Ausgaben, meldet nur Fehler" -#: builtin/reset.c:250 +#: builtin/reset.c:253 msgid "reset HEAD and index" -msgstr "setzt Zweigspitze (HEAD) und Bereitstellung neu" +msgstr "setzt HEAD und Staging-Area um" -#: builtin/reset.c:251 +#: builtin/reset.c:254 msgid "reset only HEAD" -msgstr "setzt nur Zweigspitze (HEAD) neu" +msgstr "setzt nur HEAD um" -#: builtin/reset.c:253 builtin/reset.c:255 +#: builtin/reset.c:256 builtin/reset.c:258 msgid "reset HEAD, index and working tree" -msgstr "setzt Zweigspitze (HEAD), Bereitstellung und Arbeitsbaum neu" +msgstr "setzt HEAD, Staging-Area und Arbeitsverzeichnis um" -#: builtin/reset.c:257 +#: builtin/reset.c:260 msgid "reset HEAD but keep local changes" -msgstr "setzt Zweigspitze (HEAD) neu, behält aber lokale Änderungen" +msgstr "setzt HEAD um, behält aber lokale Änderungen" -#: builtin/reset.c:275 +#: builtin/reset.c:278 #, c-format msgid "Failed to resolve '%s' as a valid revision." -msgstr "Konnte '%s' nicht als gültige Revision auflösen." +msgstr "Konnte '%s' nicht als gültigen Commit auflösen." -#: builtin/reset.c:278 builtin/reset.c:286 +#: builtin/reset.c:281 builtin/reset.c:289 #, c-format msgid "Could not parse object '%s'." msgstr "Konnte Objekt '%s' nicht parsen." -#: builtin/reset.c:283 +#: builtin/reset.c:286 #, c-format msgid "Failed to resolve '%s' as a valid tree." -msgstr "Konnte '%s' nicht als gültigen Baum auflösen." +msgstr "Konnte '%s' nicht als gültiges \"Tree\"-Objekt auflösen." -#: builtin/reset.c:292 +#: builtin/reset.c:295 msgid "--patch is incompatible with --{hard,mixed,soft}" msgstr "--patch ist inkompatibel mit --{hard,mixed,soft}" -#: builtin/reset.c:301 +#: builtin/reset.c:304 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead." msgstr "" "--mixed mit Pfaden ist veraltet; benutzen Sie stattdessen 'git reset -- " "<Pfade>'." -#: builtin/reset.c:303 +#: builtin/reset.c:306 #, c-format msgid "Cannot do %s reset with paths." -msgstr "Eine '%s' Zurücksetzung mit Pfaden ist nicht möglich." +msgstr "Ein '%s'-Reset mit Pfaden ist nicht möglich." -#: builtin/reset.c:313 +#: builtin/reset.c:316 #, c-format msgid "%s reset is not allowed in a bare repository" -msgstr "'%s' Zurücksetzung ist in einem bloßen Projektarchiv nicht erlaubt" +msgstr "'%s'-Reset ist in einem Bare-Repository nicht erlaubt" -#: builtin/reset.c:333 +#: builtin/reset.c:336 #, c-format msgid "Could not reset index file to revision '%s'." -msgstr "Konnte Bereitstellungsdatei nicht zu Revision '%s' setzen." +msgstr "Konnte Staging-Area-Datei nicht zu Commit '%s' setzen." -#: builtin/reset.c:339 +#: builtin/reset.c:342 msgid "Unstaged changes after reset:" -msgstr "Nicht bereitgestellte Änderungen nach Zurücksetzung:" +msgstr "Nicht zum Commit vorgemerkte Änderungen nach Zurücksetzung:" -#: builtin/reset.c:344 +#: builtin/reset.c:347 msgid "Could not write new index file." -msgstr "Konnte neue Bereitstellungsdatei nicht schreiben." +msgstr "Konnte neue Staging-Area-Datei nicht schreiben." -#: builtin/rev-parse.c:339 +#: builtin/rev-parse.c:345 msgid "git rev-parse --parseopt [options] -- [<args>...]" msgstr "git rev-parse --parseopt [Optionen] -- [<Argumente>...]" -#: builtin/rev-parse.c:344 +#: builtin/rev-parse.c:350 msgid "keep the `--` passed as an arg" msgstr "lässt `--` als Argument" -#: builtin/rev-parse.c:346 +#: builtin/rev-parse.c:352 msgid "stop parsing after the first non-option argument" msgstr "stoppt das Parsen nach dem ersten Argument was keine Option ist" -#: builtin/rev-parse.c:464 +#: builtin/rev-parse.c:470 msgid "" "git rev-parse --parseopt [options] -- [<args>...]\n" " or: git rev-parse --sq-quote [<arg>...]\n" @@ -8524,7 +8743,7 @@ msgstr "" #: builtin/revert.c:22 msgid "git revert [options] <commit-ish>..." -msgstr "git revert [Optionen] <Versionsangabe>..." +msgstr "git revert [Optionen] <Commit-Angabe>..." #: builtin/revert.c:23 msgid "git revert <subcommand>" @@ -8532,185 +8751,212 @@ msgstr "git revert <Unterkommando>" #: builtin/revert.c:28 msgid "git cherry-pick [options] <commit-ish>..." -msgstr "git cherry-pick [Optionen] <Versionsangabe>..." +msgstr "git cherry-pick [Optionen] <Commit-Angabe>..." #: builtin/revert.c:29 msgid "git cherry-pick <subcommand>" msgstr "git cherry-pick <Unterkommando>" -#: builtin/revert.c:70 builtin/revert.c:92 +#: builtin/revert.c:71 builtin/revert.c:94 #, c-format msgid "%s: %s cannot be used with %s" msgstr "%s: %s kann nicht mit %s verwendet werden" -#: builtin/revert.c:103 +#: builtin/revert.c:105 msgid "end revert or cherry-pick sequence" msgstr "beendet \"revert\" oder \"cherry-pick\" Ablauf" -#: builtin/revert.c:104 +#: builtin/revert.c:106 msgid "resume revert or cherry-pick sequence" msgstr "setzt \"revert\" oder \"cherry-pick\" Ablauf fort" -#: builtin/revert.c:105 +#: builtin/revert.c:107 msgid "cancel revert or cherry-pick sequence" msgstr "bricht \"revert\" oder \"cherry-pick\" Ablauf ab" -#: builtin/revert.c:106 +#: builtin/revert.c:108 msgid "don't automatically commit" -msgstr "trägt nicht automatisch ein" +msgstr "committet nicht automatisch" -#: builtin/revert.c:107 +#: builtin/revert.c:109 msgid "edit the commit message" -msgstr "Bearbeitung der Versionsbeschreibung" +msgstr "Bearbeitung der Commit-Beschreibung" -#: builtin/revert.c:110 +#: builtin/revert.c:112 msgid "parent number" msgstr "Nummer des Elternteils" -#: builtin/revert.c:112 +#: builtin/revert.c:114 msgid "merge strategy" -msgstr "Zusammenführungsstrategie" +msgstr "Merge-Strategie" -#: builtin/revert.c:113 +#: builtin/revert.c:115 msgid "option" msgstr "Option" -#: builtin/revert.c:114 +#: builtin/revert.c:116 msgid "option for merge strategy" -msgstr "Option für Zusammenführungsstrategie" +msgstr "Option für Merge-Strategie" -#: builtin/revert.c:125 +#: builtin/revert.c:127 msgid "append commit name" -msgstr "hängt Versionsnamen an" +msgstr "hängt Commit-Namen an" -#: builtin/revert.c:126 +#: builtin/revert.c:128 msgid "allow fast-forward" msgstr "erlaubt Vorspulen" -#: builtin/revert.c:127 +#: builtin/revert.c:129 msgid "preserve initially empty commits" -msgstr "erhält ursprüngliche, leere Versionen" +msgstr "erhält ursprüngliche, leere Commits" -#: builtin/revert.c:128 +#: builtin/revert.c:130 msgid "allow commits with empty messages" -msgstr "erlaubt Version mit leerer Beschreibung" +msgstr "erlaubt Commits mit leerer Beschreibung" -#: builtin/revert.c:129 +#: builtin/revert.c:131 msgid "keep redundant, empty commits" -msgstr "behält redundante, leere Versionen" +msgstr "behält redundante, leere Commits" -#: builtin/revert.c:133 +#: builtin/revert.c:135 msgid "program error" msgstr "Programmfehler" -#: builtin/revert.c:223 +#: builtin/revert.c:225 msgid "revert failed" msgstr "\"revert\" fehlgeschlagen" -#: builtin/revert.c:238 +#: builtin/revert.c:240 msgid "cherry-pick failed" msgstr "\"cherry-pick\" fehlgeschlagen" -#: builtin/rm.c:15 +#: builtin/rm.c:16 msgid "git rm [options] [--] <file>..." msgstr "git rm [Optionen] [--] [<Datei>...]" -#: builtin/rm.c:64 builtin/rm.c:186 -#, c-format +#: builtin/rm.c:64 msgid "" -"submodule '%s' (or one of its nested submodules) uses a .git directory\n" +"the following submodule (or one of its nested submodules)\n" +"uses a .git directory:" +msgid_plural "" +"the following submodules (or one of its nested submodules)\n" +"use a .git directory:" +msgstr[0] "" +"das folgende Submodul (oder ein geschachteltes Submodul hiervon)\n" +"benutzt ein .git-Verzeichnis:" +msgstr[1] "" +"die folgenden Submodule (oder ein geschachteltes Submodul hiervon)\n" +"benutzen ein .git-Verzeichnis:" + +#: builtin/rm.c:70 +msgid "" +"\n" "(use 'rm -rf' if you really want to remove it including all of its history)" msgstr "" -"Unterprojekt '%s' (oder ein geschachteltes Unterprojekt hiervon) verwendet\n" -"ein .git-Verzeichnis (benutzen Sie 'rm -rf' wenn Sie dieses wirklich " -"mitsamt\n" +"\n" +"(benutzen Sie 'rm -rf' wenn Sie dieses Submodul wirklich mitsamt\n" "seiner Historie löschen möchten)" -#: builtin/rm.c:174 -#, c-format +#: builtin/rm.c:230 msgid "" -"'%s' has staged content different from both the file and the HEAD\n" -"(use -f to force removal)" -msgstr "" -"'%s' hat bereitgestellten Inhalt unterschiedlich zu der Datei und der\n" -"Zweigspitze (HEAD) (benutzen Sie -f um die Entfernung zu erzwingen)" +"the following file has staged content different from both the\n" +"file and the HEAD:" +msgid_plural "" +"the following files have staged content different from both the\n" +"file and the HEAD:" +msgstr[0] "" +"die folgende Datei hat zum Commit vorgemerkte Änderungen unterschiedlich\n" +"zu der Datei und HEAD:" +msgstr[1] "" +"die folgenden Dateien haben zum Commit vorgemerkte Änderungen " +"unterschiedlich\n" +"zu der Datei und HEAD:" -#: builtin/rm.c:180 -#, c-format +#: builtin/rm.c:235 msgid "" -"'%s' has changes staged in the index\n" -"(use --cached to keep the file, or -f to force removal)" +"\n" +"(use -f to force removal)" msgstr "" -"'%s' hat Änderungen in der Bereitstellung\n" -"(benutzen Sie --cached um die Datei zu behalten, oder -f um die Entfernung " -"zu erzwingen)" +"\n" +"(benutzen Sie -f um die Löschung zu erzwingen)" -#: builtin/rm.c:191 -#, c-format +#: builtin/rm.c:239 +msgid "the following file has changes staged in the index:" +msgid_plural "the following files have changes staged in the index:" +msgstr[0] "die folgende Datei hat zum Commit vorgemerkte Änderungen:" +msgstr[1] "die folgenden Dateien haben zum Commit vorgemerkte Änderungen:" + +#: builtin/rm.c:243 builtin/rm.c:254 msgid "" -"'%s' has local modifications\n" +"\n" "(use --cached to keep the file, or -f to force removal)" msgstr "" -"'%s' hat lokale Modifikationen\n" +"\n" "(benutzen Sie --cached um die Datei zu behalten, oder -f um die Entfernung " "zu erzwingen)" -#: builtin/rm.c:207 +#: builtin/rm.c:251 +msgid "the following file has local modifications:" +msgid_plural "the following files have local modifications:" +msgstr[0] "die folgende Datei hat lokale Änderungen:" +msgstr[1] "die folgenden Dateien haben lokale Änderungen:" + +#: builtin/rm.c:269 msgid "do not list removed files" msgstr "listet keine gelöschten Dateien auf" -#: builtin/rm.c:208 +#: builtin/rm.c:270 msgid "only remove from the index" -msgstr "entfernt nur aus der Bereitstellung" +msgstr "entfernt nur aus der Staging-Area" -#: builtin/rm.c:209 +#: builtin/rm.c:271 msgid "override the up-to-date check" msgstr "überschreibt die \"up-to-date\" Prüfung" -#: builtin/rm.c:210 +#: builtin/rm.c:272 msgid "allow recursive removal" msgstr "erlaubt rekursive Entfernung" -#: builtin/rm.c:212 +#: builtin/rm.c:274 msgid "exit with a zero status even if nothing matched" msgstr "beendet mit Rückgabewert 0, wenn keine Ãœbereinstimmung gefunden wurde" -#: builtin/rm.c:283 +#: builtin/rm.c:345 #, c-format msgid "not removing '%s' recursively without -r" msgstr "'%s' wird nicht ohne -r rekursiv entfernt" -#: builtin/rm.c:322 +#: builtin/rm.c:384 #, c-format msgid "git rm: unable to remove %s" msgstr "git rm: konnte %s nicht löschen" #: builtin/shortlog.c:13 msgid "git shortlog [<options>] [<revision range>] [[--] [<path>...]]" -msgstr "git shortlog [<Optionen>] [Revisionsbereich] [[--] <Pfad>...]" +msgstr "git shortlog [<Optionen>] [Commitbereich] [[--] <Pfad>...]" #: builtin/shortlog.c:131 #, c-format msgid "Missing author: %s" msgstr "fehlender Autor: %s" -#: builtin/shortlog.c:227 +#: builtin/shortlog.c:228 msgid "sort output according to the number of commits per author" -msgstr "sortiert die Ausgabe entsprechend der Anzahl von Versionen pro Autor" +msgstr "sortiert die Ausgabe entsprechend der Anzahl von Commits pro Autor" -#: builtin/shortlog.c:229 +#: builtin/shortlog.c:230 msgid "Suppress commit descriptions, only provides commit count" -msgstr "Unterdrückt Versionsbeschreibungen, liefert nur Anzahl der Versionen" +msgstr "Unterdrückt Commit-Beschreibungen, liefert nur Anzahl der Commits" -#: builtin/shortlog.c:231 +#: builtin/shortlog.c:232 msgid "Show the email address of each author" msgstr "Zeigt die Email-Adresse von jedem Autor" -#: builtin/shortlog.c:232 +#: builtin/shortlog.c:233 msgid "w[,i1[,i2]]" msgstr "w[,i1[,i2]]" -#: builtin/shortlog.c:233 +#: builtin/shortlog.c:234 msgid "Linewrap output" msgstr "Ausgabe mit Zeilenumbrüchen" @@ -8723,8 +8969,8 @@ msgid "" msgstr "" "git show-branch [-a|--all] [-r|--remotes] [--topo-order | --date-order] [--" "current] [--color[=<Wann>] | --no-color] [--sparse] [--more=<n> | --list | --" -"independent | --merge-base] [--no-name | --sha1-name] [--topics] " -"[(<Revision> | <glob>)...]" +"independent | --merge-base] [--no-name | --sha1-name] [--topics] [(<Commit> " +"| <glob>)...]" #: builtin/show-branch.c:10 msgid "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]" @@ -8732,19 +8978,19 @@ msgstr "git show-branch (-g|--reflog)[=<n>[,<Basis>]] [--list] [<Referenz>]" #: builtin/show-branch.c:650 msgid "show remote-tracking and local branches" -msgstr "zeigt externe Ãœbernahmezweige und lokale Zweige an" +msgstr "zeigt Remote-Tracking und lokale Branches an" #: builtin/show-branch.c:652 msgid "show remote-tracking branches" -msgstr "zeigt externe Ãœbernahmezweige an" +msgstr "zeigt Remote-Tracking-Branches an" #: builtin/show-branch.c:654 msgid "color '*!+-' corresponding to the branch" -msgstr "färbt '*!+-' entsprechend des Zweiges ein" +msgstr "färbt '*!+-' entsprechend des Branches ein" #: builtin/show-branch.c:656 msgid "show <n> more commits after the common ancestor" -msgstr "zeigt <n> weitere Versionen nach dem gemeinsamen Vorfahren" +msgstr "zeigt <n> weitere Commits nach dem gemeinsamen Vorgänger-Commit" #: builtin/show-branch.c:658 msgid "synonym to more=-1" @@ -8756,15 +9002,15 @@ msgstr "unterdrückt Namen" #: builtin/show-branch.c:661 msgid "include the current branch" -msgstr "bezieht den aktuellen Zweig ein" +msgstr "bezieht den aktuellen Branch ein" #: builtin/show-branch.c:663 msgid "name commits with their object names" -msgstr "benennt Versionen nach ihren Objektnamen" +msgstr "benennt Commits nach ihren Objektnamen" #: builtin/show-branch.c:665 msgid "show possible merge bases" -msgstr "zeigt mögliche Basen für Zusammenführung" +msgstr "zeigt mögliche Merge-Basen an" #: builtin/show-branch.c:667 msgid "show refs unreachable from any other ref" @@ -8772,29 +9018,27 @@ msgstr "zeigt Referenzen die unerreichbar von allen anderen Referenzen sind" #: builtin/show-branch.c:669 msgid "show commits in topological order" -msgstr "zeigt Versionen in topologischer Ordnung" +msgstr "zeigt Commits in topologischer Ordnung" -#: builtin/show-branch.c:671 +#: builtin/show-branch.c:672 msgid "show only commits not on the first branch" -msgstr "zeigt nur Versionen, die sich nicht im ersten Zweig befinden" +msgstr "zeigt nur Commits, die sich nicht im ersten Branch befinden" -#: builtin/show-branch.c:673 +#: builtin/show-branch.c:674 msgid "show merges reachable from only one tip" -msgstr "" -"zeigt Zusammenführungen, die nur von einer Zweigspitze aus erreichbar sind" +msgstr "zeigt Merges, die nur von einem Branch aus erreichbar sind" -#: builtin/show-branch.c:675 -msgid "show commits where no parent comes before its children" -msgstr "zeigt Versionen, wo kein Elternteil vor seinem Kind kommt" +#: builtin/show-branch.c:676 +msgid "topologically sort, maintaining date order where possible" +msgstr "topologische Sortierung, Beibehaltung Datumsordnung wo möglich" -#: builtin/show-branch.c:677 +#: builtin/show-branch.c:679 msgid "<n>[,<base>]" msgstr "<n>[,<Basis>]" -#: builtin/show-branch.c:678 +#: builtin/show-branch.c:680 msgid "show <n> most recent ref-log entries starting at base" -msgstr "" -"zeigt die <n> jüngsten Einträge im Referenzprotokoll beginnend an der Basis" +msgstr "zeigt die <n> jüngsten Einträge im Reflog beginnend an der Basis" #: builtin/show-ref.c:10 msgid "" @@ -8808,40 +9052,40 @@ msgstr "" msgid "git show-ref --exclude-existing[=pattern] < ref-list" msgstr "git show-ref --exclude-existing[=Muster] < ref-list" -#: builtin/show-ref.c:165 +#: builtin/show-ref.c:168 msgid "only show tags (can be combined with heads)" -msgstr "zeigt nur Markierungen (kann mit \"heads\" kombiniert werden)" +msgstr "zeigt nur Tags (kann mit \"heads\" kombiniert werden)" -#: builtin/show-ref.c:166 +#: builtin/show-ref.c:169 msgid "only show heads (can be combined with tags)" -msgstr "zeigt nur Zweigspitzen (kann mit \"tags\" kombiniert werden)" +msgstr "zeigt nur Branches (kann mit \"tags\" kombiniert werden)" -#: builtin/show-ref.c:167 +#: builtin/show-ref.c:170 msgid "stricter reference checking, requires exact ref path" msgstr "strengere Referenzprüfung, erfordert exakten Referenzpfad" -#: builtin/show-ref.c:170 builtin/show-ref.c:172 -msgid "show the HEAD reference" -msgstr "zeigt Referenz der Zweigspitze (HEAD)" +#: builtin/show-ref.c:173 builtin/show-ref.c:176 +msgid "show the HEAD reference, even if it would be filtered out" +msgstr "zeigt die HEAD-Referenz, selbst wenn diese ausgefiltert werden würde" -#: builtin/show-ref.c:174 +#: builtin/show-ref.c:178 msgid "dereference tags into object IDs" -msgstr "dereferenziert Markierungen in Objekt-Identifikationen" +msgstr "dereferenziert Tags in Objekt-Identifikationen" -#: builtin/show-ref.c:176 +#: builtin/show-ref.c:180 msgid "only show SHA1 hash using <n> digits" msgstr "zeigt nur SHA1 Hash mit <n> Ziffern" -#: builtin/show-ref.c:180 +#: builtin/show-ref.c:184 msgid "do not print results to stdout (useful with --verify)" msgstr "" "keine Ausgabe der Ergebnisse in die Standard-Ausgabe (nützlich mit --verify)" -#: builtin/show-ref.c:182 +#: builtin/show-ref.c:186 msgid "show refs from stdin that aren't in local repository" msgstr "" "zeigt Referenzen von der Standard-Eingabe, die sich nicht im lokalen " -"Projektarchiv befinden, an" +"Repository befinden, an" #: builtin/symbolic-ref.c:7 msgid "git symbolic-ref [options] name [ref]" @@ -8876,24 +9120,24 @@ msgstr "Grund für die Aktualisierung" msgid "" "git tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]" msgstr "" -"git tag [-a|-s|-u <Schlüssel-id>] [-f] [-m <Nachricht>|-F <Datei>] " -"<Markierungsname> [<Zweig>]" +"git tag [-a|-s|-u <Schlüssel-id>] [-f] [-m <Nachricht>|-F <Datei>] <Tagname> " +"[<Commit>]" #: builtin/tag.c:23 msgid "git tag -d <tagname>..." -msgstr "git tag -d <Markierungsname>..." +msgstr "git tag -d <Tagname>..." #: builtin/tag.c:24 msgid "" "git tag -l [-n[<num>]] [--contains <commit>] [--points-at <object>] \n" "\t\t[<pattern>...]" msgstr "" -"git tag -l [-n[<Nummer>]] [--contains <Version>] [--points-at <Objekt>] \n" +"git tag -l [-n[<Nummer>]] [--contains <Commit>] [--points-at <Objekt>] \n" "\t\t[<Muster>...]" #: builtin/tag.c:26 msgid "git tag -v <tagname>..." -msgstr "git tag -v <Markierungsname>..." +msgstr "git tag -v <Tagname>..." #: builtin/tag.c:60 #, c-format @@ -8903,22 +9147,22 @@ msgstr "fehlerhaftes Objekt bei '%s'" #: builtin/tag.c:207 #, c-format msgid "tag name too long: %.*s..." -msgstr "Markierungsname zu lang: %.*s..." +msgstr "Tagname zu lang: %.*s..." #: builtin/tag.c:212 #, c-format msgid "tag '%s' not found." -msgstr "Markierung '%s' nicht gefunden." +msgstr "Tag '%s' nicht gefunden." #: builtin/tag.c:227 #, c-format msgid "Deleted tag '%s' (was %s)\n" -msgstr "Gelöschte Markierung '%s' (war %s)\n" +msgstr "Tag '%s' gelöscht (war %s)\n" #: builtin/tag.c:239 #, c-format msgid "could not verify the tag '%s'" -msgstr "Konnte Markierung '%s' nicht verifizieren" +msgstr "Konnte Tag '%s' nicht verifizieren" #: builtin/tag.c:249 #, c-format @@ -8928,7 +9172,7 @@ msgid "" "Lines starting with '%c' will be ignored.\n" msgstr "" "\n" -"Geben Sie eine Markierungsbeschreibung ein.\n" +"Geben Sie eine Tag-Beschreibung ein.\n" "Zeilen, die mit '%c' beginnen, werden ignoriert.\n" #: builtin/tag.c:253 @@ -8940,17 +9184,17 @@ msgid "" "want to.\n" msgstr "" "\n" -"Geben Sie eine Markierungsbeschreibung ein.\n" +"Geben Sie eine Tag-Beschreibung ein.\n" "Zeilen, die mit '%c' beginnen, werden behalten; Sie dürfen diese\n" "selbst entfernen wenn Sie möchten.\n" #: builtin/tag.c:292 msgid "unable to sign the tag" -msgstr "konnte Markierung nicht signieren" +msgstr "konnte Tag nicht signieren" #: builtin/tag.c:294 msgid "unable to write tag file" -msgstr "konnte Markierungsdatei nicht schreiben" +msgstr "konnte Tag-Datei nicht schreiben" #: builtin/tag.c:319 msgid "bad object type." @@ -8958,16 +9202,16 @@ msgstr "ungültiger Objekt-Typ" #: builtin/tag.c:332 msgid "tag header too big." -msgstr "Markierungskopf zu groß." +msgstr "Tag-Kopf zu groß." #: builtin/tag.c:368 msgid "no tag message?" -msgstr "keine Markierungsbeschreibung?" +msgstr "keine Tag-Beschreibung?" #: builtin/tag.c:374 #, c-format msgid "The tag message has been left in %s\n" -msgstr "Die Markierungsbeschreibung wurde gelassen in %s\n" +msgstr "Die Tag-Beschreibung wurde gelassen in %s\n" #: builtin/tag.c:423 msgid "switch 'points-at' requires an object" @@ -8980,59 +9224,59 @@ msgstr "fehlerhafter Objekt-Name '%s'" #: builtin/tag.c:445 msgid "list tag names" -msgstr "listet Markierungsnamen auf" +msgstr "listet Tagnamen auf" #: builtin/tag.c:447 msgid "print <n> lines of each tag message" -msgstr "zeigt <n> Zeilen jeder Markierungsbeschreibung" +msgstr "zeigt <n> Zeilen jeder Tag-Beschreibung" #: builtin/tag.c:449 msgid "delete tags" -msgstr "löscht Markierungen" +msgstr "löscht Tags" #: builtin/tag.c:450 msgid "verify tags" -msgstr "überprüft Markierungen" +msgstr "überprüft Tags" #: builtin/tag.c:452 msgid "Tag creation options" -msgstr "Optionen für Erstellung von Markierungen" +msgstr "Optionen für Erstellung von Tags" #: builtin/tag.c:454 msgid "annotated tag, needs a message" -msgstr "annotierte Markierung, benötigt eine Beschreibung" +msgstr "annotierter Tag, benötigt eine Beschreibung" #: builtin/tag.c:456 msgid "tag message" -msgstr "Markierungsbeschreibung" +msgstr "Tag-Beschreibung" #: builtin/tag.c:458 msgid "annotated and GPG-signed tag" -msgstr "annotierte und GPG-signierte Markierung" +msgstr "annotierter und GPG-signierter Tag" #: builtin/tag.c:462 msgid "use another key to sign the tag" -msgstr "verwendet einen anderen Schlüssel um die Markierung zu signieren" +msgstr "verwendet einen anderen Schlüssel um den Tag zu signieren" #: builtin/tag.c:463 msgid "replace the tag if exists" -msgstr "ersetzt die Markierung, wenn sie existiert" +msgstr "ersetzt den Tag, wenn er existiert" #: builtin/tag.c:464 msgid "show tag list in columns" -msgstr "zeigt Liste der Markierungen in Spalten" +msgstr "zeigt Liste der Tags in Spalten" #: builtin/tag.c:466 msgid "Tag listing options" -msgstr "Optionen für Auflistung der Markierungen" +msgstr "Optionen für Auflistung der Tags" #: builtin/tag.c:469 msgid "print only tags that contain the commit" -msgstr "gibt nur Markierungen aus, die diese Version beinhalten" +msgstr "gibt nur Tags aus, die diesen Commit beinhalten" #: builtin/tag.c:475 msgid "print only tags of the object" -msgstr "gibt nur Markierungen von dem Objekt aus" +msgstr "gibt nur Tags von dem Objekt aus" #: builtin/tag.c:504 msgid "--column and -n are incompatible" @@ -9061,12 +9305,12 @@ msgstr "zu viele Parameter" #: builtin/tag.c:559 #, c-format msgid "'%s' is not a valid tag name." -msgstr "'%s' ist kein gültiger Markierungsname." +msgstr "'%s' ist kein gültiger Tagname." #: builtin/tag.c:564 #, c-format msgid "tag '%s' already exists" -msgstr "Markierung '%s' existiert bereits" +msgstr "Tag '%s' existiert bereits" #: builtin/tag.c:582 #, c-format @@ -9081,7 +9325,7 @@ msgstr "%s: kann Referenz nicht aktualisieren" #: builtin/tag.c:586 #, c-format msgid "Updated tag '%s' (was %s)\n" -msgstr "Aktualisierte Markierung '%s' (war %s)\n" +msgstr "Tag '%s' aktualisiert (war %s)\n" #: builtin/update-index.c:401 msgid "git update-index [options] [--] [<file>...]" @@ -9090,12 +9334,12 @@ msgstr "git update-index [Optionen] [--] [<Datei>...]" #: builtin/update-index.c:718 msgid "continue refresh even when index needs update" msgstr "" -"Aktualisierung fortsetzen, auch wenn die Bereitstellung aktualisiert werden " +"Aktualisierung fortsetzen, auch wenn die Staging-Area aktualisiert werden " "muss" #: builtin/update-index.c:721 msgid "refresh: ignore submodules" -msgstr "Aktualisierung: ignoriert Unterprojekte" +msgstr "Aktualisierung: ignoriert Submodule" #: builtin/update-index.c:724 msgid "do not ignore new files" @@ -9107,12 +9351,12 @@ msgstr "lässt Dateien Verzeichnisse ersetzen, und umgedreht" #: builtin/update-index.c:728 msgid "notice files missing from worktree" -msgstr "beachtet fehlende Dateien im Arbeitsbaum" +msgstr "beachtet fehlende Dateien im Arbeitsverzeichnis" #: builtin/update-index.c:730 msgid "refresh even if index contains unmerged entries" msgstr "" -"aktualisiert, auch wenn die Bereitstellung nicht zusammengeführte Einträge " +"aktualisiert, auch wenn die Staging-Area nicht zusammengeführte Einträge " "beinhaltet" #: builtin/update-index.c:733 @@ -9129,7 +9373,7 @@ msgstr "<Modus> <Objekt> <Pfad>" #: builtin/update-index.c:742 msgid "add the specified entry to the index" -msgstr "stellt den angegebenen Eintrag zur Eintragung bereit" +msgstr "merkt den angegebenen Eintrag zum Commit vor" #: builtin/update-index.c:746 msgid "(+/-)x" @@ -9158,12 +9402,13 @@ msgstr "löscht \"skip-worktree\"-Bit" #: builtin/update-index.c:763 msgid "add to index only; do not add content to object database" msgstr "" -"fügt nur der Bereitstellung hinzu; Inhalt wird nicht der Objekt-Datenbank " -"hinzugefügt" +"merkt die Änderungen nur zum Commit vor; Inhalt wird nicht der Objekt-" +"Datenbank hinzugefügt" #: builtin/update-index.c:765 msgid "remove named paths even if present in worktree" -msgstr "löscht benannte Pfade, auch wenn sie sich im Arbeitsbaum befinden" +msgstr "" +"löscht benannte Pfade, auch wenn sie sich im Arbeitsverzeichnis befinden" #: builtin/update-index.c:767 msgid "with --stdin: input lines are terminated by null bytes" @@ -9175,7 +9420,7 @@ msgstr "liest Liste der zu aktualisierenden Pfade von der Standard-Eingabe" #: builtin/update-index.c:773 msgid "add entries from standard input to the index" -msgstr "fügt Einträge von der Standard-Eingabe der Bereitstellung hinzu" +msgstr "merkt Einträge von der Standard-Eingabe zum Commit vor" #: builtin/update-index.c:777 msgid "repopulate stages #2 and #3 for the listed paths" @@ -9184,12 +9429,11 @@ msgstr "" #: builtin/update-index.c:781 msgid "only update entries that differ from HEAD" -msgstr "" -"aktualisiert nur Einträge, die unterschiedlich zur Zweigspitze (HEAD) sind" +msgstr "aktualisiert nur Einträge, die unterschiedlich zu HEAD sind" #: builtin/update-index.c:785 msgid "ignore files missing from worktree" -msgstr "ignoriert fehlende Dateien im Arbeitsbaum" +msgstr "ignoriert fehlende Dateien im Arbeitsverzeichnis" #: builtin/update-index.c:788 msgid "report actions to standard output" @@ -9201,7 +9445,7 @@ msgstr "(für Fremdprogramme) keine gespeicherten, nicht aufgelöste Konflikte" #: builtin/update-index.c:794 msgid "write index in this format" -msgstr "schreibt Bereitstellungsdatei in diesem Format" +msgstr "schreibt Staging-Area-Datei in diesem Format" #: builtin/update-ref.c:7 msgid "git update-ref [options] -d <refname> [<oldval>]" @@ -9241,11 +9485,11 @@ msgstr "zeigt nur Statistiken" #: builtin/verify-tag.c:17 msgid "git verify-tag [-v|--verbose] <tag>..." -msgstr "git verify-tag [-v|--verbose] <Markierung>..." +msgstr "git verify-tag [-v|--verbose] <Tag>..." #: builtin/verify-tag.c:73 msgid "print tag contents" -msgstr "gibt Markierungsinhalte aus" +msgstr "gibt Tag-Inhalte aus" #: builtin/write-tree.c:13 msgid "git write-tree [--missing-ok] [--prefix=<prefix>/]" @@ -9257,13 +9501,13 @@ msgstr "<Prefix>/" #: builtin/write-tree.c:27 msgid "write tree object for a subdirectory <prefix>" -msgstr "schreibt das Baumobjekt für ein Unterverzeichnis <Prefix>" +msgstr "schreibt das \"Tree\"-Objekt für ein Unterverzeichnis <Prefix>" #: builtin/write-tree.c:30 msgid "only useful for debugging" msgstr "nur nützlich für Fehlersuche" -#: git.c:16 +#: git.c:17 msgid "" "'git help -a' and 'git help -g' lists available subcommands and some\n" "concept guides. See 'git help <command>' or 'git help <concept>'\n" @@ -9274,25 +9518,29 @@ msgstr "" "oder 'git help <Konzept>' um mehr über ein spezifisches Kommando oder\n" "Konzept zu erfahren." -#: parse-options.h:156 +#: parse-options.h:144 +msgid "expiry date" +msgstr "Verfallsdatum" + +#: parse-options.h:159 msgid "no-op (backward compatibility)" msgstr "Kein Effekt (Rückwärtskompatibilität)" -#: parse-options.h:232 +#: parse-options.h:236 msgid "be more verbose" msgstr "erweiterte Ausgaben" -#: parse-options.h:234 +#: parse-options.h:238 msgid "be more quiet" msgstr "weniger Ausgaben" -#: parse-options.h:240 +#: parse-options.h:244 msgid "use <n> digits to display SHA-1s" msgstr "benutze <n> Ziffern zur Anzeige von SHA-1s" #: common-cmds.h:8 msgid "Add file contents to the index" -msgstr "stellt Dateiinhalte zur Eintragung bereit" +msgstr "merkt Dateiinhalte zum Commit vor" #: common-cmds.h:9 msgid "Find by binary search the change that introduced a bug" @@ -9301,27 +9549,28 @@ msgstr "" #: common-cmds.h:10 msgid "List, create, or delete branches" -msgstr "Zeigt an, erstellt oder entfernt Zweige" +msgstr "Zeigt an, erstellt oder entfernt Branches" #: common-cmds.h:11 msgid "Checkout a branch or paths to the working tree" -msgstr "Checkt Zweige oder Pfade im Arbeitszweig aus" +msgstr "Checkt Branches oder Pfade im Arbeitsverzeichnis aus" #: common-cmds.h:12 msgid "Clone a repository into a new directory" -msgstr "Klont ein Projektarchiv in einem neuen Verzeichnis" +msgstr "Klont ein Repository in einem neuen Verzeichnis" #: common-cmds.h:13 msgid "Record changes to the repository" -msgstr "Trägt Änderungen in das Projektarchiv ein" +msgstr "Trägt Änderungen in das Repository ein" #: common-cmds.h:14 msgid "Show changes between commits, commit and working tree, etc" -msgstr "Zeigt Änderungen zwischen Versionen, Version und Arbeitszweig, etc. an" +msgstr "" +"Zeigt Änderungen zwischen Commits, Commit und Arbeitsverzeichnis, etc. an" #: common-cmds.h:15 msgid "Download objects and refs from another repository" -msgstr "Lädt Objekte und Referenzen von einem anderen Projektarchiv herunter" +msgstr "Lädt Objekte und Referenzen von einem anderen Repository herunter" #: common-cmds.h:16 msgid "Print lines matching a pattern" @@ -9330,11 +9579,11 @@ msgstr "Stellt Zeilen dar, die einem Muster entsprechen" #: common-cmds.h:17 msgid "Create an empty Git repository or reinitialize an existing one" msgstr "" -"Erstellt ein leeres Git-Projektarchiv oder initialisiert ein bestehendes neu" +"Erstellt ein leeres Git-Repository oder initialisiert ein bestehendes neu" #: common-cmds.h:18 msgid "Show commit logs" -msgstr "Zeigt Versionshistorie an" +msgstr "Zeigt Commit-Historie an" #: common-cmds.h:19 msgid "Join two or more development histories together" @@ -9343,30 +9592,30 @@ msgstr "Führt zwei oder mehr Entwicklungszweige zusammen" #: common-cmds.h:20 msgid "Move or rename a file, a directory, or a symlink" msgstr "" -"Verschiebt oder benennt eine Datei, ein Verzeichnis, oder eine symbolische " -"Verknüpfung um" +"Verschiebt oder benennt eine Datei, ein Verzeichnis, oder einen symbolischen " +"Verweis um" #: common-cmds.h:21 -msgid "Fetch from and merge with another repository or a local branch" +msgid "Fetch from and integrate with another repository or a local branch" msgstr "" -"Fordert Objekte von einem externen Projektarchiv an und führt sie mit einem " -"anderen Projektarchiv oder einem lokalen Zweig zusammen" +"Fordert Objekte von einem externen Repository an und führt sie mit einem " +"anderen Repository oder einem lokalen Branch zusammen" #: common-cmds.h:22 msgid "Update remote refs along with associated objects" -msgstr "Aktualisiert externe Referenzen mitsamt den verbundenen Objekten" +msgstr "Aktualisiert Remote-Referenzen mitsamt den verbundenen Objekten" #: common-cmds.h:23 msgid "Forward-port local commits to the updated upstream head" -msgstr "Baut lokale Versionen auf einem aktuellerem externen Zweig neu auf" +msgstr "Baut lokale Commits auf einem aktuellerem Upstream-Branch neu auf" #: common-cmds.h:24 msgid "Reset current HEAD to the specified state" -msgstr "Setzt die aktuelle Zweigspitze (HEAD) zu einem spezifizierten Zustand" +msgstr "Setzt aktuellen HEAD zu einem spezifizierten Zustand" #: common-cmds.h:25 msgid "Remove files from the working tree and from the index" -msgstr "Löscht Dateien im Arbeitszweig und von der Bereitstellung" +msgstr "Löscht Dateien im Arbeitsverzeichnis und von der Staging-Area" #: common-cmds.h:26 msgid "Show various types of objects" @@ -9374,54 +9623,53 @@ msgstr "Zeigt verschiedene Arten von Objekten an" #: common-cmds.h:27 msgid "Show the working tree status" -msgstr "Zeigt den Zustand des Arbeitszweiges an" +msgstr "Zeigt den Zustand des Arbeitsverzeichnisses an" #: common-cmds.h:28 msgid "Create, list, delete or verify a tag object signed with GPG" msgstr "" -"Erzeugt, listet auf, löscht oder verifiziert ein mit GPG signiertes " -"Markierungsobjekt" +"Erzeugt, listet auf, löscht oder verifiziert ein mit GPG signiertes Tag-" +"Objekt" #: git-am.sh:50 msgid "You need to set your committer info first" -msgstr "Sie müssen zuerst die Informationen des Eintragenden setzen." +msgstr "Sie müssen zuerst die Informationen zum Commit-Ersteller setzen." #: git-am.sh:95 msgid "" "You seem to have moved HEAD since the last 'am' failure.\n" "Not rewinding to ORIG_HEAD" msgstr "" -"Sie scheinen seit dem letzten gescheiterten 'am' die Zweigspitze (HEAD)\n" -"geändert zu haben.\n" +"Sie scheinen seit dem letzten gescheiterten 'am' HEAD geändert zu haben.\n" "Keine Zurücksetzung zu ORIG_HEAD." #: git-am.sh:105 #, sh-format msgid "" -"When you have resolved this problem, run \"$cmdline --resolved\".\n" +"When you have resolved this problem, run \"$cmdline --continue\".\n" "If you prefer to skip this patch, run \"$cmdline --skip\" instead.\n" "To restore the original branch and stop patching, run \"$cmdline --abort\"." msgstr "" -"Wenn Sie das Problem gelöst haben, führen Sie \"$cmdline --resolved\" aus.\n" +"Wenn Sie das Problem gelöst haben, führen Sie \"$cmdline --continue\" aus.\n" "Falls Sie diesen Patch auslassen möchten, führen Sie stattdessen\n" "\"$cmdline --skip\" aus.\n" -"Um den ursprünglichen Zweig wiederherzustellen und die Anwendung der\n" +"Um den ursprünglichen Branch wiederherzustellen und die Anwendung der\n" "Patches abzubrechen, führen Sie \"$cmdline --abort\" aus." #: git-am.sh:121 msgid "Cannot fall back to three-way merge." -msgstr "Kann nicht zu 3-Wege-Zusammenführung zurückfallen." +msgstr "Kann nicht zu 3-Wege-Merge zurückfallen." #: git-am.sh:137 msgid "Repository lacks necessary blobs to fall back on 3-way merge." msgstr "" -"Dem Projektarchiv fehlen notwendige Blobs um auf eine 3-Wege-Zusammenführung " +"Dem Repository fehlen notwendige Blobs um auf einen 3-Wege-Merge " "zurückzufallen." #: git-am.sh:139 msgid "Using index info to reconstruct a base tree..." msgstr "" -"Verwende Informationen aus der Bereitstellung um einen Basisbaum " +"Verwende Informationen aus der Staging-Area um einen Basisverzeichnis " "nachzustellen" #: git-am.sh:154 @@ -9434,11 +9682,11 @@ msgstr "" #: git-am.sh:163 msgid "Falling back to patching base and 3-way merge..." -msgstr "Falle zurück zum Patchen der Basis und der 3-Wege-Zusammenführung..." +msgstr "Falle zurück zum Patchen der Basis und des 3-Wege-Merges..." #: git-am.sh:179 msgid "Failed to merge in the changes." -msgstr "Zusammenführung der Änderungen fehlgeschlagen" +msgstr "Merge der Änderungen fehlgeschlagen" #: git-am.sh:274 msgid "Only one StGIT patch series can be applied at once" @@ -9461,28 +9709,35 @@ msgstr "" "Die -b/--binary Option hat seit Langem keinen Effekt und wird\n" "entfernt. Bitte nicht mehr verwenden." -#: git-am.sh:477 +#: git-am.sh:479 #, sh-format msgid "previous rebase directory $dotest still exists but mbox given." msgstr "" -"Vorheriges Verzeichnis des Neuaufbaus $dotest existiert noch, aber mbox " -"gegeben." +"Vorheriges Rebase-Verzeichnis $dotest existiert noch, aber mbox gegeben." -#: git-am.sh:482 +#: git-am.sh:484 msgid "Please make up your mind. --skip or --abort?" msgstr "Bitte werden Sie sich klar. --skip oder --abort?" -#: git-am.sh:509 +#: git-am.sh:520 +#, sh-format +msgid "" +"Stray $dotest directory found.\n" +"Use \"git am --abort\" to remove it." +msgstr "" +"Stray $dotest Verzeichnis gefunden.\n" +"Benutzen Sie \"git am --abort\" um es zu entfernen." + +#: git-am.sh:528 msgid "Resolve operation not in progress, we are not resuming." msgstr "Es ist keine Auflösung im Gange, es wird nicht fortgesetzt." -#: git-am.sh:575 +#: git-am.sh:594 #, sh-format msgid "Dirty index: cannot apply patches (dirty: $files)" -msgstr "" -"Unsaubere Bereitstellung: kann Patches nicht anwenden (unsauber: $files)" +msgstr "Geänderte Staging-Area: kann Patches nicht anwenden (geändert: $files)" -#: git-am.sh:679 +#: git-am.sh:698 #, sh-format msgid "" "Patch is empty. Was it split wrong?\n" @@ -9492,65 +9747,65 @@ msgstr "" "Patch ist leer. Wurde er falsch aufgeteilt?\n" "Wenn Sie diesen Patch auslassen möchten, führen Sie stattdessen\n" "\"$cmdline --skip\" aus.\n" -"Um den ursprünglichen Zweig wiederherzustellen und die Anwendung der " +"Um den ursprünglichen Branch wiederherzustellen und die Anwendung der " "Patches\n" "abzubrechen, führen Sie \"$cmdline --abort\" aus." -#: git-am.sh:706 +#: git-am.sh:725 msgid "Patch does not have a valid e-mail address." msgstr "Patch enthält keine gültige Email-Adresse." -#: git-am.sh:753 +#: git-am.sh:772 msgid "cannot be interactive without stdin connected to a terminal." msgstr "" "Kann nicht interaktiv sein, ohne dass die Standard-Eingabe mit einem " "Terminal verbunden ist." -#: git-am.sh:757 +#: git-am.sh:776 msgid "Commit Body is:" -msgstr "Beschreibung der Eintragung ist:" +msgstr "Commit-Beschreibung ist:" #. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a] #. in your translation. The program will only accept English #. input at this point. -#: git-am.sh:764 +#: git-am.sh:783 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " msgstr "Anwenden? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " -#: git-am.sh:800 +#: git-am.sh:819 #, sh-format msgid "Applying: $FIRSTLINE" msgstr "Wende an: $FIRSTLINE" -#: git-am.sh:821 +#: git-am.sh:840 msgid "" "No changes - did you forget to use 'git add'?\n" "If there is nothing left to stage, chances are that something else\n" "already introduced the same changes; you might want to skip this patch." msgstr "" "Keine Änderungen - haben Sie vergessen 'git add' zu benutzen?\n" -"Wenn keine Änderungen mehr zum Bereitstellen vorhanden sind, könnten\n" +"Wenn keine Änderungen mehr zum Commit vorzumerken sind, könnten\n" "diese bereits anderweitig eingefügt worden sein; Sie könnten diesen Patch\n" "auslassen." -#: git-am.sh:829 +#: git-am.sh:848 msgid "" "You still have unmerged paths in your index\n" "did you forget to use 'git add'?" msgstr "" -"Sie haben immer noch nicht zusammengeführte Pfade in der Bereitstellung.\n" +"Sie haben immer noch nicht zusammengeführte Pfade in der Staging-Area.\n" "Haben Sie vergessen 'git add' zu benutzen?" -#: git-am.sh:845 +#: git-am.sh:864 msgid "No changes -- Patch already applied." msgstr "Keine Änderungen -- Patches bereits angewendet." -#: git-am.sh:855 +#: git-am.sh:874 #, sh-format msgid "Patch failed at $msgnum $FIRSTLINE" msgstr "Anwendung des Patches fehlgeschlagen bei $msgnum $FIRSTLINE" -#: git-am.sh:858 +#: git-am.sh:877 #, sh-format msgid "" "The copy of the patch that failed is found in:\n" @@ -9559,7 +9814,7 @@ msgstr "" "Die Kopie des fehlgeschlagenen Patches befindet sich in:\n" " $dotest/patch" -#: git-am.sh:876 +#: git-am.sh:895 msgid "applying to an empty history" msgstr "wende zu leerer Historie an" @@ -9582,11 +9837,11 @@ msgstr "nicht erkannte Option: '$arg'" #: git-bisect.sh:99 #, sh-format msgid "'$arg' does not appear to be a valid revision" -msgstr "'$arg' scheint keine gültige Revision zu sein" +msgstr "'$arg' scheint kein gültiger Commit zu sein" #: git-bisect.sh:117 msgid "Bad HEAD - I need a HEAD" -msgstr "Ungültige Zweigspitze (HEAD) - Zweigspitze (HEAD) wird benötigt" +msgstr "Ungültiger HEAD - HEAD wird benötigt" #: git-bisect.sh:130 #, sh-format @@ -9594,15 +9849,15 @@ msgid "" "Checking out '$start_head' failed. Try 'git bisect reset <validbranch>'." msgstr "" "Auschecken von '$start_head' fehlgeschlagen. Versuchen Sie 'git bisect reset " -"<gueltigerzweig>'." +"<gueltigerbranch>'." #: git-bisect.sh:140 msgid "won't bisect on seeked tree" -msgstr "binäre Suche auf gesuchtem Zweig nicht möglich" +msgstr "binäre Suche auf gesuchtem Branch nicht möglich" #: git-bisect.sh:144 msgid "Bad HEAD - strange symbolic ref" -msgstr "Ungültige Zweigspitze (HEAD) - merkwürdige symbolische Referenz" +msgstr "Ungültiger HEAD - merkwürdige symbolische Referenz" #: git-bisect.sh:189 #, sh-format @@ -9631,7 +9886,7 @@ msgstr "'git bisect bad' kann nur ein Argument entgegennehmen." #. this is less optimum. #: git-bisect.sh:273 msgid "Warning: bisecting only with a bad commit." -msgstr "Warnung: binäre Suche nur mit einer fehlerhaften Version" +msgstr "Warnung: binäre Suche nur mit einem fehlerhaften Commit" #. TRANSLATORS: Make sure to include [Y] and [n] in your #. translation. The program will only accept English input @@ -9645,7 +9900,8 @@ msgid "" "You need to give me at least one good and one bad revisions.\n" "(You can use \"git bisect bad\" and \"git bisect good\" for that.)" msgstr "" -"Sie müssen mindestens eine korrekte und eine fehlerhafte Revision angeben.\n" +"Sie müssen mindestens einen korrekten und einen fehlerhaften Commit " +"angeben.\n" "(Sie können dafür \"git bisect bad\" und \"git bisect good\" benutzen.)" #: git-bisect.sh:292 @@ -9655,7 +9911,7 @@ msgid "" "(You can use \"git bisect bad\" and \"git bisect good\" for that.)" msgstr "" "Sie müssen mit \"git bisect start\" beginnen.\n" -"Danach müssen Sie mindestens eine korrekte und eine fehlerhafte Revision " +"Danach müssen Sie mindestens einen korrekten und einen fehlerhaften Commit " "angeben.\n" "(Sie können dafür \"git bisect bad\" und \"git bisect good\" benutzen.)" @@ -9666,7 +9922,7 @@ msgstr "keine binäre Suche im Gange" #: git-bisect.sh:370 #, sh-format msgid "'$invalid' is not a valid commit" -msgstr "'$invalid' ist keine gültige Version" +msgstr "'$invalid' ist kein gültiger Commit" #: git-bisect.sh:379 #, sh-format @@ -9674,8 +9930,8 @@ msgid "" "Could not check out original HEAD '$branch'.\n" "Try 'git bisect reset <commit>'." msgstr "" -"Konnte die ursprüngliche Zweigspitze (HEAD) '$branch' nicht auschecken.\n" -"Versuchen Sie 'git bisect reset <Version>'." +"Konnte den ursprünglichen HEAD '$branch' nicht auschecken.\n" +"Versuchen Sie 'git bisect reset <Commit>'." #: git-bisect.sh:406 msgid "No logfile given" @@ -9728,10 +9984,9 @@ msgid "" "as appropriate to mark resolution, or use 'git commit -a'." msgstr "" "\"pull\" ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben.\n" -"Bitte korrigieren Sie dies im Arbeitsbaum und benutzen Sie dann 'git add/rm " -"<Datei>'\n" -"um die Auflösung entsprechend zu markieren, oder benutzen Sie 'git commit -" -"a'." +"Bitte korrigieren Sie dies im Arbeitsverzeichnis und benutzen Sie dann \n" +"'git add/rm <Datei>' um die Auflösung entsprechend zu markieren, oder\n" +"benutzen Sie 'git commit -a'." #: git-pull.sh:25 msgid "Pull is not possible because you have unmerged files." @@ -9741,8 +9996,8 @@ msgstr "" #: git-pull.sh:203 msgid "updating an unborn branch with changes added to the index" msgstr "" -"Aktualisiere eine ungeborenen Zweig mit Änderungen, die zur Bereitstellung " -"hinzugefügt wurden" +"Aktualisiere einen ungeborenen Branch mit Änderungen, die zum Commit " +"vorgemerkt sind" #. The fetch involved updating the current branch. #. The working tree and the index file is still based on the @@ -9755,18 +10010,18 @@ msgid "" "Warning: fast-forwarding your working tree from\n" "Warning: commit $orig_head." msgstr "" -"Warnung: Die Anforderung aktualisierte die Spitze des aktuellen Zweiges.\n" -"Warnung: Spule Ihren Arbeitszweig von Version $orig_head vor." +"Warnung: \"fetch\" aktualisierte die Spitze des aktuellen Branches.\n" +"Warnung: Spule Ihr Arbeitsverzeichnis von Commit $orig_head vor." #: git-pull.sh:260 msgid "Cannot merge multiple branches into empty head" -msgstr "Kann nicht mehrere Zweige in einen ungeborenen Zweig zusammenführen" +msgstr "Kann nicht mehrere Branches in einen ungeborenen Branch zusammenführen" #: git-pull.sh:264 msgid "Cannot rebase onto multiple branches" -msgstr "kann nicht auf mehrere Zweige neu aufbauen" +msgstr "kann Rebase nicht auf mehrere Branches ausführen" -#: git-rebase.sh:53 +#: git-rebase.sh:54 msgid "" "When you have resolved this problem, run \"git rebase --continue\".\n" "If you prefer to skip this patch, run \"git rebase --skip\" instead.\n" @@ -9777,50 +10032,68 @@ msgstr "" "aus.\n" "Falls Sie diesen Patch auslassen möchten, führen Sie stattdessen \"git " "rebase --skip\" aus.\n" -"Um den ursprünglichen Zweig wiederherzustellen und den Neuaufbau " -"abzubrechen,\n" +"Um den ursprünglichen Branch wiederherzustellen und den Rebase abzubrechen,\n" "führen Sie \"git rebase --abort\" aus." +#: git-rebase.sh:156 +msgid "Applied autostash." +msgstr "\"autostash\" angewendet." + +#: git-rebase.sh:159 +#, sh-format +msgid "Cannot store $stash_sha1" +msgstr "Kann $stash_sha1 nicht speichern." + #: git-rebase.sh:160 +msgid "" +"Applying autostash resulted in conflicts.\n" +"Your changes are safe in the stash.\n" +"You can run \"git stash pop\" or \"git stash drop\" at any time.\n" +msgstr "" +"Anwendung von \"autostash\" resultierte in Konflikten.\n" +"Ihre Änderungen sind im Stash sicher.\n" +"Sie können jederzeit \"git stash pop\" oder \"git stash drop\" ausführen.\n" + +#: git-rebase.sh:190 msgid "The pre-rebase hook refused to rebase." -msgstr "Der \"pre-rebase hook\" hat den Neuaufbau zurückgewiesen." +msgstr "Der \"pre-rebase hook\" hat den Rebase zurückgewiesen." -#: git-rebase.sh:165 +#: git-rebase.sh:195 msgid "It looks like git-am is in progress. Cannot rebase." -msgstr "\"git-am\" scheint im Gange zu sein. Kann nicht neu aufbauen." +msgstr "\"git-am\" scheint im Gange zu sein. Kann Rebase nicht durchführen." -#: git-rebase.sh:296 +#: git-rebase.sh:329 msgid "The --exec option must be used with the --interactive option" msgstr "Die Option --exec muss mit --interactive verwendet werden." -#: git-rebase.sh:301 +#: git-rebase.sh:334 msgid "No rebase in progress?" -msgstr "Kein Neuaufbau im Gange?" +msgstr "Kein Rebase im Gange?" -#: git-rebase.sh:312 +#: git-rebase.sh:345 msgid "The --edit-todo action can only be used during interactive rebase." msgstr "" -"Die --edit-todo Aktion kann nur während eines interaktiven Neuaufbaus " -"verwendet werden." +"Die --edit-todo Aktion kann nur während eines interaktiven Rebase verwendet " +"werden." -#: git-rebase.sh:319 +#: git-rebase.sh:352 msgid "Cannot read HEAD" -msgstr "Kann Zweigspitze (HEAD) nicht lesen" +msgstr "Kann HEAD nicht lesen" -#: git-rebase.sh:322 +#: git-rebase.sh:355 msgid "" "You must edit all merge conflicts and then\n" "mark them as resolved using git add" msgstr "" -"Sie müssen alle Zusammenführungskonflikte editieren und diese dann\n" +"Sie müssen alle Merge-Konflikte editieren und diese dann\n" "mittels \"git add\" als aufgelöst markieren" -#: git-rebase.sh:340 +#: git-rebase.sh:373 #, sh-format msgid "Could not move back to $head_name" msgstr "Konnte nicht zu $head_name zurückgehen" -#: git-rebase.sh:359 +#: git-rebase.sh:392 #, sh-format msgid "" "It seems that there is already a $state_dir_base directory, and\n" @@ -9833,7 +10106,7 @@ msgid "" "valuable there." msgstr "" "Es sieht so aus, als ob es das Verzeichnis $state_dir_base bereits gibt\n" -"und es könnte ein anderer Neuaufbau im Gange sein. Wenn das der Fall ist,\n" +"und es könnte ein anderer Rebase im Gange sein. Wenn das der Fall ist,\n" "probieren Sie bitte\n" "\t$cmd_live_rebase\n" "Wenn das nicht der Fall ist, probieren Sie bitte\n" @@ -9841,59 +10114,68 @@ msgstr "" "und führen Sie dieses Kommando nochmal aus. Es wird angehalten, falls noch\n" "etwas Schützenswertes vorhanden ist." -#: git-rebase.sh:404 +#: git-rebase.sh:437 #, sh-format msgid "invalid upstream $upstream_name" -msgstr "ungültiger Ãœbernahmezweig $upstream_name" +msgstr "ungültiger Upstream-Branch $upstream_name" -#: git-rebase.sh:428 +#: git-rebase.sh:461 #, sh-format msgid "$onto_name: there are more than one merge bases" -msgstr "$onto_name: es gibt mehr als eine Zusammenführungsbasis" +msgstr "$onto_name: es gibt mehr als eine Merge-Basis" -#: git-rebase.sh:431 git-rebase.sh:435 +#: git-rebase.sh:464 git-rebase.sh:468 #, sh-format msgid "$onto_name: there is no merge base" -msgstr "$onto_name: es gibt keine Zusammenführungsbasis" +msgstr "$onto_name: es gibt keine Merge-Basis" -#: git-rebase.sh:440 +#: git-rebase.sh:473 #, sh-format msgid "Does not point to a valid commit: $onto_name" -msgstr "$onto_name zeigt auf keine gültige Version" +msgstr "$onto_name zeigt auf keinen gültigen Commit" -#: git-rebase.sh:463 +#: git-rebase.sh:496 #, sh-format msgid "fatal: no such branch: $branch_name" -msgstr "fatal: Zweig $branch_name nicht gefunden" +msgstr "fatal: Branch $branch_name nicht gefunden" -#: git-rebase.sh:483 +#: git-rebase.sh:519 +msgid "Cannot autostash" +msgstr "Kann \"autostash\" nicht ausführen." + +#: git-rebase.sh:524 +#, sh-format +msgid "Created autostash: $stash_abbrev" +msgstr "\"autostash\" erzeugt: $stash_abbrev" + +#: git-rebase.sh:528 msgid "Please commit or stash them." -msgstr "Bitte tragen Sie die Änderungen ein oder benutzen Sie \"stash\"." +msgstr "Bitte committen Sie die Änderungen oder benutzen Sie \"stash\"." -#: git-rebase.sh:501 +#: git-rebase.sh:548 #, sh-format msgid "Current branch $branch_name is up to date." -msgstr "Aktueller Zweig $branch_name ist auf dem neusten Stand." +msgstr "Aktueller Branch $branch_name ist auf dem neusten Stand." -#: git-rebase.sh:504 +#: git-rebase.sh:552 #, sh-format msgid "Current branch $branch_name is up to date, rebase forced." msgstr "" -"Aktueller Zweig $branch_name ist auf dem neusten Stand, Neuaufbau erzwungen." +"Aktueller Branch $branch_name ist auf dem neusten Stand, Rebase erzwungen." -#: git-rebase.sh:515 +#: git-rebase.sh:563 #, sh-format msgid "Changes from $mb to $onto:" msgstr "Änderungen von $mb zu $onto:" #. Detach HEAD and reset the tree -#: git-rebase.sh:524 +#: git-rebase.sh:572 msgid "First, rewinding head to replay your work on top of it..." msgstr "" -"Zunächst wird die Zweigspitze zurückgespult, um Ihre Änderungen\n" +"Zunächst wird der Branch zurückgespult, um Ihre Änderungen\n" "darauf neu anzuwenden..." -#: git-rebase.sh:532 +#: git-rebase.sh:582 #, sh-format msgid "Fast-forwarded $branch_name to $onto_name." msgstr "$branch_name zu $onto_name vorgespult." @@ -9904,15 +10186,15 @@ msgstr "git stash clear mit Parametern ist nicht implementiert" #: git-stash.sh:74 msgid "You do not have the initial commit yet" -msgstr "Sie haben bisher noch keine initiale Version" +msgstr "Sie haben bisher noch keinen initialen Commit" #: git-stash.sh:89 msgid "Cannot save the current index state" -msgstr "Kann den aktuellen Zustand der Bereitstellung nicht speichern" +msgstr "Kann den aktuellen Zustand der Staging-Area nicht speichern" #: git-stash.sh:123 git-stash.sh:136 msgid "Cannot save the current worktree state" -msgstr "Kann den aktuellen Zustand des Arbeitsbaumes nicht speichern" +msgstr "Kann den aktuellen Zustand des Arbeitsverzeichnisses nicht speichern" #: git-stash.sh:140 msgid "No changes selected" @@ -9920,11 +10202,16 @@ msgstr "Keine Änderungen ausgewählt" #: git-stash.sh:143 msgid "Cannot remove temporary index (can't happen)" -msgstr "Kann temporäre Bereitstellung nicht löschen (kann nicht passieren)" +msgstr "Kann temporäre Staging-Area nicht löschen (kann nicht passieren)" #: git-stash.sh:156 msgid "Cannot record working tree state" -msgstr "Kann Zustand des Arbeitsbaumes nicht aufzeichnen" +msgstr "Kann Zustand des Arbeitsverzeichnisses nicht aufzeichnen" + +#: git-stash.sh:190 +#, sh-format +msgid "Cannot update $ref_stash with $w_commit" +msgstr "Kann $ref_stash nicht mit $w_commit aktualisieren." #. TRANSLATORS: $option is an invalid option, like #. `--blah-blah'. The 7 spaces at the beginning of the @@ -9936,7 +10223,7 @@ msgstr "Kann Zustand des Arbeitsbaumes nicht aufzeichnen" #. $ git stash save --blah-blah 2>&1 | head -n 2 #. error: unknown option for 'stash save': --blah-blah #. To provide a message, use git stash save -- '--blah-blah' -#: git-stash.sh:202 +#: git-stash.sh:241 #, sh-format msgid "" "error: unknown option for 'stash save': $option\n" @@ -9946,122 +10233,140 @@ msgstr "" " Um eine Beschreibung anzugeben, benutzen Sie \"git stash save -- " "'$option'\"" -#: git-stash.sh:223 +#: git-stash.sh:262 msgid "No local changes to save" msgstr "Keine lokalen Änderungen zum Speichern" -#: git-stash.sh:227 +#: git-stash.sh:268 +msgid "" +"The following untracked files would NOT be saved but need to be removed by " +"stash save:" +msgstr "" +"Die folgenden unbeobachteten Dateien würden NICHT gespeichert werden,\n" +"müssen aber durch \"stash save\" entfernt werden:" + +#: git-stash.sh:270 +msgid "" +"Aborting. Consider using either the --force or --include-untracked option." +msgstr "" +"Abgebrochen. Benutzen Sie entweder die Option --force oder --include-" +"untracked." + +#: git-stash.sh:274 msgid "Cannot initialize stash" msgstr "Kann \"stash\" nicht initialisieren" -#: git-stash.sh:235 +#: git-stash.sh:278 msgid "Cannot save the current status" msgstr "Kann den aktuellen Status nicht speichern" -#: git-stash.sh:253 +#: git-stash.sh:296 msgid "Cannot remove worktree changes" -msgstr "Kann Änderungen am Arbeitsbaum nicht löschen" +msgstr "Kann Änderungen im Arbeitsverzeichnis nicht löschen" -#: git-stash.sh:352 +#: git-stash.sh:395 msgid "No stash found." msgstr "Kein \"stash\" gefunden." -#: git-stash.sh:359 +#: git-stash.sh:402 #, sh-format msgid "Too many revisions specified: $REV" -msgstr "Zu viele Revisionen angegeben: $REV" +msgstr "Zu viele Commits angegeben: $REV" -#: git-stash.sh:365 +#: git-stash.sh:408 #, sh-format msgid "$reference is not valid reference" msgstr "$reference ist keine gültige Referenz" -#: git-stash.sh:393 +#: git-stash.sh:436 #, sh-format msgid "'$args' is not a stash-like commit" -msgstr "'$args' ist keine \"stash\"-artige Version" +msgstr "'$args' ist kein \"stash\"-artiger Commit" -#: git-stash.sh:404 +#: git-stash.sh:447 #, sh-format msgid "'$args' is not a stash reference" msgstr "'$args' ist keine \"stash\"-Referenz" -#: git-stash.sh:412 +#: git-stash.sh:455 msgid "unable to refresh index" -msgstr "unfähig die Bereitstellung zu aktualisieren" +msgstr "unfähig die Staging-Area zu aktualisieren" -#: git-stash.sh:416 +#: git-stash.sh:459 msgid "Cannot apply a stash in the middle of a merge" -msgstr "" -"Kann \"stash\" nicht anwenden, solang eine Zusammenführung im Gange ist" +msgstr "Kann \"stash\" nicht anwenden, solang ein Merge im Gange ist" -#: git-stash.sh:424 +#: git-stash.sh:467 msgid "Conflicts in index. Try without --index." -msgstr "Konflikte in der Bereitstellung. Versuchen Sie es ohne --index." +msgstr "Konflikte in der Staging-Area. Versuchen Sie es ohne --index." -#: git-stash.sh:426 +#: git-stash.sh:469 msgid "Could not save index tree" -msgstr "Konnte Bereitstellungsbaum nicht speichern" +msgstr "Konnte Staging-Area-Verzeichnis nicht speichern" -#: git-stash.sh:460 +#: git-stash.sh:503 msgid "Cannot unstage modified files" -msgstr "Kann geänderte Dateien nicht aus der Bereitstellung herausnehmen" +msgstr "Kann geänderte Dateien nicht aus der Staging-Area entfernen" -#: git-stash.sh:475 +#: git-stash.sh:518 msgid "Index was not unstashed." -msgstr "Bereitstellung wurde nicht ausgelagert." +msgstr "Staging-Area wurde nicht aus dem Stash zurückgeladen." -#: git-stash.sh:492 +#: git-stash.sh:535 #, sh-format msgid "Dropped ${REV} ($s)" msgstr "Gelöscht ${REV} ($s)" -#: git-stash.sh:493 +#: git-stash.sh:536 #, sh-format msgid "${REV}: Could not drop stash entry" msgstr "${REV}: Konnte \"stash\"-Eintrag nicht löschen" -#: git-stash.sh:500 +#: git-stash.sh:543 msgid "No branch name specified" -msgstr "Kein Zweigname spezifiziert" +msgstr "Kein Branchname spezifiziert" -#: git-stash.sh:571 +#: git-stash.sh:615 msgid "(To restore them type \"git stash apply\")" msgstr "(Zur Wiederherstellung geben Sie \"git stash apply\" ein)" -#: git-submodule.sh:91 +#: git-submodule.sh:95 #, sh-format msgid "cannot strip one component off url '$remoteurl'" msgstr "Kann eine Komponente von URL '$remoteurl' nicht extrahieren" -#: git-submodule.sh:196 +#: git-submodule.sh:237 #, sh-format msgid "No submodule mapping found in .gitmodules for path '$sm_path'" -msgstr "" -"Keine Unterprojekt-Zuordnung in .gitmodules für Pfad '$sm_path' gefunden" +msgstr "Keine Submodul-Zuordnung in .gitmodules für Pfad '$sm_path' gefunden" -#: git-submodule.sh:239 +#: git-submodule.sh:281 #, sh-format msgid "Clone of '$url' into submodule path '$sm_path' failed" -msgstr "Klonen von '$url' in Unterprojekt-Pfad '$sm_path' fehlgeschlagen" +msgstr "Klonen von '$url' in Submodul-Pfad '$sm_path' fehlgeschlagen" -#: git-submodule.sh:251 +#: git-submodule.sh:293 #, sh-format msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa" +msgstr "Git-Verzeichnis '$a' ist Teil des Submodul-Pfades '$b', oder umgekehrt" + +#: git-submodule.sh:403 +msgid "Relative path can only be used from the toplevel of the working tree" msgstr "" -"Git-Verzeichnis '$a' ist Teil des Unterprojekt-Pfades '$b', oder umgekehrt" +"Relative Pfade können nur von der obersten Ebene des Arbeitsverzeichnisses " +"benutzt werden." -#: git-submodule.sh:349 +#: git-submodule.sh:413 #, sh-format msgid "repo URL: '$repo' must be absolute or begin with ./|../" msgstr "repo URL: '$repo' muss absolut sein oder mit ./|../ beginnen" -#: git-submodule.sh:366 +#: git-submodule.sh:430 #, sh-format msgid "'$sm_path' already exists in the index" -msgstr "'$sm_path' existiert bereits in der Bereitstellung" +msgstr "'$sm_path' ist bereits zum Commit vorgemerkt" -#: git-submodule.sh:370 +#: git-submodule.sh:434 #, sh-format msgid "" "The following path is ignored by one of your .gitignore files:\n" @@ -10072,25 +10377,24 @@ msgstr "" "$sm_path\n" "Benutzen Sie -f wenn Sie diesen wirklich hinzufügen möchten." -#: git-submodule.sh:388 +#: git-submodule.sh:452 #, sh-format msgid "Adding existing repo at '$sm_path' to the index" -msgstr "" -"Füge existierendes Projektarchiv in '$sm_path' der Bereitstellung hinzu." +msgstr "Füge existierendes Repository in '$sm_path' der Staging-Area hinzu." -#: git-submodule.sh:390 +#: git-submodule.sh:454 #, sh-format msgid "'$sm_path' already exists and is not a valid git repo" -msgstr "'$sm_path' existiert bereits und ist kein gültiges Git-Projektarchiv" +msgstr "'$sm_path' existiert bereits und ist kein gültiges Git-Repository" -#: git-submodule.sh:398 +#: git-submodule.sh:462 #, sh-format msgid "A git directory for '$sm_name' is found locally with remote(s):" msgstr "" -"Ein Git-Verzeichnis für '$sm_name' wurde lokal gefunden mit den Fernarchiv" -"(en):" +"Ein Git-Verzeichnis für '$sm_name' wurde lokal gefunden mit den Remote-" +"Repositories:" -#: git-submodule.sh:400 +#: git-submodule.sh:464 #, sh-format msgid "" "If you want to reuse this local git directory instead of cloning again from" @@ -10098,15 +10402,15 @@ msgstr "" "Wenn Sie dieses lokale Git-Verzeichnis wiederverwenden möchtest, anstatt " "erneut zu klonen" -#: git-submodule.sh:402 +#: git-submodule.sh:466 #, sh-format msgid "" "use the '--force' option. If the local git directory is not the correct repo" msgstr "" "benutzen Sie die Option '--force'. Wenn das lokale Git-Verzeichnis nicht das " -"korrekte Projektarchiv ist" +"korrekte Repository ist" -#: git-submodule.sh:403 +#: git-submodule.sh:467 #, sh-format msgid "" "or you are unsure what this means choose another name with the '--name' " @@ -10115,228 +10419,282 @@ msgstr "" "oder Sie sich unsicher sind, was das bedeutet, wählen Sie einen anderen " "Namenmit der Option '--name'." -#: git-submodule.sh:405 +#: git-submodule.sh:469 #, sh-format msgid "Reactivating local git directory for submodule '$sm_name'." -msgstr "Reaktiviere lokales Git-Verzeichnis für Unterprojekt '$sm_name'." +msgstr "Reaktiviere lokales Git-Verzeichnis für Submodul '$sm_name'." -#: git-submodule.sh:417 +#: git-submodule.sh:481 #, sh-format msgid "Unable to checkout submodule '$sm_path'" -msgstr "Unfähig Unterprojekt '$sm_path' auszuchecken" +msgstr "Unfähig Submodul '$sm_path' auszuchecken" -#: git-submodule.sh:422 +#: git-submodule.sh:486 #, sh-format msgid "Failed to add submodule '$sm_path'" -msgstr "Hinzufügen von Unterprojekt '$sm_path' fehlgeschlagen" +msgstr "Hinzufügen von Submodul '$sm_path' fehlgeschlagen" -#: git-submodule.sh:431 +#: git-submodule.sh:495 #, sh-format msgid "Failed to register submodule '$sm_path'" -msgstr "" -"Fehler beim Eintragen von Unterprojekt '$sm_path' in die Konfiguration." +msgstr "Fehler beim Eintragen von Submodul '$sm_path' in die Konfiguration." -#: git-submodule.sh:474 +#: git-submodule.sh:539 #, sh-format -msgid "Entering '$prefix$sm_path'" -msgstr "Betrete '$prefix$sm_path'" +msgid "Entering '$prefix$displaypath'" +msgstr "Betrete '$prefix$displaypath'" -#: git-submodule.sh:488 +#: git-submodule.sh:554 #, sh-format -msgid "Stopping at '$sm_path'; script returned non-zero status." -msgstr "Stoppe bei '$sm_path'; Skript gab nicht-Null Status zurück." +msgid "Stopping at '$prefix$displaypath'; script returned non-zero status." +msgstr "Stoppe bei '$prefix$displaypath'; Skript gab nicht-Null Status zurück." -#: git-submodule.sh:532 +#: git-submodule.sh:600 #, sh-format -msgid "No url found for submodule path '$sm_path' in .gitmodules" -msgstr "Keine URL für Unterprojekt-Pfad '$sm_path' in .gitmodules gefunden" +msgid "No url found for submodule path '$displaypath' in .gitmodules" +msgstr "Keine URL für Submodul-Pfad '$displaypath' in .gitmodules gefunden" -#: git-submodule.sh:541 +#: git-submodule.sh:609 #, sh-format -msgid "Failed to register url for submodule path '$sm_path'" +msgid "Failed to register url for submodule path '$displaypath'" msgstr "" -"Fehler beim Eintragen der URL für Unterprojekt-Pfad '$sm_path' in die " +"Fehler beim Eintragen der URL für Submodul-Pfad '$displaypath' in die " "Konfiguration." -#: git-submodule.sh:543 +#: git-submodule.sh:611 #, sh-format -msgid "Submodule '$name' ($url) registered for path '$sm_path'" +msgid "Submodule '$name' ($url) registered for path '$displaypath'" msgstr "" -"Unterprojekt '$name' ($url) für Pfad '$sm_path' in die Konfiguration " -"eingetragen" +"Submodul '$name' ($url) für Pfad '$displaypath' in die Konfiguration " +"eingetragen." -#: git-submodule.sh:551 +#: git-submodule.sh:619 #, sh-format -msgid "Failed to register update mode for submodule path '$sm_path'" +msgid "Failed to register update mode for submodule path '$displaypath'" msgstr "" -"Fehler bei Änderung des Aktualisierungsmodus für Unterprojekt-Pfad " -"'$sm_path' in der Konfiguration." +"Fehler bei Änderung des Aktualisierungsmodus für Submodul-Pfad " +"'$displaypath' in der Konfiguration." -#: git-submodule.sh:588 +#: git-submodule.sh:656 #, sh-format msgid "Use '.' if you really want to deinitialize all submodules" msgstr "" -"Verwenden Sie '.' wenn Sie wirklich alle Unterprojekte\n" +"Verwenden Sie '.' wenn Sie wirklich alle Submodule\n" "deinitialisieren möchten." -#: git-submodule.sh:603 +#: git-submodule.sh:673 #, sh-format -msgid "Submodule work tree '$sm_path' contains a .git directory" +msgid "Submodule work tree '$displaypath' contains a .git directory" msgstr "" -"Arbeitsbaum des Unterprojekts in '$sm_path' enthält ein .git-Verzeichnis" +"Arbeitsverzeichnis des Submoduls in '$displaypath' enthält ein .git-" +"Verzeichnis" -#: git-submodule.sh:604 +#: git-submodule.sh:674 #, sh-format msgid "" "(use 'rm -rf' if you really want to remove it including all of its history)" msgstr "" -"(benutzen Sie 'rm -rf' wenn Sie dieses Unterprojekt wirklich mitsamt\n" +"(benutzen Sie 'rm -rf' wenn Sie dieses Submodul wirklich mitsamt\n" "seiner Historie löschen möchten)" -#: git-submodule.sh:610 +#: git-submodule.sh:680 #, sh-format msgid "" -"Submodule work tree '$sm_path' contains local modifications; use '-f' to " +"Submodule work tree '$displaypath' contains local modifications; use '-f' to " "discard them" msgstr "" -"Arbeitsbaum von Unterprojekt in '$sm_path' enthält lokale Änderungen; " +"Arbeitsverzeichnis von Submodul in '$displaypath' enthält lokale Änderungen; " "verwenden Sie '-f' um diese zu verwerfen" -#: git-submodule.sh:613 +#: git-submodule.sh:683 #, sh-format -msgid "Cleared directory '$sm_path'" -msgstr "Verzeichnis '$sm_path' bereinigt." +msgid "Cleared directory '$displaypath'" +msgstr "Verzeichnis '$displaypath' bereinigt." -#: git-submodule.sh:614 +#: git-submodule.sh:684 #, sh-format -msgid "Could not remove submodule work tree '$sm_path'" -msgstr "Konnte Arbeitsbaum des Unterprojektes in '$sm_path' nicht löschen." +msgid "Could not remove submodule work tree '$displaypath'" +msgstr "" +"Konnte Arbeitsverzeichnis des Submoduls in '$displaypath' nicht löschen." -#: git-submodule.sh:617 +#: git-submodule.sh:687 #, sh-format -msgid "Could not create empty submodule directory '$sm_path'" +msgid "Could not create empty submodule directory '$displaypath'" msgstr "" -"Konnte kein leeres Verzeichnis für Unterprojekt in '$sm_path' erstellen." +"Konnte kein leeres Verzeichnis für Submodul in '$displaypath' erstellen." -#: git-submodule.sh:626 +#: git-submodule.sh:696 #, sh-format -msgid "Submodule '$name' ($url) unregistered for path '$sm_path'" +msgid "Submodule '$name' ($url) unregistered for path '$displaypath'" msgstr "" -"Unterprojekt '$name' ($url) für Pfad '$sm_path' wurde aus der Konfiguration " +"Submodul '$name' ($url) für Pfad '$displaypath' wurde aus der Konfiguration " "entfernt." -#: git-submodule.sh:731 +#: git-submodule.sh:811 #, sh-format msgid "" -"Submodule path '$prefix$sm_path' not initialized\n" +"Submodule path '$displaypath' not initialized\n" "Maybe you want to use 'update --init'?" msgstr "" -"Unterprojekt-Pfad '$prefix$sm_path' ist nicht initialisiert.\n" +"Submodul-Pfad '$displaypath' ist nicht initialisiert.\n" "Vielleicht möchten Sie 'update --init' benutzen?" -#: git-submodule.sh:744 +#: git-submodule.sh:824 #, sh-format -msgid "Unable to find current revision in submodule path '$prefix$sm_path'" -msgstr "" -"Konnte aktuelle Revision in Unterprojekt-Pfad '$prefix$sm_path' nicht finden." +msgid "Unable to find current revision in submodule path '$displaypath'" +msgstr "Konnte aktuellen Commit in Submodul-Pfad '$displaypath' nicht finden." -#: git-submodule.sh:753 +#: git-submodule.sh:833 #, sh-format msgid "Unable to fetch in submodule path '$sm_path'" -msgstr "Konnte in Unterprojekt-Pfad '$sm_path' nicht anfordern" +msgstr "Konnte \"fetch\" in Submodul-Pfad '$sm_path' nicht ausführen" -#: git-submodule.sh:777 +#: git-submodule.sh:857 #, sh-format -msgid "Unable to fetch in submodule path '$prefix$sm_path'" -msgstr "Konnte in Unterprojekt-Pfad '$prefix$sm_path' nicht anfordern" +msgid "Unable to fetch in submodule path '$displaypath'" +msgstr "Konnte \"fetch\" in Submodul-Pfad '$displaypath' nicht ausführen" -#: git-submodule.sh:791 +#: git-submodule.sh:871 #, sh-format -msgid "Unable to rebase '$sha1' in submodule path '$prefix$sm_path'" -msgstr "" -"Neuaufbau von '$sha1' in Unterprojekt-Pfad '$prefix$sm_path' nicht möglich" +msgid "Unable to rebase '$sha1' in submodule path '$displaypath'" +msgstr "Rebase auf '$sha1' in Submodul-Pfad '$displaypath' nicht möglich" -#: git-submodule.sh:792 +#: git-submodule.sh:872 #, sh-format -msgid "Submodule path '$prefix$sm_path': rebased into '$sha1'" -msgstr "Unterprojekt-Pfad '$prefix$sm_path': neu aufgebaut in '$sha1'" +msgid "Submodule path '$displaypath': rebased into '$sha1'" +msgstr "Submodul-Pfad '$displaypath': Rebase auf '$sha1'" -#: git-submodule.sh:797 +#: git-submodule.sh:877 #, sh-format -msgid "Unable to merge '$sha1' in submodule path '$prefix$sm_path'" +msgid "Unable to merge '$sha1' in submodule path '$displaypath'" +msgstr "Merge von '$sha1' in Submodul-Pfad '$displaypath' fehlgeschlagen" + +#: git-submodule.sh:878 +#, sh-format +msgid "Submodule path '$displaypath': merged in '$sha1'" +msgstr "Submodul-Pfad '$displaypath': zusammengeführt in '$sha1'" + +#: git-submodule.sh:883 +#, sh-format +msgid "" +"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'" msgstr "" -"Zusammenführung von '$sha1' in Unterprojekt-Pfad '$prefix$sm_path' " +"Ausführung von '$command $sha1' in Submodul-Pfad '$prefix$sm_path' " "fehlgeschlagen" -#: git-submodule.sh:798 +#: git-submodule.sh:884 #, sh-format -msgid "Submodule path '$prefix$sm_path': merged in '$sha1'" -msgstr "Unterprojekt-Pfad '$prefix$sm_path': zusammengeführt in '$sha1'" +msgid "Submodule path '$prefix$sm_path': '$command $sha1'" +msgstr "Submodul-Pfad '$prefix$sm_path': '$command $sha1'" -#: git-submodule.sh:803 +#: git-submodule.sh:889 #, sh-format -msgid "Unable to checkout '$sha1' in submodule path '$prefix$sm_path'" -msgstr "" -"Konnte '$sha1' in Unterprojekt-Pfad '$prefix$sm_path' nicht auschecken." +msgid "Unable to checkout '$sha1' in submodule path '$displaypath'" +msgstr "Konnte '$sha1' in Submodul-Pfad '$displaypath' nicht auschecken." -#: git-submodule.sh:804 +#: git-submodule.sh:890 #, sh-format -msgid "Submodule path '$prefix$sm_path': checked out '$sha1'" -msgstr "Unterprojekt-Pfad: '$prefix$sm_path': '$sha1' ausgecheckt" +msgid "Submodule path '$displaypath': checked out '$sha1'" +msgstr "Submodul-Pfad: '$displaypath': '$sha1' ausgecheckt" -#: git-submodule.sh:831 +#: git-submodule.sh:917 #, sh-format -msgid "Failed to recurse into submodule path '$prefix$sm_path'" -msgstr "Fehler bei Rekursion in Unterprojekt-Pfad '$prefix$sm_path'" +msgid "Failed to recurse into submodule path '$displaypath'" +msgstr "Fehler bei Rekursion in Submodul-Pfad '$displaypath'" -#: git-submodule.sh:939 +#: git-submodule.sh:1025 msgid "The --cached option cannot be used with the --files option" msgstr "" "Die Optionen --cached und --files können nicht gemeinsam verwendet werden." #. unexpected type -#: git-submodule.sh:979 +#: git-submodule.sh:1066 #, sh-format msgid "unexpected mode $mod_dst" msgstr "unerwarteter Modus $mod_dst" -#: git-submodule.sh:997 +#: git-submodule.sh:1086 #, sh-format -msgid " Warn: $name doesn't contain commit $sha1_src" -msgstr " Warnung: $name beinhaltet nicht Version $sha1_src" +msgid " Warn: $display_name doesn't contain commit $sha1_src" +msgstr " Warnung: $display_name beinhaltet nicht Commit $sha1_src" -#: git-submodule.sh:1000 +#: git-submodule.sh:1089 #, sh-format -msgid " Warn: $name doesn't contain commit $sha1_dst" -msgstr " Warnung: $name beinhaltet nicht Version $sha1_dst" +msgid " Warn: $display_name doesn't contain commit $sha1_dst" +msgstr " Warnung: $display_name beinhaltet nicht Commit $sha1_dst" -#: git-submodule.sh:1003 +#: git-submodule.sh:1092 #, sh-format -msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst" +msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst" msgstr "" -" Warnung: $name beinhaltet nicht die Versionen $sha1_src und $sha1_dst" +" Warnung: $display_name beinhaltet nicht die Commits $sha1_src und $sha1_dst" -#: git-submodule.sh:1028 +#: git-submodule.sh:1117 msgid "blob" msgstr "Blob" -#: git-submodule.sh:1066 +#: git-submodule.sh:1155 msgid "Submodules changed but not updated:" -msgstr "Unterprojekte geändert, aber nicht aktualisiert:" +msgstr "Submodule geändert, aber nicht aktualisiert:" -#: git-submodule.sh:1068 +#: git-submodule.sh:1157 msgid "Submodule changes to be committed:" -msgstr "Änderungen in Unterprojekt zum Eintragen:" +msgstr "Änderungen in Submodul zum Committen:" -#: git-submodule.sh:1153 +#: git-submodule.sh:1242 #, sh-format msgid "Failed to recurse into submodule path '$sm_path'" -msgstr "Fehler bei Rekursion in Unterprojekt-Pfad '$sm_path'" +msgstr "Fehler bei Rekursion in Submodul-Pfad '$sm_path'" -#: git-submodule.sh:1216 +#: git-submodule.sh:1306 #, sh-format -msgid "Synchronizing submodule url for '$prefix$sm_path'" -msgstr "Synchronisiere Unterprojekt-URL für '$prefix$sm_path'" +msgid "Synchronizing submodule url for '$displaypath'" +msgstr "Synchronisiere Submodul-URL für '$displaypath'" + +#~ msgid " (fix conflicts and then run \"git am --resolved\")" +#~ msgstr "" +#~ " (beheben Sie die Konflikte und führen Sie dann \"git am --resolved\" " +#~ "aus)" + +#~ msgid " (all conflicts fixed: run \"git commit\")" +#~ msgstr " (alle Konflikte behoben: führen Sie \"git commit\" aus)" + +#~ msgid "more than %d trees given: '%s'" +#~ msgstr "Mehr als %d \"Tree\"-Objekte angegeben: '%s'" + +#~ msgid "You cannot combine --no-ff with --ff-only." +#~ msgstr "Sie können --no-ff nicht mit --ff--only kombinieren." + +#~ msgid "" +#~ "submodule '%s' (or one of its nested submodules) uses a .git directory\n" +#~ "(use 'rm -rf' if you really want to remove it including all of its " +#~ "history)" +#~ msgstr "" +#~ "Submodul '%s' (oder ein geschachteltes Submodul hiervon) verwendet\n" +#~ "ein .git-Verzeichnis (benutzen Sie 'rm -rf' wenn Sie dieses wirklich " +#~ "mitsamt\n" +#~ "seiner Historie löschen möchten)" + +#~ msgid "" +#~ "'%s' has changes staged in the index\n" +#~ "(use --cached to keep the file, or -f to force removal)" +#~ msgstr "" +#~ "'%s' hat zum Commit vorgemerkte Änderungen\n" +#~ "(benutzen Sie --cached um die Datei zu behalten, oder -f um die " +#~ "Entfernung zu erzwingen)" + +#~ msgid "show commits where no parent comes before its children" +#~ msgstr "" +#~ "zeigt Commits, bei denen kein Eltern-Commit vor seinem Kind-Commit kommt" + +#~ msgid "show the HEAD reference" +#~ msgstr "zeigt Referenz von HEAD" + +#~ msgid "Unable to fetch in submodule path '$prefix$sm_path'" +#~ msgstr "Konnte \"fetch\" in Submodul-Pfad '$prefix$sm_path' nicht ausführen" + +#~ msgid "Failed to recurse into submodule path '$prefix$sm_path'" +#~ msgstr "Fehler bei Rekursion in Submodul-Pfad '$prefix$sm_path'" #~ msgid "It took %.2f seconds to enumerate untracked files. 'status -uno'" #~ msgstr "" diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000000..2cdb6f93a3 --- /dev/null +++ b/po/fr.po @@ -0,0 +1,9823 @@ +# French translations for Git. +# Copyright (C) 2013 Jean-Noël Avila <jn.avila@free.fr> +# This file is distributed under the same license as the Git package. +# Jean-Noël Avila <jn.avila@free.fr>, 2013. +# Sébastien Helleu <flashcode@flashtux.org>, 2013. +# +# French translations of common Git words used in this file: +# +# English | French +# -----------------+--------------------------------- +# #NN | n°NN +# a commit | un commit +# backward | +# compatibility | rétrocompatibilité +# bare repository | dépôt nu +# bisect | bissection +# blob | blob +# bug | bogue +# bundle | colis +# cherry-pick | picorer +# dangling | en suspens +# debugging | débogage +# fast-forward | avance rapide +# fast-forwarded | mis à jour en avance rapide +# glob | glob +# hash | hachage +# HEAD | HEAD (genre féminin) +# hook | hook +# hunk | section +# merge | fusion +# pattern | motif +# repository | dépôt +# remote | distante (ou serveur distant) +# revision | révision +# stash | remisage +# tag | étiquette +# template | modèle +# to checkout | extraire +# to commit | valider +# to fetch | rapatrier +# to prune | élaguer +# to push | pousser +# to rebase | rebaser +# to stash | remiser +# to track | suivre +# to unstage | désindexer +# tree-ish | arbre +# upstream | amont +# worktree / | +# work(ing) tree | copie de travail +# +msgid "" +msgstr "" +"Project-Id-Version: git\n" +"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" +"POT-Creation-Date: 2013-04-30 08:25+0800\n" +"PO-Revision-Date: 2013-08-27 19:43+0200\n" +"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n" +"Language-Team: Jean-Noël Avila <jn.avila@free.fr>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n<=1 ?0 : 1;\n" +"X-Generator: Poedit 1.5.4\n" + +#: advice.c:53 +#, c-format +msgid "hint: %.*s\n" +msgstr "astuce: %.*s\n" + +#. +#. * Message used both when 'git commit' fails and when +#. * other commands doing a merge do. +#. +#: advice.c:83 +msgid "" +"Fix them up in the work tree,\n" +"and then use 'git add/rm <file>' as\n" +"appropriate to mark resolution and make a commit,\n" +"or use 'git commit -a'." +msgstr "" +"Corrigez-les dans la copie de travail,\n" +"et utilisez 'git add/rm <fichier>' si\n" +"nécessaire pour marquer la résolution et valider,\n" +"ou utilisez 'git commit -a'." + +#: archive.c:10 +msgid "git archive [options] <tree-ish> [<path>...]" +msgstr "git archive [options] <arbre> [<chemin>...]" + +#: archive.c:11 +msgid "git archive --list" +msgstr "git archive --list" + +#: archive.c:12 +msgid "" +"git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]" +msgstr "git archive --remote <dépôt> [--exec <commande>] [options] <arbre> [<chemin>...]" + +#: archive.c:13 +msgid "git archive --remote <repo> [--exec <cmd>] --list" +msgstr "git archive --remote <dépôt> [--exec <commande>] --list" + +#: archive.c:323 +msgid "fmt" +msgstr "fmt" + +#: archive.c:323 +msgid "archive format" +msgstr "format d'archive" + +#: archive.c:324 builtin/log.c:1126 +msgid "prefix" +msgstr "préfixe" + +#: archive.c:325 +msgid "prepend prefix to each pathname in the archive" +msgstr "préfixer chaque chemin de fichier dans l'archive" + +#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2371 +#: builtin/blame.c:2372 builtin/config.c:55 builtin/fast-export.c:665 +#: builtin/fast-export.c:667 builtin/grep.c:715 builtin/hash-object.c:77 +#: builtin/ls-files.c:490 builtin/ls-files.c:493 builtin/notes.c:536 +#: builtin/notes.c:693 builtin/read-tree.c:107 parse-options.h:149 +msgid "file" +msgstr "fichier" + +#: archive.c:327 builtin/archive.c:89 +msgid "write the archive to this file" +msgstr "écrire l'archive dans ce fichier" + +#: archive.c:329 +msgid "read .gitattributes in working directory" +msgstr "lire .gitattributes dans le répertoire de travail" + +#: archive.c:330 +msgid "report archived files on stderr" +msgstr "afficher les fichiers archivés sur stderr" + +#: archive.c:331 +msgid "store only" +msgstr "stockage seulement" + +#: archive.c:332 +msgid "compress faster" +msgstr "compression rapide" + +#: archive.c:340 +msgid "compress better" +msgstr "compression efficace" + +#: archive.c:343 +msgid "list supported archive formats" +msgstr "lister les formats d'archive supportés" + +#: archive.c:345 builtin/archive.c:90 builtin/clone.c:86 +msgid "repo" +msgstr "dépôt" + +#: archive.c:346 builtin/archive.c:91 +msgid "retrieve the archive from remote repository <repo>" +msgstr "récupérer l'archive depuis le dépôt distant <dépôt>" + +#: archive.c:347 builtin/archive.c:92 builtin/notes.c:615 +msgid "command" +msgstr "commande" + +#: archive.c:348 builtin/archive.c:93 +msgid "path to the remote git-upload-archive command" +msgstr "chemin vers la commande distante git-upload-archive" + +#: attr.c:259 +msgid "" +"Negative patterns are ignored in git attributes\n" +"Use '\\!' for literal leading exclamation." +msgstr "" +"Les motifs de négation sont ignorés dans les attributs git\n" +"Utilisez '\\!' pour un point d'exclamation littéral." + +#: branch.c:60 +#, c-format +msgid "Not setting branch %s as its own upstream." +msgstr "La branche %s ne peut pas être sa propre branche amont." + +#: branch.c:82 +#, c-format +msgid "Branch %s set up to track remote branch %s from %s by rebasing." +msgstr "La branche %s est paramétrée pour suivre la branche distante %s de %s en rebasant." + +#: branch.c:83 +#, c-format +msgid "Branch %s set up to track remote branch %s from %s." +msgstr "La branche %s est paramétrée pour suivre la branche distante %s depuis %s." + +#: branch.c:87 +#, c-format +msgid "Branch %s set up to track local branch %s by rebasing." +msgstr "La branche %s est paramétrée pour suivre la branche locale %s en rebasant." + +#: branch.c:88 +#, c-format +msgid "Branch %s set up to track local branch %s." +msgstr "La branche %s est paramétrée pour suivre la branche locale %s." + +#: branch.c:92 +#, c-format +msgid "Branch %s set up to track remote ref %s by rebasing." +msgstr "La branche %s est paramétrée pour suivre la référence distante %s en rebasant." + +#: branch.c:93 +#, c-format +msgid "Branch %s set up to track remote ref %s." +msgstr "La branche %s est paramétrée pour suivre la référence distante %s." + +#: branch.c:97 +#, c-format +msgid "Branch %s set up to track local ref %s by rebasing." +msgstr "La branche %s est paramétrée pour suivre la référence locale %s en rebasant." + +#: branch.c:98 +#, c-format +msgid "Branch %s set up to track local ref %s." +msgstr "La branche %s est paramétrée pour suivre la référence locale %s." + +#: branch.c:118 +#, c-format +msgid "Tracking not set up: name too long: %s" +msgstr "Suivi de branche non paramétré : le nom est trop long : %s" + +#: branch.c:137 +#, c-format +msgid "Not tracking: ambiguous information for ref %s" +msgstr "Pas de suivi : information ambiguë pour la référence %s" + +#: branch.c:182 +#, c-format +msgid "'%s' is not a valid branch name." +msgstr "'%s' n'est pas un nom de branche valide." + +#: branch.c:187 +#, c-format +msgid "A branch named '%s' already exists." +msgstr "Une branche nommée '%s' existe déjà ." + +#: branch.c:195 +msgid "Cannot force update the current branch." +msgstr "Impossible de forcer la mise à jour de la branche courante." + +#: branch.c:201 +#, c-format +msgid "Cannot setup tracking information; starting point '%s' is not a branch." +msgstr "Impossible de paramétrer le suivi de branche ; le point de départ '%s' n'est pas une branche." + +#: branch.c:203 +#, c-format +msgid "the requested upstream branch '%s' does not exist" +msgstr "la branche amont demandée '%s' n'existe pas" + +#: branch.c:205 +msgid "" +"\n" +"If you are planning on basing your work on an upstream\n" +"branch that already exists at the remote, you may need to\n" +"run \"git fetch\" to retrieve it.\n" +"\n" +"If you are planning to push out a new local branch that\n" +"will track its remote counterpart, you may want to use\n" +"\"git push -u\" to set the upstream config as you push." +msgstr "" +"\n" +"Si vous comptez baser votre travail sur une branche\n" +"amont qui existe déjà sur le serveur distant, vous pourriez\n" +"devoir lancer \"git fetch\" pour la récupérer.\n" +"\n" +"Si vous comptez pousser une nouvelle branche locale qui suivra\n" +"sa jumelle distante, vous souhaiterez utiliser \"git push -u\"\n" +"pour paramétrer le suivi distant en même temps que vous poussez." + +#: branch.c:250 +#, c-format +msgid "Not a valid object name: '%s'." +msgstr "Nom d'objet invalide : '%s'." + +#: branch.c:270 +#, c-format +msgid "Ambiguous object name: '%s'." +msgstr "Nom d'objet ambigu : '%s'." + +#: branch.c:275 +#, c-format +msgid "Not a valid branch point: '%s'." +msgstr "Point d'embranchement invalide : '%s'." + +#: branch.c:281 +msgid "Failed to lock ref for update" +msgstr "Échec du verrouillage de la référence pour mise à jour" + +#: branch.c:299 +msgid "Failed to write ref" +msgstr "Échec de l'écriture de la référence" + +#: bundle.c:36 +#, c-format +msgid "'%s' does not look like a v2 bundle file" +msgstr "'%s' ne semble pas être un fichier bundle v2" + +#: bundle.c:63 +#, c-format +msgid "unrecognized header: %s%s (%d)" +msgstr "en-tête non reconnu : %s%s (%d)" + +#: bundle.c:89 builtin/commit.c:676 +#, c-format +msgid "could not open '%s'" +msgstr "impossible d'ouvrir '%s'" + +#: bundle.c:140 +msgid "Repository lacks these prerequisite commits:" +msgstr "Le dépôt ne dispose pas des commits prérequis :" + +#: bundle.c:164 sequencer.c:651 sequencer.c:1101 builtin/log.c:300 +#: builtin/log.c:770 builtin/log.c:1344 builtin/log.c:1570 builtin/merge.c:349 +#: builtin/shortlog.c:155 +msgid "revision walk setup failed" +msgstr "échec de la préparation du parcours des révisions" + +#: bundle.c:186 +#, c-format +msgid "The bundle contains this ref:" +msgid_plural "The bundle contains these %d refs:" +msgstr[0] "Le colis contient cette référence :" +msgstr[1] "Le colis contient ces %d références :" + +#: bundle.c:193 +msgid "The bundle records a complete history." +msgstr "Le colis enregistre l'historique complet." + +#: bundle.c:195 +#, c-format +msgid "The bundle requires this ref:" +msgid_plural "The bundle requires these %d refs:" +msgstr[0] "Le colis exige cette référence :" +msgstr[1] "Le colis exige ces %d références :" + +#: bundle.c:294 +msgid "rev-list died" +msgstr "rev-list a disparu" + +#: bundle.c:300 builtin/log.c:1255 builtin/shortlog.c:258 +#, c-format +msgid "unrecognized argument: %s" +msgstr "argument non reconnu : %s" + +#: bundle.c:335 +#, c-format +msgid "ref '%s' is excluded by the rev-list options" +msgstr "la référence '%s' est exclue par les options de rev-list" + +#: bundle.c:380 +msgid "Refusing to create empty bundle." +msgstr "Refus de créer un colis vide." + +#: bundle.c:398 +msgid "Could not spawn pack-objects" +msgstr "Impossible de créer des objets groupés" + +#: bundle.c:416 +msgid "pack-objects died" +msgstr "les objets groupés ont disparu" + +#: bundle.c:419 +#, c-format +msgid "cannot create '%s'" +msgstr "impossible de créer '%s'" + +#: bundle.c:441 +msgid "index-pack died" +msgstr "l'index de groupe a disparu" + +#: commit.c:50 +#, c-format +msgid "could not parse %s" +msgstr "impossible d'analyser %s" + +#: commit.c:52 +#, c-format +msgid "%s %s is not a commit!" +msgstr "%s %s n'est pas un commit !" + +#: compat/obstack.c:406 compat/obstack.c:408 +msgid "memory exhausted" +msgstr "plus de mémoire" + +#: connected.c:39 +msgid "Could not run 'git rev-list'" +msgstr "Impossible de lancer 'git rev-list'" + +#: connected.c:48 +#, c-format +msgid "failed write to rev-list: %s" +msgstr "impossible d'écrire dans la rev-list : %s" + +#: connected.c:56 +#, c-format +msgid "failed to close rev-list's stdin: %s" +msgstr "impossible de fermer le stdin du rev-list : %s" + +#: date.c:95 +msgid "in the future" +msgstr "dans le futur" + +#: date.c:101 +#, c-format +msgid "%lu second ago" +msgid_plural "%lu seconds ago" +msgstr[0] "il y a %lu seconde" +msgstr[1] "il y a %lu secondes" + +#: date.c:108 +#, c-format +msgid "%lu minute ago" +msgid_plural "%lu minutes ago" +msgstr[0] "il y a %lu minute" +msgstr[1] "il y a %lu minutes" + +#: date.c:115 +#, c-format +msgid "%lu hour ago" +msgid_plural "%lu hours ago" +msgstr[0] "il y a %lu heure" +msgstr[1] "il y a %lu heures" + +#: date.c:122 +#, c-format +msgid "%lu day ago" +msgid_plural "%lu days ago" +msgstr[0] "il y a %lu jour" +msgstr[1] "il y a %lu jours" + +#: date.c:128 +#, c-format +msgid "%lu week ago" +msgid_plural "%lu weeks ago" +msgstr[0] "il y a %lu semaine" +msgstr[1] "il y a %lu semaines" + +#: date.c:135 +#, c-format +msgid "%lu month ago" +msgid_plural "%lu months ago" +msgstr[0] "il y a %lu mois" +msgstr[1] "il y a %lu mois" + +#: date.c:146 +#, c-format +msgid "%lu year" +msgid_plural "%lu years" +msgstr[0] "%lu an" +msgstr[1] "%lu ans" + +#: date.c:149 +#, c-format +msgid "%s, %lu month ago" +msgid_plural "%s, %lu months ago" +msgstr[0] "il y a %s et %lu mois" +msgstr[1] "il y a %s et %lu mois" + +#: date.c:154 date.c:159 +#, c-format +msgid "%lu year ago" +msgid_plural "%lu years ago" +msgstr[0] "il y a %lu an" +msgstr[1] "il y a %lu ans" + +#: diff.c:112 +#, c-format +msgid " Failed to parse dirstat cut-off percentage '%s'\n" +msgstr " Impossible d'analyser le pourcentage de modification de dirstat '%s'\n" + +#: diff.c:117 +#, c-format +msgid " Unknown dirstat parameter '%s'\n" +msgstr " Paramètre dirstat inconnu '%s'\n" + +#: diff.c:210 +#, c-format +msgid "Unknown value for 'diff.submodule' config variable: '%s'" +msgstr "Valeur inconnue pour la variable de configuration 'diff.submodule' : '%s'" + +#: diff.c:260 +#, c-format +msgid "" +"Found errors in 'diff.dirstat' config variable:\n" +"%s" +msgstr "Erreurs dans la variable de configuration 'diff.dirstat' :\n" +"%s" + +#: diff.c:3481 +#, c-format +msgid "" +"Failed to parse --dirstat/-X option parameter:\n" +"%s" +msgstr "Impossible d'analyser le paramètre de l'option --dirstat/-X :\n" +"%s" + +#: diff.c:3495 +#, c-format +msgid "Failed to parse --submodule option parameter: '%s'" +msgstr "Impossible d'analyser le paramètre de l'option --submodule : '%s'" + +#: gpg-interface.c:59 gpg-interface.c:131 +msgid "could not run gpg." +msgstr "impossible de lancer gpg." + +#: gpg-interface.c:71 +msgid "gpg did not accept the data" +msgstr "gpg n'a pas accepté les données" + +#: gpg-interface.c:82 +msgid "gpg failed to sign the data" +msgstr "gpg n'a pas pu signer les données" + +#: gpg-interface.c:115 +#, c-format +msgid "could not create temporary file '%s': %s" +msgstr "impossible de créer un fichier temporaire '%s' : %s" + +#: gpg-interface.c:118 +#, c-format +msgid "failed writing detached signature to '%s': %s" +msgstr "impossible d'écrire la signature détachée dans '%s' : %s" + +#: grep.c:1623 +#, c-format +msgid "'%s': unable to read %s" +msgstr "'%s' : lecture de %s impossible" + +#: grep.c:1640 +#, c-format +msgid "'%s': %s" +msgstr "'%s' : %s" + +#: grep.c:1651 +#, c-format +msgid "'%s': short read %s" +msgstr "'%s' : lecture tronquée %s" + +#: help.c:212 +#, c-format +msgid "available git commands in '%s'" +msgstr "commandes git disponibles dans '%s'" + +#: help.c:219 +msgid "git commands available from elsewhere on your $PATH" +msgstr "commandes git disponibles depuis un autre endroit de votre $PATH" + +#: help.c:235 +msgid "The most commonly used git commands are:" +msgstr "Les commandes git les plus utilisées sont :" + +#: help.c:292 +#, c-format +msgid "" +"'%s' appears to be a git command, but we were not\n" +"able to execute it. Maybe git-%s is broken?" +msgstr "" +"'%s' semble être une commande git, mais elle n'a pas pu\n" +"être exécutée. Peut-être git-%s est-elle cassée ?" + +#: help.c:349 +msgid "Uh oh. Your system reports no Git commands at all." +msgstr "Ahem. Votre système n'indique aucune commande Git." + +#: help.c:371 +#, c-format +msgid "" +"WARNING: You called a Git command named '%s', which does not exist.\n" +"Continuing under the assumption that you meant '%s'" +msgstr "ATTENTION : vous avez invoqué une commande Git nommée '%s' qui n'existe pas.\n" +"Poursuite en supposant que vous avez voulu dire '%s'" + +#: help.c:376 +#, c-format +msgid "in %0.1f seconds automatically..." +msgstr "dans %0.1f secondes automatiquement..." + +#: help.c:383 +#, c-format +msgid "git: '%s' is not a git command. See 'git --help'." +msgstr "git : '%s' n'est pas une commande git. Voir 'git --help'." + +#: help.c:387 +msgid "" +"\n" +"Did you mean this?" +msgid_plural "" +"\n" +"Did you mean one of these?" +msgstr[0] "\n" +"Vouliez-vous dire cela ?" +msgstr[1] "\nVouliez-vous dire un de ceux-là ?" + +#: merge.c:56 +msgid "failed to read the cache" +msgstr "impossible de lire le cache" + +#: merge.c:110 builtin/checkout.c:365 builtin/checkout.c:566 +#: builtin/clone.c:645 +msgid "unable to write new index file" +msgstr "impossible d'écrire le nouveau fichier d'index" + +#: merge-recursive.c:190 +#, c-format +msgid "(bad commit)\n" +msgstr "(mauvais commit)\n" + +#: merge-recursive.c:206 +#, c-format +msgid "addinfo_cache failed for path '%s'" +msgstr "échec de addinfo_cache pour le chemin '%s'" + +#: merge-recursive.c:268 +msgid "error building trees" +msgstr "erreur de construction des arbres" + +#: merge-recursive.c:672 +#, c-format +msgid "failed to create path '%s'%s" +msgstr "impossible de créer le chemin '%s' %s" + +#: merge-recursive.c:683 +#, c-format +msgid "Removing %s to make room for subdirectory\n" +msgstr "Suppression de %s pour faire de la place pour le sous-répertoire\n" + +#. something else exists +#. .. but not some other error (who really cares what?) +#: merge-recursive.c:697 merge-recursive.c:718 +msgid ": perhaps a D/F conflict?" +msgstr ": peut-être un conflit D/F ?" + +#: merge-recursive.c:708 +#, c-format +msgid "refusing to lose untracked file at '%s'" +msgstr "refus de perdre le fichier non suivi '%s'" + +#: merge-recursive.c:748 +#, c-format +msgid "cannot read object %s '%s'" +msgstr "impossible de lire l'objet %s '%s'" + +#: merge-recursive.c:750 +#, c-format +msgid "blob expected for %s '%s'" +msgstr "blob attendu pour %s '%s'" + +#: merge-recursive.c:773 builtin/clone.c:313 +#, c-format +msgid "failed to open '%s'" +msgstr "échec à l'ouverture de '%s'" + +#: merge-recursive.c:781 +#, c-format +msgid "failed to symlink '%s'" +msgstr "échec à la création du lien symbolique '%s'" + +#: merge-recursive.c:784 +#, c-format +msgid "do not know what to do with %06o %s '%s'" +msgstr "ne sait pas traiter %06o %s '%s'" + +#: merge-recursive.c:922 +msgid "Failed to execute internal merge" +msgstr "Échec à l'exécution de la fusion interne" + +#: merge-recursive.c:926 +#, c-format +msgid "Unable to add %s to database" +msgstr "Impossible d'ajouter %s à la base de données" + +#: merge-recursive.c:942 +msgid "unsupported object type in the tree" +msgstr "type d'objet non supporté dans l'arbre" + +#: merge-recursive.c:1021 merge-recursive.c:1035 +#, c-format +msgid "" +"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " +"in tree." +msgstr "CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de %s laissée dans l'arbre." + +#: merge-recursive.c:1027 merge-recursive.c:1040 +#, c-format +msgid "" +"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " +"in tree at %s." +msgstr "CONFLIT (%s/suppression) : %s supprimé dans %s et %s dans %s. Version %s de %s laissée dans l'arbre dans le fichier %s." + +#: merge-recursive.c:1081 +msgid "rename" +msgstr "renommage" + +#: merge-recursive.c:1081 +msgid "renamed" +msgstr "renommé" + +#: merge-recursive.c:1137 +#, c-format +msgid "%s is a directory in %s adding as %s instead" +msgstr "%s est un répertoire dans %s ajouté plutôt comme %s" + +#: merge-recursive.c:1159 +#, c-format +msgid "" +"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s" +"\"->\"%s\" in \"%s\"%s" +msgstr "CONFLIT (renommage/renommage) : Renommage de \"%s\"->\"%s\" dans la branche \"%s\" et renommage \"%s\"->\"%s\" dans \"%s\"%s" + +#: merge-recursive.c:1164 +msgid " (left unresolved)" +msgstr " (laissé non résolu)" + +#: merge-recursive.c:1218 +#, c-format +msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s" +msgstr "CONFLIT (renommage/renommage) : renommage '%s'->'%s' dans %s. Renommage '%s'->'%s' dans %s" + +#: merge-recursive.c:1248 +#, c-format +msgid "Renaming %s to %s and %s to %s instead" +msgstr "Renommage de %s en %s et de %s en %s à la place" + +#: merge-recursive.c:1447 +#, c-format +msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s" +msgstr "CONFLIT (renommage/ajout) : Renommage de %s->%s dans %s. %s ajouté dans %s" + +#: merge-recursive.c:1457 +#, c-format +msgid "Adding merged %s" +msgstr "Ajout de %s fusionné" + +#: merge-recursive.c:1462 merge-recursive.c:1660 +#, c-format +msgid "Adding as %s instead" +msgstr "Ajout plutôt comme %s" + +#: merge-recursive.c:1513 +#, c-format +msgid "cannot read object %s" +msgstr "impossible de lire l'objet %s" + +#: merge-recursive.c:1516 +#, c-format +msgid "object %s is not a blob" +msgstr "l'objet %s n'est pas un blob" + +#: merge-recursive.c:1564 +msgid "modify" +msgstr "modification" + +#: merge-recursive.c:1564 +msgid "modified" +msgstr "modifié" + +#: merge-recursive.c:1574 +msgid "content" +msgstr "contenu" + +#: merge-recursive.c:1581 +msgid "add/add" +msgstr "ajout/ajout" + +#: merge-recursive.c:1615 +#, c-format +msgid "Skipped %s (merged same as existing)" +msgstr "%s ignoré (fusion identique à l'existant)" + +#: merge-recursive.c:1629 +#, c-format +msgid "Auto-merging %s" +msgstr "Fusion automatique de %s" + +#: merge-recursive.c:1633 git-submodule.sh:1029 +msgid "submodule" +msgstr "sous-module" + +#: merge-recursive.c:1634 +#, c-format +msgid "CONFLICT (%s): Merge conflict in %s" +msgstr "CONFLIT (%s) : Conflit de fusion dans %s" + +#: merge-recursive.c:1724 +#, c-format +msgid "Removing %s" +msgstr "Suppression de %s" + +#: merge-recursive.c:1749 +msgid "file/directory" +msgstr "fichier/répertoire" + +#: merge-recursive.c:1755 +msgid "directory/file" +msgstr "répertoire/fichier" + +#: merge-recursive.c:1760 +#, c-format +msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s" +msgstr "CONFLIT (%s) : Il y a un répertoire nommé %s dans %s. Ajout de %s comme %s" + +#: merge-recursive.c:1770 +#, c-format +msgid "Adding %s" +msgstr "Ajout de %s" + +#: merge-recursive.c:1787 +msgid "Fatal merge failure, shouldn't happen." +msgstr "Échec fatal de fusion, qui ne devrait jamais arriver." + +#: merge-recursive.c:1806 +msgid "Already up-to-date!" +msgstr "Déjà à jour !" + +#: merge-recursive.c:1815 +#, c-format +msgid "merging of trees %s and %s failed" +msgstr "échec de fusion des arbres %s et %s" + +#: merge-recursive.c:1845 +#, c-format +msgid "Unprocessed path??? %s" +msgstr "Chemin non traité ??? %s" + +#: merge-recursive.c:1890 +msgid "Merging:" +msgstr "Fusion :" + +#: merge-recursive.c:1903 +#, c-format +msgid "found %u common ancestor:" +msgid_plural "found %u common ancestors:" +msgstr[0] "%u ancêtre commun trouvé :" +msgstr[1] "%u ancêtres communs trouvés :" + +#: merge-recursive.c:1940 +msgid "merge returned no commit" +msgstr "la fusion n'a pas retourné de commit" + +#: merge-recursive.c:1997 +#, c-format +msgid "Could not parse object '%s'" +msgstr "Impossible d'analyser l'objet '%s'" + +#: merge-recursive.c:2009 builtin/merge.c:658 +msgid "Unable to write index." +msgstr "Impossible d'écrire l'index." + +#: object.c:195 +#, c-format +msgid "unable to parse object: %s" +msgstr "impossible d'analyser l'objet : %s" + +#: parse-options.c:489 +msgid "..." +msgstr "..." + +#: parse-options.c:507 +#, c-format +msgid "usage: %s" +msgstr "usage : %s" + +#. TRANSLATORS: the colon here should align with the +#. one in "usage: %s" translation +#: parse-options.c:511 +#, c-format +msgid " or: %s" +msgstr " ou : %s" + +#: parse-options.c:514 +#, c-format +msgid " %s" +msgstr " %s" + +#: parse-options.c:548 +msgid "-NUM" +msgstr "-NUM" + +#: pathspec.c:83 +#, c-format +msgid "Path '%s' is in submodule '%.*s'" +msgstr "Le chemin '%s' est dans le sous-module '%.*s'" + +#: pathspec.c:99 +#, c-format +msgid "'%s' is beyond a symbolic link" +msgstr "'%s' est au delà d'un lien symbolique" + +#: remote.c:1781 +#, c-format +msgid "Your branch is ahead of '%s' by %d commit.\n" +msgid_plural "Your branch is ahead of '%s' by %d commits.\n" +msgstr[0] "Votre branche est en avance sur '%s' de %d commit.\n" +msgstr[1] "Votre branche est en avance sur '%s' de %d commits.\n" + +#: remote.c:1787 +msgid " (use \"git push\" to publish your local commits)\n" +msgstr " (utilisez \"git push\" pour publier vos commits locaux)\n" + +#: remote.c:1790 +#, c-format +msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n" +msgid_plural "" +"Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n" +msgstr[0] "Votre branche est en retard sur '%s' de %d commit, et peut être mise à jour en avance rapide.\n" +msgstr[1] "Votre branche est en retard sur '%s' de %d commits, et peut être mise à jour en avance rapide.\n" + +#: remote.c:1798 +msgid " (use \"git pull\" to update your local branch)\n" +msgstr " (utilisez \"git pull\" pour mettre à jour votre branche locale)\n" + +#: remote.c:1801 +#, c-format +msgid "" +"Your branch and '%s' have diverged,\n" +"and have %d and %d different commit each, respectively.\n" +msgid_plural "" +"Your branch and '%s' have diverged,\n" +"and have %d and %d different commits each, respectively.\n" +msgstr[0] "Votre branche et '%s' ont divergé,\n" +"et ont %d et %d commit différent chacune respectivement.\n" +msgstr[1] "Votre branche et '%s' ont divergé,\n" +"et ont %d et %d commits différents chacune respectivement.\n" + +#: remote.c:1811 +msgid " (use \"git pull\" to merge the remote branch into yours)\n" +msgstr " (utilisez \"git pull\" pour fusionner la branche distante dans la vôtre)\n" + +#: sequencer.c:206 builtin/merge.c:776 builtin/merge.c:889 builtin/merge.c:999 +#: builtin/merge.c:1009 +#, c-format +msgid "Could not open '%s' for writing" +msgstr "Impossible d'ouvrir '%s' en écriture" + +#: sequencer.c:208 builtin/merge.c:335 builtin/merge.c:779 +#: builtin/merge.c:1001 builtin/merge.c:1014 +#, c-format +msgid "Could not write to '%s'" +msgstr "Impossible d'écrire dans '%s'" + +#: sequencer.c:229 +msgid "" +"after resolving the conflicts, mark the corrected paths\n" +"with 'git add <paths>' or 'git rm <paths>'" +msgstr "après résolution des conflits, marquez les chemins corrigés\n" +"avec 'git add <chemins>' ou 'git rm <chemins>'" + +#: sequencer.c:232 +msgid "" +"after resolving the conflicts, mark the corrected paths\n" +"with 'git add <paths>' or 'git rm <paths>'\n" +"and commit the result with 'git commit'" +msgstr "" +"après résolution des conflits, marquez les chemins corrigés\n" +"avec 'git add <chemins>' ou 'git rm <chemins>'\n" +"puis validez le résultat avec 'git commit'" + +#: sequencer.c:245 sequencer.c:859 sequencer.c:942 +#, c-format +msgid "Could not write to %s" +msgstr "Impossible d'écrire dans %s" + +#: sequencer.c:248 +#, c-format +msgid "Error wrapping up %s" +msgstr "Erreur à l'emballage de %s" + +#: sequencer.c:263 +msgid "Your local changes would be overwritten by cherry-pick." +msgstr "Vos modifications locales seraient écrasées par cherry-pick." + +#: sequencer.c:265 +msgid "Your local changes would be overwritten by revert." +msgstr "Vos modifications locales seraient écrasées par revert." + +#: sequencer.c:268 +msgid "Commit your changes or stash them to proceed." +msgstr "Validez vos modifications ou remisez-les pour continuer." + +#. TRANSLATORS: %s will be "revert" or "cherry-pick" +#: sequencer.c:319 +#, c-format +msgid "%s: Unable to write new index file" +msgstr "%s: Impossible d'écrire le nouveau fichier index" + +#: sequencer.c:350 +msgid "Could not resolve HEAD commit\n" +msgstr "Impossible de résoudre le commit HEAD\n" + +#: sequencer.c:371 +msgid "Unable to update cache tree\n" +msgstr "Impossible de mettre à jour l'arbre de cache\n" + +#: sequencer.c:416 +#, c-format +msgid "Could not parse commit %s\n" +msgstr "Impossible d'analyser le commit %s\n" + +#: sequencer.c:421 +#, c-format +msgid "Could not parse parent commit %s\n" +msgstr "Impossible d'analyser le commit parent %s\n" + +#: sequencer.c:487 +msgid "Your index file is unmerged." +msgstr "Votre fichier d'index n'est pas fusionné." + +#: sequencer.c:506 +#, c-format +msgid "Commit %s is a merge but no -m option was given." +msgstr "Le commit %s est une fusion mais l'option -m n'a pas été spécifiée." + +#: sequencer.c:514 +#, c-format +msgid "Commit %s does not have parent %d" +msgstr "Le commit %s n'a pas le parent %d" + +#: sequencer.c:518 +#, c-format +msgid "Mainline was specified but commit %s is not a merge." +msgstr "Une branche principale a été spécifiée mais le commit %s n'est pas une fusion." + +#. TRANSLATORS: The first %s will be "revert" or +#. "cherry-pick", the second %s a SHA1 +#: sequencer.c:531 +#, c-format +msgid "%s: cannot parse parent commit %s" +msgstr "%s : impossible d'analyser le commit parent %s" + +#: sequencer.c:535 +#, c-format +msgid "Cannot get commit message for %s" +msgstr "Impossible d'obtenir un message de validation pour %s" + +#: sequencer.c:621 +#, c-format +msgid "could not revert %s... %s" +msgstr "impossible d'annuler %s... %s" + +#: sequencer.c:622 +#, c-format +msgid "could not apply %s... %s" +msgstr "impossible d'appliquer %s... %s" + +#: sequencer.c:654 +msgid "empty commit set passed" +msgstr "l'ensemble de commits spéficifié est vide" + +#: sequencer.c:662 +#, c-format +msgid "git %s: failed to read the index" +msgstr "git %s : échec à la lecture de l'index" + +#: sequencer.c:667 +#, c-format +msgid "git %s: failed to refresh the index" +msgstr "git %s : échec du raffraîchissement de l'index" + +#: sequencer.c:725 +#, c-format +msgid "Cannot %s during a %s" +msgstr "Impossible de %s pendant un %s" + +#: sequencer.c:747 +#, c-format +msgid "Could not parse line %d." +msgstr "Impossible d'analyser la ligne %d." + +#: sequencer.c:752 +msgid "No commits parsed." +msgstr "Aucun commit analysé." + +#: sequencer.c:765 +#, c-format +msgid "Could not open %s" +msgstr "Impossible d'ouvrir %s" + +#: sequencer.c:769 +#, c-format +msgid "Could not read %s." +msgstr "Impossible de lire %s." + +#: sequencer.c:776 +#, c-format +msgid "Unusable instruction sheet: %s" +msgstr "Feuille d'instruction inutilisable : %s" + +#: sequencer.c:804 +#, c-format +msgid "Invalid key: %s" +msgstr "Clé invalide: %s" + +#: sequencer.c:807 +#, c-format +msgid "Invalid value for %s: %s" +msgstr "Valeur invalide pour %s : %s" + +#: sequencer.c:819 +#, c-format +msgid "Malformed options sheet: %s" +msgstr "Feuille d'options malformée : %s" + +#: sequencer.c:840 +msgid "a cherry-pick or revert is already in progress" +msgstr "un picorage ou un retour est déjà en cours" + +#: sequencer.c:841 +msgid "try \"git cherry-pick (--continue | --quit | --abort)\"" +msgstr "essayez \"git cherry-pick (--continue|--quit|-- abort)\"" + +#: sequencer.c:845 +#, c-format +msgid "Could not create sequencer directory %s" +msgstr "Impossible de créer le répertoire de séquenceur %s" + +#: sequencer.c:861 sequencer.c:946 +#, c-format +msgid "Error wrapping up %s." +msgstr "Erreur lors de l'emballage de %s." + +#: sequencer.c:880 sequencer.c:1014 +msgid "no cherry-pick or revert in progress" +msgstr "aucun picorage ou retour en cours" + +#: sequencer.c:882 +msgid "cannot resolve HEAD" +msgstr "impossible de résoudre HEAD" + +#: sequencer.c:884 +msgid "cannot abort from a branch yet to be born" +msgstr "impossible d'abandonner depuis une branche non encore créée" + +#: sequencer.c:906 builtin/apply.c:4060 +#, c-format +msgid "cannot open %s: %s" +msgstr "impossible d'ouvrir %s : %s" + +#: sequencer.c:909 +#, c-format +msgid "cannot read %s: %s" +msgstr "impossible de lire %s : %s" + +#: sequencer.c:910 +msgid "unexpected end of file" +msgstr "fin de fichier inattendue" + +#: sequencer.c:916 +#, c-format +msgid "stored pre-cherry-pick HEAD file '%s' is corrupt" +msgstr "le fichier HEAD de préparation de picorage '%s' est corrompu" + +#: sequencer.c:939 +#, c-format +msgid "Could not format %s." +msgstr "Impossible de formater %s." + +#: sequencer.c:1083 +#, c-format +msgid "%s: can't cherry-pick a %s" +msgstr "%s : impossible de picorer un %s" + +#: sequencer.c:1085 +#, c-format +msgid "%s: bad revision" +msgstr "%s : mauvaise révision" + +#: sequencer.c:1119 +msgid "Can't revert as initial commit" +msgstr "Impossible d'annuler en tant que commit initial" + +#: sequencer.c:1120 +msgid "Can't cherry-pick into empty head" +msgstr "Impossible de picorer vers une HEAD vide" + +#: sha1_name.c:1036 +msgid "HEAD does not point to a branch" +msgstr "HEAD ne pointe pas sur une branche" + +#: sha1_name.c:1039 +#, c-format +msgid "No such branch: '%s'" +msgstr "Branche inconnue : '%s'" + +#: sha1_name.c:1041 +#, c-format +msgid "No upstream configured for branch '%s'" +msgstr "Aucune branche amont configurée pour la branche '%s'" + +#: sha1_name.c:1044 +#, c-format +msgid "Upstream branch '%s' not stored as a remote-tracking branch" +msgstr "La branche amont '%s' n'est pas stockée comme branche de suivi" + +#: wrapper.c:408 +#, c-format +msgid "unable to access '%s': %s" +msgstr "impossible d'accéder à '%s' : %s" + +#: wrapper.c:423 +#, c-format +msgid "unable to access '%s'" +msgstr "impossible d'accéder à '%s'" + +#: wrapper.c:434 +#, c-format +msgid "unable to look up current user in the passwd file: %s" +msgstr "impossible de rechercher l'utilisateur actuel dans le fichier de mots de passe : %s" + +#: wrapper.c:435 +msgid "no such user" +msgstr "utilisateur inconnu" + +#: wt-status.c:140 +msgid "Unmerged paths:" +msgstr "Chemins non fusionnés :" + +#: wt-status.c:167 wt-status.c:194 +#, c-format +msgid " (use \"git reset %s <file>...\" to unstage)" +msgstr " (utilisez \"git reset %s <fichier>...\" pour désindexer)" + +#: wt-status.c:169 wt-status.c:196 +msgid " (use \"git rm --cached <file>...\" to unstage)" +msgstr " (utilisez \"git rm --cached <fichier>...\" pour désindexer)" + +#: wt-status.c:173 +msgid " (use \"git add <file>...\" to mark resolution)" +msgstr " (utilisez \"git add <fichier>...\" pour marquer comme résolu)" + +#: wt-status.c:175 wt-status.c:179 +msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)" +msgstr " (utilisez \"git add/rm <fichier>...\" si nécessaire pour marquer comme résolu)" + +#: wt-status.c:177 +msgid " (use \"git rm <file>...\" to mark resolution)" +msgstr " (utilisez \"git rm <fichier>...\" pour marquer comme résolu)" + +#: wt-status.c:188 +msgid "Changes to be committed:" +msgstr "Modifications qui seront validées :" + +#: wt-status.c:206 +msgid "Changes not staged for commit:" +msgstr "Modifications qui ne seront pas validées :" + +#: wt-status.c:210 +msgid " (use \"git add <file>...\" to update what will be committed)" +msgstr " (utilisez \"git add <fichier>...\" pour mettre à jour ce qui sera validé)" + +#: wt-status.c:212 +msgid " (use \"git add/rm <file>...\" to update what will be committed)" +msgstr " (utilisez \"git add/rm <fichier>...\" pour mettre à jour ce qui sera validé)" + +#: wt-status.c:213 +msgid "" +" (use \"git checkout -- <file>...\" to discard changes in working directory)" +msgstr " (utilisez \"git checkout -- <fichier>...\" pour annuler les modifications dans la copie de travail)" + +#: wt-status.c:215 +msgid " (commit or discard the untracked or modified content in submodules)" +msgstr " (valider ou annuler le contenu non suivi ou modifié dans les sous-modules)" + +#: wt-status.c:227 +#, c-format +msgid " (use \"git %s <file>...\" to include in what will be committed)" +msgstr " (utilisez \"git %s <fichier>...\" pour inclure dans ce qui sera validé)" + +#: wt-status.c:244 +msgid "bug" +msgstr "bogue" + +#: wt-status.c:249 +msgid "both deleted:" +msgstr "supprimé des deux côtés :" + +#: wt-status.c:250 +msgid "added by us:" +msgstr "ajouté par nous :" + +#: wt-status.c:251 +msgid "deleted by them:" +msgstr "supprimé par eux :" + +#: wt-status.c:252 +msgid "added by them:" +msgstr "ajouté par eux :" + +#: wt-status.c:253 +msgid "deleted by us:" +msgstr "supprimé par nous :" + +#: wt-status.c:254 +msgid "both added:" +msgstr "ajouté de deux côtés :" + +#: wt-status.c:255 +msgid "both modified:" +msgstr "modifié des deux côtés :" + +#: wt-status.c:285 +msgid "new commits, " +msgstr "nouveaux commits, " + +#: wt-status.c:287 +msgid "modified content, " +msgstr "contenu modifié, " + +#: wt-status.c:289 +msgid "untracked content, " +msgstr "contenu non suivi, " + +#: wt-status.c:306 +#, c-format +msgid "new file: %s" +msgstr "nouveau : %s" + +#: wt-status.c:309 +#, c-format +msgid "copied: %s -> %s" +msgstr "copié : %s -> %s" + +#: wt-status.c:312 +#, c-format +msgid "deleted: %s" +msgstr "supprimé : %s" + +#: wt-status.c:315 +#, c-format +msgid "modified: %s" +msgstr "modifié : %s" + +#: wt-status.c:318 +#, c-format +msgid "renamed: %s -> %s" +msgstr "renommé : %s -> %s" + +#: wt-status.c:321 +#, c-format +msgid "typechange: %s" +msgstr "nv type : %s" + +#: wt-status.c:324 +#, c-format +msgid "unknown: %s" +msgstr "inconnu : %s" + +#: wt-status.c:327 +#, c-format +msgid "unmerged: %s" +msgstr "non fus. : %s" + +#: wt-status.c:330 +#, c-format +msgid "bug: unhandled diff status %c" +msgstr "bogue : état de diff non géré %c" + +#: wt-status.c:803 +msgid "You have unmerged paths." +msgstr "Vous avez des chemins non fusionnés." + +#: wt-status.c:806 wt-status.c:958 +msgid " (fix conflicts and run \"git commit\")" +msgstr " (réglez les conflits et lancez \"git commit\")" + +#: wt-status.c:809 +msgid "All conflicts fixed but you are still merging." +msgstr "Tous les conflits sont réglés mais la fusion n'est pas terminée." + +#: wt-status.c:812 +msgid " (use \"git commit\" to conclude merge)" +msgstr " (utilisez \"git commit\" pour terminer la fusion)" + +#: wt-status.c:822 +msgid "You are in the middle of an am session." +msgstr "Vous êtes au milieu d'une session am." + +#: wt-status.c:825 +msgid "The current patch is empty." +msgstr "Le patch actuel est vide." + +#: wt-status.c:829 +msgid " (fix conflicts and then run \"git am --resolved\")" +msgstr " (réglez les conflits puis lancez \"git am --resolved\")" + +#: wt-status.c:831 +msgid " (use \"git am --skip\" to skip this patch)" +msgstr " (utilisez \"git am --skip\" pour sauter ce patch)" + +#: wt-status.c:833 +msgid " (use \"git am --abort\" to restore the original branch)" +msgstr " (utilisez \"git am --abort\" pour restaurer la branche d'origine)" + +#: wt-status.c:893 wt-status.c:910 +#, c-format +msgid "You are currently rebasing branch '%s' on '%s'." +msgstr "Vous êtes en train de rebaser la branche '%s' sur '%s'." + +#: wt-status.c:898 wt-status.c:915 +msgid "You are currently rebasing." +msgstr "Vous êtes en train de rebaser." + +#: wt-status.c:901 +msgid " (fix conflicts and then run \"git rebase --continue\")" +msgstr " (résolvez les conflits puis lancez \"git rebase --continue\")" + +#: wt-status.c:903 +msgid " (use \"git rebase --skip\" to skip this patch)" +msgstr " (utilisez \"git rebase --skip\" pour sauter ce patch)" + +#: wt-status.c:905 +msgid " (use \"git rebase --abort\" to check out the original branch)" +msgstr " (utilisez \"git rebase --abort\" pour extraire la branche d'origine)" + +#: wt-status.c:918 +msgid " (all conflicts fixed: run \"git rebase --continue\")" +msgstr " (tous les conflits sont résolus : lancez \"git rebase --continue\")" + +#: wt-status.c:922 +#, c-format +msgid "" +"You are currently splitting a commit while rebasing branch '%s' on '%s'." +msgstr "Vous êtes actuellement en train de fractionner un commit pendant un rebasage de la branche '%s' sur '%s'." + +#: wt-status.c:927 +msgid "You are currently splitting a commit during a rebase." +msgstr "Vous êtes actuellement en train de fractionner un commit pendant un rebasage." + +#: wt-status.c:930 +msgid " (Once your working directory is clean, run \"git rebase --continue\")" +msgstr " (Une fois la copie de travail nettoyée, lancez \"git rebase --continue\")" + +#: wt-status.c:934 +#, c-format +msgid "You are currently editing a commit while rebasing branch '%s' on '%s'." +msgstr "Vous êtes actuellement en train d'éditer un commit pendant un rebasage de la branche '%s' sur '%s'." + +#: wt-status.c:939 +msgid "You are currently editing a commit during a rebase." +msgstr "Vous êtes actuellement en train d'éditer un commit pendant un rebasage." + +#: wt-status.c:942 +msgid " (use \"git commit --amend\" to amend the current commit)" +msgstr " (utilisez \"git commit --amend\" pour corriger le commit actuel)" + +#: wt-status.c:944 +msgid "" +" (use \"git rebase --continue\" once you are satisfied with your changes)" +msgstr " (utilisez \"git rebase --continue\" quand vous êtes satisfait de vos modifications)" + +#: wt-status.c:954 +msgid "You are currently cherry-picking." +msgstr "Vous êtes actuellement en train de picorer." + +#: wt-status.c:961 +msgid " (all conflicts fixed: run \"git commit\")" +msgstr " (tous les conflits sont résolus : lancez \"git commit\")" + +#: wt-status.c:970 +#, c-format +msgid "You are currently reverting commit %s." +msgstr "Vous êtes actuellement en train de rétablir le commit %s." + +#: wt-status.c:975 +msgid " (fix conflicts and run \"git revert --continue\")" +msgstr " (résolvez les conflits et lancez \"git revert --continue\")" + +#: wt-status.c:978 +msgid " (all conflicts fixed: run \"git revert --continue\")" +msgstr " (tous les conflits sont résolus : lancez \"git revert --continue\")" + +#: wt-status.c:980 +msgid " (use \"git revert --abort\" to cancel the revert operation)" +msgstr " (utilisez \"git revert --abort\" pour annuler le rétablissement)" + +#: wt-status.c:991 +#, c-format +msgid "You are currently bisecting, started from branch '%s'." +msgstr "Vous êtes en cours de bissection, depuis la branche '%s'." + +#: wt-status.c:995 +msgid "You are currently bisecting." +msgstr "Vous êtes en cours de bissection." + +#: wt-status.c:998 +msgid " (use \"git bisect reset\" to get back to the original branch)" +msgstr " (utilisez \"git bisect reset\" pour revenir à la branche d'origine)" + +#: wt-status.c:1173 +msgid "On branch " +msgstr "Sur la branche " + +#: wt-status.c:1184 +msgid "HEAD detached at " +msgstr "HEAD détachée sur " + +#: wt-status.c:1186 +msgid "HEAD detached from " +msgstr "HEAD détachée depuis " + +#: wt-status.c:1189 +msgid "Not currently on any branch." +msgstr "Actuellement sur aucun branche." + +#: wt-status.c:1206 +msgid "Initial commit" +msgstr "Validation initiale" + +#: wt-status.c:1220 +msgid "Untracked files" +msgstr "Fichiers non suivis" + +#: wt-status.c:1222 +msgid "Ignored files" +msgstr "Fichiers ignorés" + +#: wt-status.c:1226 +#, c-format +msgid "" +"It took %.2f seconds to enumerate untracked files. 'status -uno'\n" +"may speed it up, but you have to be careful not to forget to add\n" +"new files yourself (see 'git help status')." +msgstr "L'énumération des fichiers non suivis a duré %.2f secondes. 'status -uno'\n" +"peut l'accélerer, mais vous devez alors faire attention à ne pas\n" +"oublier d'ajouter les nouveaux fichiers par vous-même (voir 'git help status')." + +#: wt-status.c:1232 +#, c-format +msgid "Untracked files not listed%s" +msgstr "Fichiers non suivis non listés%s" + +#: wt-status.c:1234 +msgid " (use -u option to show untracked files)" +msgstr " (utilisez -u pour afficher les fichiers non suivis)" + +#: wt-status.c:1240 +msgid "No changes" +msgstr "Aucune modification" + +#: wt-status.c:1245 +#, c-format +msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n" +msgstr "aucune modification n'a été ajoutée à la validation (utilisez \"git add\" ou \"git commit -a\")\n" + +#: wt-status.c:1248 +#, c-format +msgid "no changes added to commit\n" +msgstr "aucune modification ajoutée à la validation\n" + +#: wt-status.c:1251 +#, c-format +msgid "" +"nothing added to commit but untracked files present (use \"git add\" to " +"track)\n" +msgstr "aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez \"git add\" pour les suivre)\n" + +#: wt-status.c:1254 +#, c-format +msgid "nothing added to commit but untracked files present\n" +msgstr "aucune modification ajoutée à la validation mais des fichiers non suivis sont présents\n" + +#: wt-status.c:1257 +#, c-format +msgid "nothing to commit (create/copy files and use \"git add\" to track)\n" +msgstr "rien à valider (créez/copiez des fichiers et utilisez \"git add\" pour les suivre)\n" + +#: wt-status.c:1260 wt-status.c:1265 +#, c-format +msgid "nothing to commit\n" +msgstr "rien à valider\n" + +#: wt-status.c:1263 +#, c-format +msgid "nothing to commit (use -u to show untracked files)\n" +msgstr "rien à valider (utilisez -u pour afficher les fichiers non suivis)\n" + +#: wt-status.c:1267 +#, c-format +msgid "nothing to commit, working directory clean\n" +msgstr "rien à valider, la copie de travail est propre\n" + +#: wt-status.c:1375 +msgid "HEAD (no branch)" +msgstr "HEAD (aucune branche)" + +#: wt-status.c:1381 +msgid "Initial commit on " +msgstr "Validation initiale sur " + +#: wt-status.c:1396 +msgid "behind " +msgstr "derrière " + +#: wt-status.c:1399 wt-status.c:1402 +msgid "ahead " +msgstr "devant " + +#: wt-status.c:1404 +msgid ", behind " +msgstr ", derrière " + +#: compat/precompose_utf8.c:58 builtin/clone.c:352 +#, c-format +msgid "failed to unlink '%s'" +msgstr "echec lors de l'unlink de '%s'" + +#: builtin/add.c:20 +msgid "git add [options] [--] <pathspec>..." +msgstr "git add [options] [--] <chemin>..." + +#. +#. * To be consistent with "git add -p" and most Git +#. * commands, we should default to being tree-wide, but +#. * this is not the original behavior and can't be +#. * changed until users trained themselves not to type +#. * "git add -u" or "git add -A". For now, we warn and +#. * keep the old behavior. Later, the behavior can be changed +#. * to tree-wide, keeping the warning for a while, and +#. * eventually we can drop the warning. +#. +#: builtin/add.c:58 +#, c-format +msgid "" +"The behavior of 'git add %s (or %s)' with no path argument from a\n" +"subdirectory of the tree will change in Git 2.0 and should not be used " +"anymore.\n" +"To add content for the whole tree, run:\n" +"\n" +" git add %s :/\n" +" (or git add %s :/)\n" +"\n" +"To restrict the command to the current directory, run:\n" +"\n" +" git add %s .\n" +" (or git add %s .)\n" +"\n" +"With the current Git version, the command is restricted to the current " +"directory.\n" +msgstr "" +"Le comportement de 'git add %s (ou %s)' sans argument de chemin depuis un\n" +"sous-répertoire du projet va changer dans Git 2.0 et ne doit plus être utilisé.\n" +"Pour ajouter le contenu de toute l'arborescence, lancez :\n" +"\n" +" git add %s :/\n" +" (ou git add %s :/)\n" +"\n" +"Pour restreindre la commande au répertoire courant, lancez :\n" +"\n" +" git add %s .\n" +" (ou git add %s .)\n" +"\n" +"Avec la version actuelle de Git, la commande est restreinte au répertoire courant.\n" + +#: builtin/add.c:100 +#, c-format +msgid "" +"You ran 'git add' with neither '-A (--all)' or '--ignore-removal',\n" +"whose behaviour will change in Git 2.0 with respect to paths you removed.\n" +"Paths like '%s' that are\n" +"removed from your working tree are ignored with this version of Git.\n" +"\n" +"* 'git add --ignore-removal <pathspec>', which is the current default,\n" +" ignores paths you removed from your working tree.\n" +"\n" +"* 'git add --all <pathspec>' will let you also record the removals.\n" +"\n" +"Run 'git status' to check the paths you removed from your working tree.\n" +msgstr "" +"Vous avez lancé 'git add' sans '-A (--all)' ni '--ignore-removal',\n" +"dont le comportement va changer dans Git 2.0 avec le respect des chemins que vous supprimez.\n" +"Les chemins tels que '%s' qui ont été\n" +"retirés de votre copie de travail sont ignorés avec cette version de Git.\n" +"\n" +"* 'git add --ignore-removal <chemin>', qui est l'option par défaut actuelle,\n" +" ignore les chemins que vous avez supprimés de votre copie de travail.\n" +"\n" +"* 'git add --all <chemin>' permet d'enregistrer aussi les suppressions.\n" +"\n" +"Lancez 'git status' pour vérifier les chemins que vous avez supprimés de votre copie de travail.\n" + +#: builtin/add.c:144 +#, c-format +msgid "unexpected diff status %c" +msgstr "status de diff inattendu %c" + +#: builtin/add.c:149 builtin/commit.c:233 +msgid "updating files failed" +msgstr "échec de la mise à jour des fichiers" + +#: builtin/add.c:163 +#, c-format +msgid "remove '%s'\n" +msgstr "suppression de '%s'\n" + +#: builtin/add.c:253 +msgid "Unstaged changes after refreshing the index:" +msgstr "Modifications non indexées après rafraîchissement de l'index :" + +#: builtin/add.c:256 builtin/add.c:572 builtin/rm.c:275 +#, c-format +msgid "pathspec '%s' did not match any files" +msgstr "le chemin '%s' ne correspond à aucun fichier" + +#: builtin/add.c:339 +msgid "Could not read the index" +msgstr "Impossible de lire l'index" + +#: builtin/add.c:349 +#, c-format +msgid "Could not open '%s' for writing." +msgstr "Impossible d'ouvrir '%s' en écriture." + +#: builtin/add.c:353 +msgid "Could not write patch" +msgstr "Impossible d'écrire le patch" + +#: builtin/add.c:358 +#, c-format +msgid "Could not stat '%s'" +msgstr "Stat de '%s' impossible" + +#: builtin/add.c:360 +msgid "Empty patch. Aborted." +msgstr "Patch vide. Abandon." + +#: builtin/add.c:366 +#, c-format +msgid "Could not apply '%s'" +msgstr "Impossible d'appliquer '%s'" + +#: builtin/add.c:376 +msgid "The following paths are ignored by one of your .gitignore files:\n" +msgstr "Les chemins suivants sont ignorés par un de vos fichiers .gitignore :\n" + +#: builtin/add.c:393 builtin/clean.c:161 builtin/fetch.c:78 builtin/mv.c:63 +#: builtin/prune-packed.c:76 builtin/push.c:425 builtin/remote.c:1253 +#: builtin/rm.c:206 +msgid "dry run" +msgstr "à vide" + +#: builtin/add.c:394 builtin/apply.c:4409 builtin/check-ignore.c:19 +#: builtin/commit.c:1152 builtin/count-objects.c:95 builtin/fsck.c:613 +#: builtin/log.c:1518 builtin/mv.c:62 builtin/read-tree.c:112 +msgid "be verbose" +msgstr "mode verbeux" + +#: builtin/add.c:396 +msgid "interactive picking" +msgstr "sélection interactive" + +#: builtin/add.c:397 builtin/checkout.c:1063 builtin/reset.c:258 +msgid "select hunks interactively" +msgstr "sélection interactive des sections" + +#: builtin/add.c:398 +msgid "edit current diff and apply" +msgstr "édition du diff actuel et application" + +#: builtin/add.c:399 +msgid "allow adding otherwise ignored files" +msgstr "permettre l'ajout de fichiers ignorés" + +#: builtin/add.c:400 +msgid "update tracked files" +msgstr "mettre à jour les fichiers suivis" + +#: builtin/add.c:401 +msgid "record only the fact that the path will be added later" +msgstr "enregistrer seulement le fait que le chemin sera ajouté plus tard" + +#: builtin/add.c:402 +msgid "add changes from all tracked and untracked files" +msgstr "ajouter les modifications de tous les fichiers suivis et non suivis" + +#. takes no arguments +#: builtin/add.c:405 +msgid "ignore paths removed in the working tree (same as --no-all)" +msgstr "ignorer les chemins effacés dans la copie de travail (identique à --no-all)" + +#: builtin/add.c:407 +msgid "don't add, only refresh the index" +msgstr "ne pas ajouter, juste rafraîchir l'index" + +#: builtin/add.c:408 +msgid "just skip files which cannot be added because of errors" +msgstr "sauter seulement les fichiers qui ne peuvent pas être ajoutés du fait d'erreurs" + +#: builtin/add.c:409 +msgid "check if - even missing - files are ignored in dry run" +msgstr "vérifier si des fichiers - même manquants - sont ignorés, à vide" + +#: builtin/add.c:431 +#, c-format +msgid "Use -f if you really want to add them.\n" +msgstr "Utilisez -f si vous voulez réellement les ajouter.\n" + +#: builtin/add.c:432 +msgid "no files added" +msgstr "aucun fichier ajouté" + +#: builtin/add.c:438 +msgid "adding files failed" +msgstr "échec de l'ajout de fichiers" + +#: builtin/add.c:477 +msgid "-A and -u are mutually incompatible" +msgstr "-A et -u sont mutuellement incompatibles" + +#: builtin/add.c:495 +msgid "Option --ignore-missing can only be used together with --dry-run" +msgstr "L'option --ignore-missing ne peut être utilisée qu'en complément de --dry-run" + +#: builtin/add.c:525 +#, c-format +msgid "Nothing specified, nothing added.\n" +msgstr "Rien de spécifié, rien n'a été ajouté.\n" + +#: builtin/add.c:526 +#, c-format +msgid "Maybe you wanted to say 'git add .'?\n" +msgstr "Vous vouliez sûrement dire 'git add .' ?\n" + +#: builtin/add.c:532 builtin/check-ignore.c:66 builtin/clean.c:204 +#: builtin/commit.c:293 builtin/mv.c:82 builtin/rm.c:235 +msgid "index file corrupt" +msgstr "fichier d'index corrompu" + +#: builtin/add.c:604 builtin/apply.c:4505 builtin/mv.c:229 builtin/rm.c:370 +msgid "Unable to write new index file" +msgstr "Impossible d'écrire le nouveau fichier d'index" + +#: builtin/apply.c:57 +msgid "git apply [options] [<patch>...]" +msgstr "git apply [options] [<patch>...]" + +#: builtin/apply.c:110 +#, c-format +msgid "unrecognized whitespace option '%s'" +msgstr "option d'espace non reconnue '%s'" + +#: builtin/apply.c:125 +#, c-format +msgid "unrecognized whitespace ignore option '%s'" +msgstr "option d'ignorance d'espce non reconnue '%s'" + +#: builtin/apply.c:823 +#, c-format +msgid "Cannot prepare timestamp regexp %s" +msgstr "Impossible de préparer la regexp d'horodatage %s" + +#: builtin/apply.c:832 +#, c-format +msgid "regexec returned %d for input: %s" +msgstr "regexec a retourné %d pour l'entrée : %s" + +#: builtin/apply.c:913 +#, c-format +msgid "unable to find filename in patch at line %d" +msgstr "nom de fichier du patch introuvable à la ligne %d" + +#: builtin/apply.c:945 +#, c-format +msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d" +msgstr "git apply : mauvais format de git-diff - /dev/null attendu, %s trouvé à la ligne %d" + +#: builtin/apply.c:949 +#, c-format +msgid "git apply: bad git-diff - inconsistent new filename on line %d" +msgstr "git apply : mauvais format de git-diff - nouveau nom de fichier inconsistant à la ligne %d" + +#: builtin/apply.c:950 +#, c-format +msgid "git apply: bad git-diff - inconsistent old filename on line %d" +msgstr "git apply : mauvais format de git-diff - ancien nom de fichier inconsistant à la ligne %d" + +#: builtin/apply.c:957 +#, c-format +msgid "git apply: bad git-diff - expected /dev/null on line %d" +msgstr "git apply : mauvais format de git-diff - /dev/null attendu à la ligne %d" + +#: builtin/apply.c:1422 +#, c-format +msgid "recount: unexpected line: %.*s" +msgstr "recount : ligne inattendue : %.*s" + +#: builtin/apply.c:1479 +#, c-format +msgid "patch fragment without header at line %d: %.*s" +msgstr "fragment de patch sans en-tête à la ligne %d : %.*s" + +#: builtin/apply.c:1496 +#, c-format +msgid "" +"git diff header lacks filename information when removing %d leading pathname " +"component (line %d)" +msgid_plural "" +"git diff header lacks filename information when removing %d leading pathname " +"components (line %d)" +msgstr[0] "information de nom de fichier manquante dans l'en-tête de git diff lors de la suppression de %d composant de préfixe de chemin (ligne %d)" +msgstr[1] "information de nom de fichier manquante dans l'en-tête de git diff lors de la suppression de %d composants de préfixe de chemin (ligne %d)" + +#: builtin/apply.c:1656 +msgid "new file depends on old contents" +msgstr "le nouveau fichier dépend de contenus anciens" + +#: builtin/apply.c:1658 +msgid "deleted file still has contents" +msgstr "le fichier supprimé a encore du contenu" + +#: builtin/apply.c:1684 +#, c-format +msgid "corrupt patch at line %d" +msgstr "patch corrompu à la ligne %d" + +#: builtin/apply.c:1720 +#, c-format +msgid "new file %s depends on old contents" +msgstr "le nouveau fichier %s dépend de contenus anciens" + +#: builtin/apply.c:1722 +#, c-format +msgid "deleted file %s still has contents" +msgstr "le fichier supprimé %s a encore du contenu" + +#: builtin/apply.c:1725 +#, c-format +msgid "** warning: file %s becomes empty but is not deleted" +msgstr "** attention : le fichier %s devient vide mais n'est pas supprimé" + +#: builtin/apply.c:1871 +#, c-format +msgid "corrupt binary patch at line %d: %.*s" +msgstr "patch binaire corrompu à la ligne %d : %.*s" + +#. there has to be one hunk (forward hunk) +#: builtin/apply.c:1900 +#, c-format +msgid "unrecognized binary patch at line %d" +msgstr "patch binaire non reconnu à la ligne %d" + +#: builtin/apply.c:1986 +#, c-format +msgid "patch with only garbage at line %d" +msgstr "patch totalement incompréhensible à la ligne %d" + +#: builtin/apply.c:2076 +#, c-format +msgid "unable to read symlink %s" +msgstr "lecture du lien symbolique %s impossible" + +#: builtin/apply.c:2080 +#, c-format +msgid "unable to open or read %s" +msgstr "ouverture ou lecture de %s impossible" + +#: builtin/apply.c:2688 +#, c-format +msgid "invalid start of line: '%c'" +msgstr "début de ligne invalide : '%c'" + +#: builtin/apply.c:2806 +#, c-format +msgid "Hunk #%d succeeded at %d (offset %d line)." +msgid_plural "Hunk #%d succeeded at %d (offset %d lines)." +msgstr[0] "La section n°%d a réussi à la ligne %d (offset %d ligne)." +msgstr[1] "La section n°%d a réussi à la ligne %d (offset %d lignes)." + +#: builtin/apply.c:2818 +#, c-format +msgid "Context reduced to (%ld/%ld) to apply fragment at %d" +msgstr "Contexte réduit à (%ld/%ld) pour appliquer le fragment à la ligne %d" + +#: builtin/apply.c:2824 +#, c-format +msgid "" +"while searching for:\n" +"%.*s" +msgstr "pendant la recherche de :\n" +"%.*s" + +#: builtin/apply.c:2843 +#, c-format +msgid "missing binary patch data for '%s'" +msgstr "données de patch binaire manquantes pour '%s'" + +#: builtin/apply.c:2946 +#, c-format +msgid "binary patch does not apply to '%s'" +msgstr "le patch binaire ne s'applique par correctement à '%s'" + +#: builtin/apply.c:2952 +#, c-format +msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)" +msgstr "le patch binaire sur '%s' crée un résultat incorrect (%s attendu, mais %s trouvé)" + +#: builtin/apply.c:2973 +#, c-format +msgid "patch failed: %s:%ld" +msgstr "le patch a échoué : %s:%ld" + +#: builtin/apply.c:3095 +#, c-format +msgid "cannot checkout %s" +msgstr "extraction de %s impossible" + +#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3193 +#, c-format +msgid "read of %s failed" +msgstr "echec de la lecture de %s" + +#: builtin/apply.c:3173 builtin/apply.c:3395 +#, c-format +msgid "path %s has been renamed/deleted" +msgstr "le chemin %s a été renommé/supprimé" + +#: builtin/apply.c:3254 builtin/apply.c:3409 +#, c-format +msgid "%s: does not exist in index" +msgstr "%s : n'existe pas dans l'index" + +#: builtin/apply.c:3258 builtin/apply.c:3401 builtin/apply.c:3423 +#, c-format +msgid "%s: %s" +msgstr "%s : %s" + +#: builtin/apply.c:3263 builtin/apply.c:3417 +#, c-format +msgid "%s: does not match index" +msgstr "%s : ne correspond pas à l'index" + +#: builtin/apply.c:3365 +msgid "removal patch leaves file contents" +msgstr "le patch de suppression laisse un contenu dans le fichier" + +#: builtin/apply.c:3434 +#, c-format +msgid "%s: wrong type" +msgstr "%s : type erroné" + +#: builtin/apply.c:3436 +#, c-format +msgid "%s has type %o, expected %o" +msgstr "%s est de type %o, mais %o attendu" + +#: builtin/apply.c:3537 +#, c-format +msgid "%s: already exists in index" +msgstr "%s : existe déjà dans l'index" + +#: builtin/apply.c:3540 +#, c-format +msgid "%s: already exists in working directory" +msgstr "%s : existe déjà dans la copie de travail" + +#: builtin/apply.c:3560 +#, c-format +msgid "new mode (%o) of %s does not match old mode (%o)" +msgstr "le nouveau mode (%o) de %s ne correspond pas à l'ancien mode (%o)" + +#: builtin/apply.c:3565 +#, c-format +msgid "new mode (%o) of %s does not match old mode (%o) of %s" +msgstr "le nouveau mode (%o) de %s ne correspond pas à l'ancien mode (%o) de %s" + +#: builtin/apply.c:3573 +#, c-format +msgid "%s: patch does not apply" +msgstr "%s : le patch ne s'applique pas" + +#: builtin/apply.c:3586 +#, c-format +msgid "Checking patch %s..." +msgstr "Vérification du patch %s..." + +#: builtin/apply.c:3679 builtin/checkout.c:216 builtin/reset.c:124 +#, c-format +msgid "make_cache_entry failed for path '%s'" +msgstr "echec de make_cache_entry pour le chemin '%s'" + +#: builtin/apply.c:3822 +#, c-format +msgid "unable to remove %s from index" +msgstr "suppression de %s dans l'index impossible" + +#: builtin/apply.c:3850 +#, c-format +msgid "corrupt patch for subproject %s" +msgstr "patch corrompu pour le sous-projet %s" + +#: builtin/apply.c:3854 +#, c-format +msgid "unable to stat newly created file '%s'" +msgstr "stat du fichier nouvellement créé '%s' impossible" + +#: builtin/apply.c:3859 +#, c-format +msgid "unable to create backing store for newly created file %s" +msgstr "création du magasin de stockage pour le fichier nouvellement créé %s impossible" + +#: builtin/apply.c:3862 builtin/apply.c:3970 +#, c-format +msgid "unable to add cache entry for %s" +msgstr "ajout de l'entrée de cache %s impossible" + +#: builtin/apply.c:3895 +#, c-format +msgid "closing file '%s'" +msgstr "fermeture du fichier '%s'" + +#: builtin/apply.c:3944 +#, c-format +msgid "unable to write file '%s' mode %o" +msgstr "écriture du fichier '%s' mode %o impossible" + +#: builtin/apply.c:4031 +#, c-format +msgid "Applied patch %s cleanly." +msgstr "Patch %s appliqué proprement." + +#: builtin/apply.c:4039 +msgid "internal error" +msgstr "erreur interne" + +#. Say this even without --verbose +#: builtin/apply.c:4042 +#, c-format +msgid "Applying patch %%s with %d reject..." +msgid_plural "Applying patch %%s with %d rejects..." +msgstr[0] "Application du patch %%s avec %d rejet..." +msgstr[1] "Application du patch %%s avec %d rejets..." + +#: builtin/apply.c:4052 +#, c-format +msgid "truncating .rej filename to %.*s.rej" +msgstr "troncature du nom de fichier .rej en %.*s.rej" + +#: builtin/apply.c:4073 +#, c-format +msgid "Hunk #%d applied cleanly." +msgstr "Section n°%d appliquée proprement." + +#: builtin/apply.c:4076 +#, c-format +msgid "Rejected hunk #%d." +msgstr "Section n°%d rejetée." + +#: builtin/apply.c:4226 +msgid "unrecognized input" +msgstr "entrée non reconnue" + +#: builtin/apply.c:4237 +msgid "unable to read index file" +msgstr "lecture du fichier d'index impossible" + +#: builtin/apply.c:4356 builtin/apply.c:4359 builtin/clone.c:92 +#: builtin/fetch.c:63 +msgid "path" +msgstr "chemin" + +#: builtin/apply.c:4357 +msgid "don't apply changes matching the given path" +msgstr "ne pas appliquer les modifications qui correspondent au chemin donné" + +#: builtin/apply.c:4360 +msgid "apply changes matching the given path" +msgstr "appliquer les modifications qui correspondent au chemin donné" + +#: builtin/apply.c:4362 +msgid "num" +msgstr "num" + +#: builtin/apply.c:4363 +msgid "remove <num> leading slashes from traditional diff paths" +msgstr "supprimer <num> barres obliques des chemins traditionnels de diff" + +#: builtin/apply.c:4366 +msgid "ignore additions made by the patch" +msgstr "ignorer les additions réalisées par le patch" + +#: builtin/apply.c:4368 +msgid "instead of applying the patch, output diffstat for the input" +msgstr "au lieu d'appliquer le patch, afficher le diffstat de l'entrée" + +#: builtin/apply.c:4372 +msgid "show number of added and deleted lines in decimal notation" +msgstr "afficher le nombre de lignes ajoutées et supprimées en notation décimale" + +#: builtin/apply.c:4374 +msgid "instead of applying the patch, output a summary for the input" +msgstr "au lieu d'appliquer le patch, afficher un résumer de l'entrée" + +#: builtin/apply.c:4376 +msgid "instead of applying the patch, see if the patch is applicable" +msgstr "au lieu d'appliquer le patch, voir si le patch est applicable" + +#: builtin/apply.c:4378 +msgid "make sure the patch is applicable to the current index" +msgstr "s'assurer que le patch est applicable sur l'index actuel" + +#: builtin/apply.c:4380 +msgid "apply a patch without touching the working tree" +msgstr "appliquer les patch sans toucher à la copie de travail" + +#: builtin/apply.c:4382 +msgid "also apply the patch (use with --stat/--summary/--check)" +msgstr "appliquer aussi le patch (à utiliser avec ---stat/--summary/--check)" + +#: builtin/apply.c:4384 +msgid "attempt three-way merge if a patch does not apply" +msgstr "tenter une fusion à 3 points si le patch ne s'applique pas proprement" + +#: builtin/apply.c:4386 +msgid "build a temporary index based on embedded index information" +msgstr "construire un index temporaire fondé sur l'information de l'index embarqué" + +#: builtin/apply.c:4388 builtin/checkout-index.c:197 builtin/ls-files.c:456 +msgid "paths are separated with NUL character" +msgstr "les chemins sont séparés par un caractère NUL" + +#: builtin/apply.c:4391 +msgid "ensure at least <n> lines of context match" +msgstr "s'assurer d'au moins <n> lignes de correspondance de contexte" + +#: builtin/apply.c:4392 +msgid "action" +msgstr "action" + +#: builtin/apply.c:4393 +msgid "detect new or modified lines that have whitespace errors" +msgstr "détecter des lignes nouvelles ou modifiées qui contiennent des erreurs d'espace" + +#: builtin/apply.c:4396 builtin/apply.c:4399 +msgid "ignore changes in whitespace when finding context" +msgstr "ignorer des modifications d'espace lors de la recherche de contexte" + +#: builtin/apply.c:4402 +msgid "apply the patch in reverse" +msgstr "appliquer le patch en sens inverse" + +#: builtin/apply.c:4404 +msgid "don't expect at least one line of context" +msgstr "ne pas s'attendre à au moins une ligne de contexte" + +#: builtin/apply.c:4406 +msgid "leave the rejected hunks in corresponding *.rej files" +msgstr "laisser les sections rejetées dans les fichiers *.rej correspondants" + +#: builtin/apply.c:4408 +msgid "allow overlapping hunks" +msgstr "accepter les recouvrements de sections" + +#: builtin/apply.c:4411 +msgid "tolerate incorrectly detected missing new-line at the end of file" +msgstr "tolérer des erreurs de détection de retours chariot manquants en fin de fichier" + +#: builtin/apply.c:4414 +msgid "do not trust the line counts in the hunk headers" +msgstr "ne pas se fier au compte de lignes dans les en-têtes de section" + +#: builtin/apply.c:4416 +msgid "root" +msgstr "racine" + +#: builtin/apply.c:4417 +msgid "prepend <root> to all filenames" +msgstr "préfixer tous les noms de fichier avec <root>" + +#: builtin/apply.c:4439 +msgid "--3way outside a repository" +msgstr "--3way hors d'un dépôt" + +#: builtin/apply.c:4447 +msgid "--index outside a repository" +msgstr "--index hors d'un dépôt" + +#: builtin/apply.c:4450 +msgid "--cached outside a repository" +msgstr "--cached hors d'un dépôt" + +#: builtin/apply.c:4466 +#, c-format +msgid "can't open patch '%s'" +msgstr "ouverture impossible du patch '%s'" + +#: builtin/apply.c:4480 +#, c-format +msgid "squelched %d whitespace error" +msgid_plural "squelched %d whitespace errors" +msgstr[0] "%d erreur d'espace ignorée" +msgstr[1] "%d erreurs d'espace ignorées" + +#: builtin/apply.c:4486 builtin/apply.c:4496 +#, c-format +msgid "%d line adds whitespace errors." +msgid_plural "%d lines add whitespace errors." +msgstr[0] "%d ligne a ajouté des erreurs d'espace." +msgstr[1] "%d lignes ont ajouté des erreurs d'espace." + +#: builtin/archive.c:17 +#, c-format +msgid "could not create archive file '%s'" +msgstr "création impossible du fichier d'archive '%s'" + +#: builtin/archive.c:20 +msgid "could not redirect output" +msgstr "impossible de rediriger la sortie" + +#: builtin/archive.c:37 +msgid "git archive: Remote with no URL" +msgstr "git archive : Dépôt distant sans URL" + +#: builtin/archive.c:58 +msgid "git archive: expected ACK/NAK, got EOF" +msgstr "git archive : ACK/NACK attendu, EOF reçu" + +#: builtin/archive.c:61 +#, c-format +msgid "git archive: NACK %s" +msgstr "git archive : NACK %s" + +#: builtin/archive.c:63 +#, c-format +msgid "remote error: %s" +msgstr "erreur distante : %s" + +#: builtin/archive.c:64 +msgid "git archive: protocol error" +msgstr "git archive : erreur de protocole" + +#: builtin/archive.c:68 +msgid "git archive: expected a flush" +msgstr "git archive : vidage attendu" + +#: builtin/bisect--helper.c:7 +msgid "git bisect--helper --next-all [--no-checkout]" +msgstr "git bisect --helper --next-all [--no-checkout]" + +#: builtin/bisect--helper.c:17 +msgid "perform 'git bisect next'" +msgstr "effectuer 'git bisect next'" + +#: builtin/bisect--helper.c:19 +msgid "update BISECT_HEAD instead of checking out the current commit" +msgstr "mettre à jour BISECT_HEAD au lieu d'extraire le commit actuel" + +#: builtin/blame.c:25 +msgid "git blame [options] [rev-opts] [rev] [--] file" +msgstr "git blame [options] [options-de-révision] [rev] [--] fichier" + +#: builtin/blame.c:30 +msgid "[rev-opts] are documented in git-rev-list(1)" +msgstr "[options-de-révision] sont documentés dans git-rev-list(1)" + +#: builtin/blame.c:2355 +msgid "Show blame entries as we find them, incrementally" +msgstr "Montrer les entrée de blâme au fur et à mesure de leur découverte, de manière incrémentale" + +#: builtin/blame.c:2356 +msgid "Show blank SHA-1 for boundary commits (Default: off)" +msgstr "Montrer un SHA-1 blanc pour les commits de limite (Défaut : désactivé)" + +#: builtin/blame.c:2357 +msgid "Do not treat root commits as boundaries (Default: off)" +msgstr "Ne pas traiter les commits racine comme des limites (Défaut : désactivé)" + +#: builtin/blame.c:2358 +msgid "Show work cost statistics" +msgstr "Montrer les statistiques de coût d'activité" + +#: builtin/blame.c:2359 +msgid "Show output score for blame entries" +msgstr "Montrer le score de sortie pour les entrées de blâme" + +#: builtin/blame.c:2360 +msgid "Show original filename (Default: auto)" +msgstr "Montrer les noms de fichier originaux (Défaut : auto)" + +#: builtin/blame.c:2361 +msgid "Show original linenumber (Default: off)" +msgstr "Montrer les numéros de lignes originaux (Défaut : désactivé)" + +#: builtin/blame.c:2362 +msgid "Show in a format designed for machine consumption" +msgstr "Afficher dans un format propice à la consommation par machine" + +#: builtin/blame.c:2363 +msgid "Show porcelain format with per-line commit information" +msgstr "Afficher en format porcelaine avec l'information de commit par ligne" + +#: builtin/blame.c:2364 +msgid "Use the same output mode as git-annotate (Default: off)" +msgstr "Utiliser le même mode de sortie que git-annotate (Défaut : désactivé)" + +#: builtin/blame.c:2365 +msgid "Show raw timestamp (Default: off)" +msgstr "Afficher les horodatages bruts (Défaut: désactivé)" + +#: builtin/blame.c:2366 +msgid "Show long commit SHA1 (Default: off)" +msgstr "Afficher les longs SHA1 de commits (Défaut : désactivé)" + +#: builtin/blame.c:2367 +msgid "Suppress author name and timestamp (Default: off)" +msgstr "Supprimer le nom de l'auteur et l'horodatage (Défaut : désactivé)" + +#: builtin/blame.c:2368 +msgid "Show author email instead of name (Default: off)" +msgstr "Afficher l'e-mail de l'auteur au lieu du nom (Défaut : désactivé)" + +#: builtin/blame.c:2369 +msgid "Ignore whitespace differences" +msgstr "Ignorer les différences d'espace" + +#: builtin/blame.c:2370 +msgid "Spend extra cycles to find better match" +msgstr "Dépenser des cycles supplémentaires pour trouver une meilleure correspondance" + +#: builtin/blame.c:2371 +msgid "Use revisions from <file> instead of calling git-rev-list" +msgstr "Utiliser les révisions du fichier <fichier> au lieu d'appeler git-rev-list" + +#: builtin/blame.c:2372 +msgid "Use <file>'s contents as the final image" +msgstr "Utiliser le contenu de <fichier> comme image finale" + +#: builtin/blame.c:2373 builtin/blame.c:2374 +msgid "score" +msgstr "score" + +#: builtin/blame.c:2373 +msgid "Find line copies within and across files" +msgstr "Trouver les copies de ligne dans et entre les fichiers" + +#: builtin/blame.c:2374 +msgid "Find line movements within and across files" +msgstr "Trouver les mouvements de ligne dans et entre les fichiers" + +#: builtin/blame.c:2375 +msgid "n,m" +msgstr "n,m" + +#: builtin/blame.c:2375 +msgid "Process only line range n,m, counting from 1" +msgstr "Traiter seulement l'intervalle de ligne n,m en commençant le compte à 1" + +#: builtin/branch.c:24 +msgid "git branch [options] [-r | -a] [--merged | --no-merged]" +msgstr "git branch [options] [-r | -a] [--merged | --no-merged]" + +#: builtin/branch.c:25 +msgid "git branch [options] [-l] [-f] <branchname> [<start-point>]" +msgstr "git branch [options] [-l] [-f] <nomdebranch> [<point-de-départ>]" + +#: builtin/branch.c:26 +msgid "git branch [options] [-r] (-d | -D) <branchname>..." +msgstr "git branch [options] [-r] (-d | -D) <nomdebranche>..." + +#: builtin/branch.c:27 +msgid "git branch [options] (-m | -M) [<oldbranch>] <newbranch>" +msgstr "git branch [options] (-m | -M) [<anciennebranche>] <nouvellebranche>" + +#: builtin/branch.c:150 +#, c-format +msgid "" +"deleting branch '%s' that has been merged to\n" +" '%s', but not yet merged to HEAD." +msgstr "" +"suppression de la branche '%s' qui a été fusionnée dans\n" +" '%s', mais pas dans HEAD." + +#: builtin/branch.c:154 +#, c-format +msgid "" +"not deleting branch '%s' that is not yet merged to\n" +" '%s', even though it is merged to HEAD." +msgstr "" +"branche '%s' non supprimée car elle n'a pas été fusionnée dans\n" +" '%s', même si elle est fusionnée dans HEAD." + +#: builtin/branch.c:168 +#, c-format +msgid "Couldn't look up commit object for '%s'" +msgstr "Impossible de rechercher l'objet commit pour '%s'" + +#: builtin/branch.c:172 +#, c-format +msgid "" +"The branch '%s' is not fully merged.\n" +"If you are sure you want to delete it, run 'git branch -D %s'." +msgstr "" +"La branche '%s' n'est pas totalement fusionnée.\n" +"Si vous êtes sur que vous voulez la supprimer, lancez 'git branch -D %s'." + +#: builtin/branch.c:185 +msgid "Update of config-file failed" +msgstr "Échec de la mise à jour du fichier de config" + +#: builtin/branch.c:213 +msgid "cannot use -a with -d" +msgstr "impossible d'utiliser -a avec -d" + +#: builtin/branch.c:219 +msgid "Couldn't look up commit object for HEAD" +msgstr "Impossible de rechercher l'objet commit pour HEAD" + +#: builtin/branch.c:227 +#, c-format +msgid "Cannot delete the branch '%s' which you are currently on." +msgstr "Impossible de supprimer la branche '%s' sur laquelle vous êtes." + +#: builtin/branch.c:240 +#, c-format +msgid "remote branch '%s' not found." +msgstr "branche distante %s' non trouvée." + +#: builtin/branch.c:241 +#, c-format +msgid "branch '%s' not found." +msgstr "branche '%s' non trouvée." + +#: builtin/branch.c:255 +#, c-format +msgid "Error deleting remote branch '%s'" +msgstr "Erreur lors de la suppression de la branche distante '%s'" + +#: builtin/branch.c:256 +#, c-format +msgid "Error deleting branch '%s'" +msgstr "Erreur lors de la suppression de la branche '%s'" + +#: builtin/branch.c:263 +#, c-format +msgid "Deleted remote branch %s (was %s).\n" +msgstr "Branche distante %s supprimée (précédemment %s).\n" + +#: builtin/branch.c:264 +#, c-format +msgid "Deleted branch %s (was %s).\n" +msgstr "Branche %s supprimée (précédemment %s).\n" + +#: builtin/branch.c:366 +#, c-format +msgid "branch '%s' does not point at a commit" +msgstr "la branche '%s' ne pointe pas sur un commit" + +#: builtin/branch.c:453 +#, c-format +msgid "[%s: behind %d]" +msgstr "[%s: en retard de %d]" + +#: builtin/branch.c:455 +#, c-format +msgid "[behind %d]" +msgstr "[en retard de %d]" + +#: builtin/branch.c:459 +#, c-format +msgid "[%s: ahead %d]" +msgstr "[%s : en avance de %d]" + +#: builtin/branch.c:461 +#, c-format +msgid "[ahead %d]" +msgstr "[en avance de %d]" + +#: builtin/branch.c:464 +#, c-format +msgid "[%s: ahead %d, behind %d]" +msgstr "[%s : en avance de %d, en retard de %d]" + +#: builtin/branch.c:467 +#, c-format +msgid "[ahead %d, behind %d]" +msgstr "[en avance de %d, en retard de %d]" + +#: builtin/branch.c:490 +msgid " **** invalid ref ****" +msgstr " **** référence invalide ****" + +#: builtin/branch.c:582 +#, c-format +msgid "(no branch, rebasing %s)" +msgstr "(aucune branche, rebasage de %s)" + +#: builtin/branch.c:585 +#, c-format +msgid "(no branch, bisect started on %s)" +msgstr "(aucune branche, bisect a démarré sur %s)" + +#: builtin/branch.c:588 +#, c-format +msgid "(detached from %s)" +msgstr "(détaché de %s)" + +#: builtin/branch.c:591 +msgid "(no branch)" +msgstr "(aucune branche)" + +#: builtin/branch.c:637 +#, c-format +msgid "object '%s' does not point to a commit" +msgstr "l'objet '%s' ne pointe pas sur un commit" + +#: builtin/branch.c:669 +msgid "some refs could not be read" +msgstr "des références n'ont pas pu être lues" + +#: builtin/branch.c:682 +msgid "cannot rename the current branch while not on any." +msgstr "impossible de renommer la branche actuelle, il n'y en a pas." + +#: builtin/branch.c:692 +#, c-format +msgid "Invalid branch name: '%s'" +msgstr "Nom de branche invalide : '%s'" + +#: builtin/branch.c:707 +msgid "Branch rename failed" +msgstr "Echec de renommage de la branche" + +#: builtin/branch.c:711 +#, c-format +msgid "Renamed a misnamed branch '%s' away" +msgstr "Renommage d'un branche mal nommée '%s'" + +#: builtin/branch.c:715 +#, c-format +msgid "Branch renamed to %s, but HEAD is not updated!" +msgstr "La branche a été renommée en %s, mais HEAD n'est pas mise à jour !" + +#: builtin/branch.c:722 +msgid "Branch is renamed, but update of config-file failed" +msgstr "La branche est renommée, mais la mise à jour du fichier de config a échoué" + +#: builtin/branch.c:737 +#, c-format +msgid "malformed object name %s" +msgstr "nom d'objet malformé %s" + +#: builtin/branch.c:761 +#, c-format +msgid "could not write branch description template: %s" +msgstr "impossible d'écrire le modèle de description de branche : %s" + +#: builtin/branch.c:791 +msgid "Generic options" +msgstr "Options génériques" + +#: builtin/branch.c:793 +msgid "show hash and subject, give twice for upstream branch" +msgstr "afficher le hachage et le sujet, doublé pour la branche amont" + +#: builtin/branch.c:794 +msgid "suppress informational messages" +msgstr "supprimer les messages d'information" + +#: builtin/branch.c:795 +msgid "set up tracking mode (see git-pull(1))" +msgstr "régler le mode de suivi (voir git-pull(1))" + +#: builtin/branch.c:797 +msgid "change upstream info" +msgstr "modifier l'information amont" + +#: builtin/branch.c:801 +msgid "use colored output" +msgstr "utiliser la coloration dans la sortie" + +#: builtin/branch.c:802 +msgid "act on remote-tracking branches" +msgstr "agir sur les branches de suivi distantes" + +#: builtin/branch.c:805 builtin/branch.c:811 builtin/branch.c:832 +#: builtin/branch.c:838 builtin/commit.c:1368 builtin/commit.c:1369 +#: builtin/commit.c:1370 builtin/commit.c:1371 builtin/tag.c:468 +msgid "commit" +msgstr "valider" + +#: builtin/branch.c:806 builtin/branch.c:812 +msgid "print only branches that contain the commit" +msgstr "afficher seulement les branches qui contiennent le commit" + +#: builtin/branch.c:818 +msgid "Specific git-branch actions:" +msgstr "Actions spécifiques à git-branch :" + +#: builtin/branch.c:819 +msgid "list both remote-tracking and local branches" +msgstr "afficher à la fois les branches de suivi et les branches locales" + +#: builtin/branch.c:821 +msgid "delete fully merged branch" +msgstr "supprimer une branche totalement fusionnée" + +#: builtin/branch.c:822 +msgid "delete branch (even if not merged)" +msgstr "supprimer une branche (même non fusionnée)" + +#: builtin/branch.c:823 +msgid "move/rename a branch and its reflog" +msgstr "déplacer/renommer une branche et son reflog" + +#: builtin/branch.c:824 +msgid "move/rename a branch, even if target exists" +msgstr "déplacer/renommer une branche, même si la cible existe" + +#: builtin/branch.c:825 +msgid "list branch names" +msgstr "afficher les noms des branches" + +#: builtin/branch.c:826 +msgid "create the branch's reflog" +msgstr "créer le reflog de la branche" + +#: builtin/branch.c:828 +msgid "edit the description for the branch" +msgstr "éditer la description de la branche" + +#: builtin/branch.c:829 +msgid "force creation (when already exists)" +msgstr "forcer la création (même si la cible existe)" + +#: builtin/branch.c:832 +msgid "print only not merged branches" +msgstr "afficher seulement les branches non fusionnées" + +#: builtin/branch.c:838 +msgid "print only merged branches" +msgstr "afficher seulement les branches fusionnées" + +#: builtin/branch.c:842 +msgid "list branches in columns" +msgstr "afficher les branches en colonnes" + +#: builtin/branch.c:855 +msgid "Failed to resolve HEAD as a valid ref." +msgstr "Échec de résolution de HEAD comme référence valide." + +#: builtin/branch.c:860 builtin/clone.c:619 +msgid "HEAD not found below refs/heads!" +msgstr "HEAD non trouvée sous refs/heads !" + +#: builtin/branch.c:883 +msgid "--column and --verbose are incompatible" +msgstr "--column et --verbose sont incompatibles" + +#: builtin/branch.c:889 builtin/branch.c:928 +msgid "branch name required" +msgstr "le nom de branche est requis" + +#: builtin/branch.c:904 +msgid "Cannot give description to detached HEAD" +msgstr "Impossible de décrire une HEAD détachée" + +#: builtin/branch.c:909 +msgid "cannot edit description of more than one branch" +msgstr "impossible d'éditer la description de plus d'une branche" + +#: builtin/branch.c:916 +#, c-format +msgid "No commit on branch '%s' yet." +msgstr "Aucun commit sur la branche '%s'." + +#: builtin/branch.c:919 +#, c-format +msgid "No branch named '%s'." +msgstr "Aucune branche nommée '%s'." + +#: builtin/branch.c:934 +msgid "too many branches for a rename operation" +msgstr "trop de branches pour une opération de renommage" + +#: builtin/branch.c:939 +msgid "too many branches to set new upstream" +msgstr "trop de branches pour spécifier une branche amont" + +#: builtin/branch.c:943 +#, c-format +msgid "" +"could not set upstream of HEAD to %s when it does not point to any branch." +msgstr "impossible de spécifier une branche amont de HEAD par %s qui ne pointe sur aucune branche." + +#: builtin/branch.c:946 builtin/branch.c:968 builtin/branch.c:990 +#, c-format +msgid "no such branch '%s'" +msgstr "pas de branche '%s'" + +#: builtin/branch.c:950 +#, c-format +msgid "branch '%s' does not exist" +msgstr "la branche '%s' n'existe pas" + +#: builtin/branch.c:962 +msgid "too many branches to unset upstream" +msgstr "trop de branches pour désactiver un amont" + +#: builtin/branch.c:966 +msgid "could not unset upstream of HEAD when it does not point to any branch." +msgstr "impossible de désactiver une branche amont de HEAD quand elle ne pointe sur aucune branche." + +#: builtin/branch.c:972 +#, c-format +msgid "Branch '%s' has no upstream information" +msgstr "La branche '%s' n'a aucune information de branche amont" + +#: builtin/branch.c:987 +msgid "it does not make sense to create 'HEAD' manually" +msgstr "créer manuellement 'HEAD' n'a aucun sens" + +#: builtin/branch.c:993 +msgid "-a and -r options to 'git branch' do not make sense with a branch name" +msgstr "les options -a et -r de 'git branch' n'ont pas de sens avec un nom de branche" + +#: builtin/branch.c:996 +#, c-format +msgid "" +"The --set-upstream flag is deprecated and will be removed. Consider using --" +"track or --set-upstream-to\n" +msgstr "l'option --set-upstream est obsolète et va disparaître. Utilisez plutôt --track ou --set-upstream-to\n" + +#: builtin/branch.c:1013 +#, c-format +msgid "" +"\n" +"If you wanted to make '%s' track '%s', do this:\n" +"\n" +msgstr "\n" +"Si vous vouliez que '%s' suive '%s', faîtes ceci :\n" +"\n" + +#: builtin/branch.c:1014 +#, c-format +msgid " git branch -d %s\n" +msgstr " git branch -d %s\n" + +#: builtin/branch.c:1015 +#, c-format +msgid " git branch --set-upstream-to %s\n" +msgstr " git branch -set-upstream-to %s\n" + +#: builtin/bundle.c:47 +#, c-format +msgid "%s is okay\n" +msgstr "%s est correct\n" + +#: builtin/bundle.c:56 +msgid "Need a repository to create a bundle." +msgstr "La création d'un colis requiert un dépôt." + +#: builtin/bundle.c:60 +msgid "Need a repository to unbundle." +msgstr "Le dépaquetage d'un colis requiert un dépôt." + +#: builtin/cat-file.c:176 +msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>" +msgstr "git cat-file (-t|-s|-e|-p|<type>|--textconv) <objet>" + +#: builtin/cat-file.c:177 +msgid "git cat-file (--batch|--batch-check) < <list_of_objects>" +msgstr "git cat-file (--batch|--batch-check) < <liste_d_objets>" + +#: builtin/cat-file.c:195 +msgid "<type> can be one of: blob, tree, commit, tag" +msgstr "<type> peut être : blob, tree, commit ou tag" + +#: builtin/cat-file.c:196 +msgid "show object type" +msgstr "afficher le type de l'objet" + +#: builtin/cat-file.c:197 +msgid "show object size" +msgstr "afficher la taille de l'objet" + +#: builtin/cat-file.c:199 +msgid "exit with zero when there's no error" +msgstr "sortir avec un code d'erreur nul quand il n'y a aucune erreur" + +#: builtin/cat-file.c:200 +msgid "pretty-print object's content" +msgstr "afficher avec mise en forme le contenu de l'objet" + +#: builtin/cat-file.c:202 +msgid "for blob objects, run textconv on object's content" +msgstr "pour les objets blob, lancer textconv sur le contenu de l'objet" + +#: builtin/cat-file.c:204 +msgid "show info and content of objects fed from the standard input" +msgstr "afficher l'information et le contenu des objets passés en entrée standard" + +#: builtin/cat-file.c:207 +msgid "show info about objects fed from the standard input" +msgstr "afficher l'information des objets passés en entrée standard" + +#: builtin/check-attr.c:11 +msgid "git check-attr [-a | --all | attr...] [--] pathname..." +msgstr "git check-attr [-a | --all | attr...] [--] chemin..." + +#: builtin/check-attr.c:12 +msgid "git check-attr --stdin [-z] [-a | --all | attr...] < <list-of-paths>" +msgstr "git check-attr --stdin [-z] [-a | --all | attr...] < <liste-de-chemins>" + +#: builtin/check-attr.c:19 +msgid "report all attributes set on file" +msgstr "afficher tous les attributs associés au fichier" + +#: builtin/check-attr.c:20 +msgid "use .gitattributes only from the index" +msgstr "utiliser .gitattributes seulement depuis l'index" + +#: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:75 +msgid "read file names from stdin" +msgstr "lire les noms de fichier depuis stdin" + +#: builtin/check-attr.c:23 builtin/check-ignore.c:24 +msgid "input paths are terminated by a null character" +msgstr "les chemins en entrée sont terminés par le caractère nul" + +#: builtin/check-ignore.c:18 builtin/checkout.c:1044 builtin/gc.c:177 +msgid "suppress progress reporting" +msgstr "supprimer l'état d'avancement" + +#: builtin/check-ignore.c:146 +msgid "cannot specify pathnames with --stdin" +msgstr "impossible de spécifier les chemins avec --stdin" + +#: builtin/check-ignore.c:149 +msgid "-z only makes sense with --stdin" +msgstr "-z n'a de sens qu'avec l'option --stdin" + +#: builtin/check-ignore.c:151 +msgid "no path specified" +msgstr "aucun chemin spécifié" + +#: builtin/check-ignore.c:155 +msgid "--quiet is only valid with a single pathname" +msgstr "--quiet n'est valide qu'avec un seul chemin" + +#: builtin/check-ignore.c:157 +msgid "cannot have both --quiet and --verbose" +msgstr "impossible d'avoir --quiet et --verbose" + +#: builtin/checkout-index.c:126 +msgid "git checkout-index [options] [--] [<file>...]" +msgstr "git checkout-index [options] [--] [<fichier>...]" + +#: builtin/checkout-index.c:187 +msgid "check out all files in the index" +msgstr "extraire tous les fichiers présents dans l'index" + +#: builtin/checkout-index.c:188 +msgid "force overwrite of existing files" +msgstr "forcer l'écrasement des fichiers existants" + +#: builtin/checkout-index.c:190 +msgid "no warning for existing files and files not in index" +msgstr "pas d'avertissement pour les fichiers existants et les fichiers absents de l'index" + +#: builtin/checkout-index.c:192 +msgid "don't checkout new files" +msgstr "ne pas extraire les nouveaux fichiers" + +#: builtin/checkout-index.c:194 +msgid "update stat information in the index file" +msgstr "mettre à jour l'information de stat dans le fichier d'index" + +#: builtin/checkout-index.c:200 +msgid "read list of paths from the standard input" +msgstr "lire la liste des chemins depuis l'entrée standard" + +#: builtin/checkout-index.c:202 +msgid "write the content to temporary files" +msgstr "écrire le contenu dans des fichiers temporaires" + +#: builtin/checkout-index.c:203 builtin/column.c:30 +msgid "string" +msgstr "chaîne" + +#: builtin/checkout-index.c:204 +msgid "when creating files, prepend <string>" +msgstr "lors de la création de fichiers, préfixer par <chaîne>" + +#: builtin/checkout-index.c:207 +msgid "copy out the files from named stage" +msgstr "copier les fichiers depuis l'index nommé" + +#: builtin/checkout.c:25 +msgid "git checkout [options] <branch>" +msgstr "git checkout [options] <branche>" + +#: builtin/checkout.c:26 +msgid "git checkout [options] [<branch>] -- <file>..." +msgstr "git checkout [options] [<branche>] -- <fichier>..." + +#: builtin/checkout.c:117 builtin/checkout.c:150 +#, c-format +msgid "path '%s' does not have our version" +msgstr "le chemin '%s' n'a pas notre version" + +#: builtin/checkout.c:119 builtin/checkout.c:152 +#, c-format +msgid "path '%s' does not have their version" +msgstr "le chemin '%s' n'a pas leur version" + +#: builtin/checkout.c:135 +#, c-format +msgid "path '%s' does not have all necessary versions" +msgstr "le chemin '%s' n'a aucune des versions nécessaires" + +#: builtin/checkout.c:179 +#, c-format +msgid "path '%s' does not have necessary versions" +msgstr "le chemin '%s' n'a pas les versions nécessaires" + +#: builtin/checkout.c:196 +#, c-format +msgid "path '%s': cannot merge" +msgstr "chemin '%s' : impossible de fusionner" + +#: builtin/checkout.c:213 +#, c-format +msgid "Unable to add merge result for '%s'" +msgstr "Impossible d'ajouter le résultat de fusion pour '%s'" + +#: builtin/checkout.c:237 builtin/checkout.c:240 builtin/checkout.c:243 +#: builtin/checkout.c:246 +#, c-format +msgid "'%s' cannot be used with updating paths" +msgstr "'%s' ne peut pas être utilisé avec des mises à jour de chemins" + +#: builtin/checkout.c:249 builtin/checkout.c:252 +#, c-format +msgid "'%s' cannot be used with %s" +msgstr "'%s' ne peut pas être utilisé avec %s" + +#: builtin/checkout.c:255 +#, c-format +msgid "Cannot update paths and switch to branch '%s' at the same time." +msgstr "Impossible de mettre à jour les chemins et basculer sur la branche '%s' en même temps." + +#: builtin/checkout.c:266 builtin/checkout.c:458 +msgid "corrupt index file" +msgstr "fichier d'index corrompu" + +#: builtin/checkout.c:329 builtin/checkout.c:336 +#, c-format +msgid "path '%s' is unmerged" +msgstr "le chemin '%s' n'est pas fusionné" + +#: builtin/checkout.c:480 +msgid "you need to resolve your current index first" +msgstr "vous devez d'abord résoudre votre index courant" + +#: builtin/checkout.c:601 +#, c-format +msgid "Can not do reflog for '%s'\n" +msgstr "Impossible de faire un reflog pour '%s'\n" + +#: builtin/checkout.c:634 +msgid "HEAD is now at" +msgstr "HEAD est maintenant sur" + +#: builtin/checkout.c:641 +#, c-format +msgid "Reset branch '%s'\n" +msgstr "Remise à zéro de la branche '%s'\n" + +#: builtin/checkout.c:644 +#, c-format +msgid "Already on '%s'\n" +msgstr "Déjà sur '%s'\n" + +#: builtin/checkout.c:648 +#, c-format +msgid "Switched to and reset branch '%s'\n" +msgstr "Basculement et remise à zéro de la branche '%s'\n" + +#: builtin/checkout.c:650 builtin/checkout.c:987 +#, c-format +msgid "Switched to a new branch '%s'\n" +msgstr "Basculement sur la nouvelle branche '%s'\n" + +#: builtin/checkout.c:652 +#, c-format +msgid "Switched to branch '%s'\n" +msgstr "Basculement sur la branche '%s'\n" + +#: builtin/checkout.c:708 +#, c-format +msgid " ... and %d more.\n" +msgstr " ... et %d en plus.\n" + +#. The singular version +#: builtin/checkout.c:714 +#, c-format +msgid "" +"Warning: you are leaving %d commit behind, not connected to\n" +"any of your branches:\n" +"\n" +"%s\n" +msgid_plural "" +"Warning: you are leaving %d commits behind, not connected to\n" +"any of your branches:\n" +"\n" +"%s\n" +msgstr[0] "" +"Attention : vous laissez %d commit en retard, non connectés à \n" +"une branche :\n" +"\n" +"%s\n" +msgstr[1] "" +"Attention : vous laissez %d commits en retard, non connectés à \n" +"une branche :\n" +"\n" +"%s\n" + +#: builtin/checkout.c:732 +#, c-format +msgid "" +"If you want to keep them by creating a new branch, this may be a good time\n" +"to do so with:\n" +"\n" +" git branch new_branch_name %s\n" +"\n" +msgstr "" +"Si vous souhaitez les garder en créant une nouvelle branche, c'est le bon moment\n" +"de le faire avec :\n" +"\n" +"git branche nouvelle_branche %s\n" +"\n" + +#: builtin/checkout.c:762 +msgid "internal error in revision walk" +msgstr "erreur interne lors du parcours des révisions" + +#: builtin/checkout.c:766 +msgid "Previous HEAD position was" +msgstr "La position précédente de HEAD était" + +#: builtin/checkout.c:793 builtin/checkout.c:982 +msgid "You are on a branch yet to be born" +msgstr "Vous êtes sur une branche qui doit encore naître" + +#. case (1) +#: builtin/checkout.c:918 +#, c-format +msgid "invalid reference: %s" +msgstr "référence invalide : %s" + +#. case (1): want a tree +#: builtin/checkout.c:957 +#, c-format +msgid "reference is not a tree: %s" +msgstr "la référence n'est pas un arbre : %s" + +#: builtin/checkout.c:996 +msgid "paths cannot be used with switching branches" +msgstr "impossible d'utiliser des chemins avec un basculement de branches" + +#: builtin/checkout.c:999 builtin/checkout.c:1003 +#, c-format +msgid "'%s' cannot be used with switching branches" +msgstr "'%s' ne peut pas être utilisé avec un basculement de branches" + +#: builtin/checkout.c:1007 builtin/checkout.c:1010 builtin/checkout.c:1015 +#: builtin/checkout.c:1018 +#, c-format +msgid "'%s' cannot be used with '%s'" +msgstr "'%s' ne peut pas être utilisé avec '%s'" + +#: builtin/checkout.c:1023 +#, c-format +msgid "Cannot switch branch to a non-commit '%s'" +msgstr "Impossible de basculer de branche vers '%s' qui n'est pas un commit" + +#: builtin/checkout.c:1045 builtin/checkout.c:1047 builtin/clone.c:90 +#: builtin/remote.c:169 builtin/remote.c:171 +msgid "branch" +msgstr "branche" + +#: builtin/checkout.c:1046 +msgid "create and checkout a new branch" +msgstr "créer et extraire une nouvelle branche" + +#: builtin/checkout.c:1048 +msgid "create/reset and checkout a branch" +msgstr "créer/réinitialiser et extraire une branche" + +#: builtin/checkout.c:1049 +msgid "create reflog for new branch" +msgstr "créer un refog pour une nouvelle branche" + +#: builtin/checkout.c:1050 +msgid "detach the HEAD at named commit" +msgstr "détacher la HEAD à la validation nommée" + +#: builtin/checkout.c:1051 +msgid "set upstream info for new branch" +msgstr "paramétrer l'information de branche amont pour une nouvelle branche" + +#: builtin/checkout.c:1053 +msgid "new branch" +msgstr "nouvelle branche" + +#: builtin/checkout.c:1053 +msgid "new unparented branch" +msgstr "nouvelle branche sans parent" + +#: builtin/checkout.c:1054 +msgid "checkout our version for unmerged files" +msgstr "extraire notre version pour les fichiers non fusionnés" + +#: builtin/checkout.c:1056 +msgid "checkout their version for unmerged files" +msgstr "extraire leur version pour les fichiers non fusionnés" + +#: builtin/checkout.c:1058 +msgid "force checkout (throw away local modifications)" +msgstr "forcer l'extraction (laisser tomber les modifications locales)" + +#: builtin/checkout.c:1059 +msgid "perform a 3-way merge with the new branch" +msgstr "réaliser une fusion à 3 points avec la nouvelle branche" + +#: builtin/checkout.c:1060 builtin/merge.c:217 +msgid "update ignored files (default)" +msgstr "mettre à jour les fichiers ignorés (par défaut)" + +#: builtin/checkout.c:1061 builtin/log.c:1158 parse-options.h:245 +msgid "style" +msgstr "style" + +#: builtin/checkout.c:1062 +msgid "conflict style (merge or diff3)" +msgstr "style de conflit (fusion ou diff3)" + +#: builtin/checkout.c:1065 +msgid "do not limit pathspecs to sparse entries only" +msgstr "ne pas limiter les spécificateurs de chemins aux seules entrées creuses" + +#: builtin/checkout.c:1067 +msgid "second guess 'git checkout no-such-branch'" +msgstr "deuxième chance 'git checkout branche-inexistante'" + +#: builtin/checkout.c:1091 +msgid "-b, -B and --orphan are mutually exclusive" +msgstr "-b, -B et --orphan sont mutuellement exclusifs" + +#: builtin/checkout.c:1108 +msgid "--track needs a branch name" +msgstr "--track requiert un nom de branche" + +#: builtin/checkout.c:1115 +msgid "Missing branch name; try -b" +msgstr "Nom de branche manquant ; essayez -b" + +#: builtin/checkout.c:1150 +msgid "invalid path specification" +msgstr "spécification de chemin invalide" + +#: builtin/checkout.c:1157 +#, c-format +msgid "" +"Cannot update paths and switch to branch '%s' at the same time.\n" +"Did you intend to checkout '%s' which can not be resolved as commit?" +msgstr "" +"Impossible de mettre à jour les chemins et de basculer sur la branche '%s' en même temps.\n" +"Souhaitiez-vous extraire '%s' qui ne peut être résolu comme commit ?" + +#: builtin/checkout.c:1162 +#, c-format +msgid "git checkout: --detach does not take a path argument '%s'" +msgstr "git checkout: --detach n'accepte pas un argument de chemin '%s'" + +#: builtin/checkout.c:1166 +msgid "" +"git checkout: --ours/--theirs, --force and --merge are incompatible when\n" +"checking out of the index." +msgstr "" +"git checkout: --ours/--theirs, --force et --merge sont incompatibles lors\n" +"de l'extraction de l'index." + +#: builtin/clean.c:20 +msgid "git clean [-d] [-f] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." +msgstr "git clean [-d] [-f] [-n] [-q] [-e <motif>] [-x | -X] [--] <chemins>..." + +#: builtin/clean.c:24 +#, c-format +msgid "Removing %s\n" +msgstr "Suppression de %s\n" + +#: builtin/clean.c:25 +#, c-format +msgid "Would remove %s\n" +msgstr "Supprimerait %s\n" + +#: builtin/clean.c:26 +#, c-format +msgid "Skipping repository %s\n" +msgstr "Ignore le dépôt %s\n" + +#: builtin/clean.c:27 +#, c-format +msgid "Would skip repository %s\n" +msgstr "Ignorerait le dépôt %s\n" + +#: builtin/clean.c:28 +#, c-format +msgid "failed to remove %s" +msgstr "échec de la suppression de %s" + +#: builtin/clean.c:160 +msgid "do not print names of files removed" +msgstr "ne pas afficher les noms des fichiers supprimés" + +#: builtin/clean.c:162 +msgid "force" +msgstr "forcer" + +#: builtin/clean.c:164 +msgid "remove whole directories" +msgstr "supprimer les répertoires entiers" + +#: builtin/clean.c:165 builtin/describe.c:412 builtin/grep.c:717 +#: builtin/ls-files.c:487 builtin/name-rev.c:231 builtin/show-ref.c:182 +msgid "pattern" +msgstr "motif" + +#: builtin/clean.c:166 +msgid "add <pattern> to ignore rules" +msgstr "ajouter <motif> aux règles ignore" + +#: builtin/clean.c:167 +msgid "remove ignored files, too" +msgstr "supprimer les fichiers ignorés, aussi" + +#: builtin/clean.c:169 +msgid "remove only ignored files" +msgstr "supprimer seulement les fichiers ignorés" + +#: builtin/clean.c:187 +msgid "-x and -X cannot be used together" +msgstr "-x et -X ne peuvent pas être utilisés ensemble" + +#: builtin/clean.c:191 +msgid "" +"clean.requireForce set to true and neither -n nor -f given; refusing to clean" +msgstr "clean.requireForce positionné à true et ni -n ni -f fourni ; refus de nettoyer" + +#: builtin/clean.c:194 +msgid "" +"clean.requireForce defaults to true and neither -n nor -f given; refusing to " +"clean" +msgstr "clean.requireForce à true par défaut et ni -n ni -f fourni ; refus de nettoyer" + +#: builtin/clone.c:37 +msgid "git clone [options] [--] <repo> [<dir>]" +msgstr "git clone [options] [--] <dépôt> [<répertoire>]" + +#: builtin/clone.c:65 builtin/fetch.c:82 builtin/merge.c:214 +#: builtin/push.c:436 +msgid "force progress reporting" +msgstr "forcer l'état d'avancement" + +#: builtin/clone.c:67 +msgid "don't create a checkout" +msgstr "ne pas créer d'extraction" + +#: builtin/clone.c:68 builtin/clone.c:70 builtin/init-db.c:488 +msgid "create a bare repository" +msgstr "créer un dépôt nu" + +#: builtin/clone.c:73 +msgid "create a mirror repository (implies bare)" +msgstr "créer un dépôt miroir (implique dépôt nu)" + +#: builtin/clone.c:75 +msgid "to clone from a local repository" +msgstr "pour cloner depuis un dépôt local" + +#: builtin/clone.c:77 +msgid "don't use local hardlinks, always copy" +msgstr "ne pas utiliser de liens durs locaux, toujours copier" + +#: builtin/clone.c:79 +msgid "setup as shared repository" +msgstr "régler comme dépôt partagé" + +#: builtin/clone.c:81 builtin/clone.c:83 +msgid "initialize submodules in the clone" +msgstr "initialiser les sous-modules dans le clone" + +#: builtin/clone.c:84 builtin/init-db.c:485 +msgid "template-directory" +msgstr "répertoire-modèle" + +#: builtin/clone.c:85 builtin/init-db.c:486 +msgid "directory from which templates will be used" +msgstr "répertoire depuis lequel les modèles vont être utilisés" + +#: builtin/clone.c:87 +msgid "reference repository" +msgstr "dépôt de référence" + +#: builtin/clone.c:88 builtin/column.c:26 builtin/merge-file.c:44 +msgid "name" +msgstr "nom" + +#: builtin/clone.c:89 +msgid "use <name> instead of 'origin' to track upstream" +msgstr "utiliser <nom> au lieu de 'origin' pour suivre la branche amont" + +#: builtin/clone.c:91 +msgid "checkout <branch> instead of the remote's HEAD" +msgstr "extraire <branche> au lieu de la HEAD du répertoire distant" + +#: builtin/clone.c:93 +msgid "path to git-upload-pack on the remote" +msgstr "chemin vers git-upload-pack sur le serveur distant" + +#: builtin/clone.c:94 builtin/fetch.c:83 builtin/grep.c:662 +msgid "depth" +msgstr "profondeur" + +#: builtin/clone.c:95 +msgid "create a shallow clone of that depth" +msgstr "créer un clone superficiel de cette profondeur" + +#: builtin/clone.c:97 +msgid "clone only one branch, HEAD or --branch" +msgstr "cloner seulement une branche, HEAD ou --branch" + +#: builtin/clone.c:98 builtin/init-db.c:494 +msgid "gitdir" +msgstr "gitdir" + +#: builtin/clone.c:99 builtin/init-db.c:495 +msgid "separate git dir from working tree" +msgstr "séparer le répertoire git de la copie de travail" + +#: builtin/clone.c:100 +msgid "key=value" +msgstr "clé=valeur" + +#: builtin/clone.c:101 +msgid "set config inside the new repository" +msgstr "régler la configuration dans le nouveau dépôt" + +#: builtin/clone.c:254 +#, c-format +msgid "reference repository '%s' is not a local repository." +msgstr "le dépôt de référence '%s' n'est pas un dépôt local." + +#: builtin/clone.c:317 +#, c-format +msgid "failed to create directory '%s'" +msgstr "échec de la création du répertoire '%s'" + +#: builtin/clone.c:319 builtin/diff.c:77 +#, c-format +msgid "failed to stat '%s'" +msgstr "échec du stat de '%s'" + +#: builtin/clone.c:321 +#, c-format +msgid "%s exists and is not a directory" +msgstr "%s existe et n'est pas un répertoire" + +#: builtin/clone.c:335 +#, c-format +msgid "failed to stat %s\n" +msgstr "échec du stat de %s\n" + +#: builtin/clone.c:357 +#, c-format +msgid "failed to create link '%s'" +msgstr "échec de la création du lien '%s'" + +#: builtin/clone.c:361 +#, c-format +msgid "failed to copy file to '%s'" +msgstr "échec de la copie vers '%s'" + +#: builtin/clone.c:384 +#, c-format +msgid "done.\n" +msgstr "fait.\n" + +#: builtin/clone.c:397 +msgid "" +"Clone succeeded, but checkout failed.\n" +"You can inspect what was checked out with 'git status'\n" +"and retry the checkout with 'git checkout -f HEAD'\n" +msgstr "Le clone a réussi, mais l'extraction a échoué.\n" +"Vous pouvez inspecter ce qui a été extrait avec 'git status'\n" +"et réessayer l'extraction avec 'git checkout -f HEAD'\n" + +#: builtin/clone.c:476 +#, c-format +msgid "Could not find remote branch %s to clone." +msgstr "Impossible de trouver la branche distante '%s' à cloner." + +#: builtin/clone.c:550 +msgid "remote did not send all necessary objects" +msgstr "le serveur distant n'a pas envoyé tous les objets nécessaires" + +#: builtin/clone.c:610 +msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" +msgstr "la HEAD distante réfère à une référence non existante, impossible de l'extraire.\n" + +#: builtin/clone.c:641 +msgid "unable to checkout working tree" +msgstr "inpossible d'extraire la copie de travail" + +#: builtin/clone.c:749 +msgid "Too many arguments." +msgstr "Trop d'arguments." + +#: builtin/clone.c:753 +msgid "You must specify a repository to clone." +msgstr "Vous devez spécifier un dépôt à cloner." + +#: builtin/clone.c:764 +#, c-format +msgid "--bare and --origin %s options are incompatible." +msgstr "les options --bare et --origin %s sont incompatibles." + +#: builtin/clone.c:767 +msgid "--bare and --separate-git-dir are incompatible." +msgstr "--bare et --separate-git-dir sont incompatibles." + +#: builtin/clone.c:780 +#, c-format +msgid "repository '%s' does not exist" +msgstr "le dépôt '%s' n'existe pas" + +#: builtin/clone.c:785 +msgid "--depth is ignored in local clones; use file:// instead." +msgstr "--depth est ignoré dans les clones locaux : utilisez plutôt \"file://\"." + +#: builtin/clone.c:795 +#, c-format +msgid "destination path '%s' already exists and is not an empty directory." +msgstr "le chemin de destination '%s' existe déjà et n'est pas un répertoire vide." + +#: builtin/clone.c:805 +#, c-format +msgid "working tree '%s' already exists." +msgstr "la copie de travail '%s' existe déjà ." + +#: builtin/clone.c:818 builtin/clone.c:830 +#, c-format +msgid "could not create leading directories of '%s'" +msgstr "impossible de créer les répertoires de premier niveau dans '%s'" + +#: builtin/clone.c:821 +#, c-format +msgid "could not create work tree dir '%s'." +msgstr "impossible de créer le répertoire de la copie de travail '%s'." + +#: builtin/clone.c:840 +#, c-format +msgid "Cloning into bare repository '%s'...\n" +msgstr "Clonage dans le dépôt nu '%s'\n" + +#: builtin/clone.c:842 +#, c-format +msgid "Cloning into '%s'...\n" +msgstr "Clonage dans '%s'...\n" + +#: builtin/clone.c:877 +#, c-format +msgid "Don't know how to clone %s" +msgstr "Je ne sais pas cloner %s" + +#: builtin/clone.c:926 +#, c-format +msgid "Remote branch %s not found in upstream %s" +msgstr "La branche distante %s n'a pas été trouvée dans le dépôt amont %s" + +#: builtin/clone.c:933 +msgid "You appear to have cloned an empty repository." +msgstr "Vous semblez avoir cloné un dépôt vide." + +#: builtin/column.c:9 +msgid "git column [options]" +msgstr "git column [options]" + +#: builtin/column.c:26 +msgid "lookup config vars" +msgstr "rechercher les variables de configuration" + +#: builtin/column.c:27 builtin/column.c:28 +msgid "layout to use" +msgstr "mise en page à utiliser" + +#: builtin/column.c:29 +msgid "Maximum width" +msgstr "Largeur maximale" + +#: builtin/column.c:30 +msgid "Padding space on left border" +msgstr "Remplissage d'espace sur la bordure gauche" + +#: builtin/column.c:31 +msgid "Padding space on right border" +msgstr "Remplissage d'espace sur le côté droit" + +#: builtin/column.c:32 +msgid "Padding space between columns" +msgstr "Remplissage d'espace entre les colonnes" + +#: builtin/column.c:51 +msgid "--command must be the first argument" +msgstr "--command doit être le premier argument" + +#: builtin/commit.c:34 +msgid "git commit [options] [--] <pathspec>..." +msgstr "git commit [options] [--] <spécification-de-chemin>..." + +#: builtin/commit.c:39 +msgid "git status [options] [--] <pathspec>..." +msgstr "git status [options] [--] <spécification-de-chemin>..." + +#: builtin/commit.c:44 +msgid "" +"Your name and email address were configured automatically based\n" +"on your username and hostname. Please check that they are accurate.\n" +"You can suppress this message by setting them explicitly:\n" +"\n" +" git config --global user.name \"Your Name\"\n" +" git config --global user.email you@example.com\n" +"\n" +"After doing this, you may fix the identity used for this commit with:\n" +"\n" +" git commit --amend --reset-author\n" +msgstr "" +"Votre nom et votre adresse e-mail ont été configurés automatiquement en se fondant\n" +"sur votre nom d'utilisateur et votre nom d'ordinateur. Veuillez vérifier qu'ils sont corrects.\n" +"Vous pouvez supprimer ce message en les paramétrant explicitement :\n" +"\n" +" git config --global user.name \"Votre Nom\"\n" +" git config --global user.email vous@exemple.com\n" +"\n" +"Après ceci, vous pouvez corriger l'identité utilisée pour ce commit avec :\n" +"\n" +" git commit --amend --reset-author\n" + +#: builtin/commit.c:56 +msgid "" +"You asked to amend the most recent commit, but doing so would make\n" +"it empty. You can repeat your command with --allow-empty, or you can\n" +"remove the commit entirely with \"git reset HEAD^\".\n" +msgstr "Vous avez demandé de corriger le commit le plus récent, mais le faire le rendrait\n" +"vide. Vous pouvez répéter votre commande avec --allow-empty, ou vous pouvez\n" +"supprimer complètement le commit avec \"git reset HEAD^\".\n" + +#: builtin/commit.c:61 +msgid "" +"The previous cherry-pick is now empty, possibly due to conflict resolution.\n" +"If you wish to commit it anyway, use:\n" +"\n" +" git commit --allow-empty\n" +"\n" +"Otherwise, please use 'git reset'\n" +msgstr "" +"Le picorage précédent est à présent vide, vraisemblablement dû à une résolution de conflit.\n" +"Si vous souhaitez tout de même le valider, utilisez :\n" +"\n" +" git commit --allow-empty\n" +"\n" +"Sinon, utilisez 'git reset'\n" + +#: builtin/commit.c:260 +msgid "failed to unpack HEAD tree object" +msgstr "échec du dépaquetage de l'objet arbre HEAD" + +#: builtin/commit.c:302 +msgid "unable to create temporary index" +msgstr "impossible de créer l'index temporaire" + +#: builtin/commit.c:308 +msgid "interactive add failed" +msgstr "échec de l'ajout interactif" + +#: builtin/commit.c:341 builtin/commit.c:362 builtin/commit.c:412 +msgid "unable to write new_index file" +msgstr "impossible d'écrire le fichier new_index" + +#: builtin/commit.c:393 +msgid "cannot do a partial commit during a merge." +msgstr "impossible de faire une validation partielle pendant une fusion." + +#: builtin/commit.c:395 +msgid "cannot do a partial commit during a cherry-pick." +msgstr "impossible de faire une validation partielle pendant un picorage." + +#: builtin/commit.c:405 +msgid "cannot read the index" +msgstr "impossible de lire l'index" + +#: builtin/commit.c:425 +msgid "unable to write temporary index file" +msgstr "impossible d'écrire le fichier d'index temporaire" + +#: builtin/commit.c:513 builtin/commit.c:519 +#, c-format +msgid "invalid commit: %s" +msgstr "commit invalide : %s" + +#: builtin/commit.c:542 +msgid "malformed --author parameter" +msgstr "paramètre --author mal formé" + +#: builtin/commit.c:562 +#, c-format +msgid "Malformed ident string: '%s'" +msgstr "Chaîne ident mal formée : '%s'" + +#: builtin/commit.c:600 builtin/commit.c:633 builtin/commit.c:956 +#, c-format +msgid "could not lookup commit %s" +msgstr "impossible de rechercher le commit %s" + +#: builtin/commit.c:612 builtin/shortlog.c:270 +#, c-format +msgid "(reading log message from standard input)\n" +msgstr "(lecture du message de journal depuis l'entrée standard)\n" + +#: builtin/commit.c:614 +msgid "could not read log from standard input" +msgstr "impossible de lire le journal depuis l'entrée standard" + +#: builtin/commit.c:618 +#, c-format +msgid "could not read log file '%s'" +msgstr "impossible de lire le fichier de journal '%s'" + +#: builtin/commit.c:624 +msgid "commit has empty message" +msgstr "le commit a un message vide" + +#: builtin/commit.c:640 +msgid "could not read MERGE_MSG" +msgstr "impossible de lire MERGE_MSG" + +#: builtin/commit.c:644 +msgid "could not read SQUASH_MSG" +msgstr "impossible de lire SQUASH_MSG" + +#: builtin/commit.c:648 +#, c-format +msgid "could not read '%s'" +msgstr "impossible de lire '%s'" + +#: builtin/commit.c:709 +msgid "could not write commit template" +msgstr "impossible d'écrire le modèle de commit" + +#: builtin/commit.c:720 +#, c-format +msgid "" +"\n" +"It looks like you may be committing a merge.\n" +"If this is not correct, please remove the file\n" +"\t%s\n" +"and try again.\n" +msgstr "" +"\n" +"Il semble que vous validiez une fusion.\n" +"Si ce n'est pas le cas, veuillez supprimer le fichier\n" +"\t%s\n" +"et essayez à nouveau.\n" + +#: builtin/commit.c:725 +#, c-format +msgid "" +"\n" +"It looks like you may be committing a cherry-pick.\n" +"If this is not correct, please remove the file\n" +"\t%s\n" +"and try again.\n" +msgstr "" +"\n" +"Il semble que vous validiez un picorage.\n" +"Si ce n'est pas le cas, veuillez supprimer le fichier\n" +"\t%s\n" +"et essayez à nouveau.\n" + +#: builtin/commit.c:737 +#, c-format +msgid "" +"Please enter the commit message for your changes. Lines starting\n" +"with '%c' will be ignored, and an empty message aborts the commit.\n" +msgstr "" +"Veuillez saisir le message de validation pour vos modifications. Les lignes\n" +"commençant par '%c' seront ignorées, et un message vide abandonne la validation.\n" + +#: builtin/commit.c:742 +#, c-format +msgid "" +"Please enter the commit message for your changes. Lines starting\n" +"with '%c' will be kept; you may remove them yourself if you want to.\n" +"An empty message aborts the commit.\n" +msgstr "" +"Veuillez saisir le message de validation pour vos modifications. Les lignes\n" +"commençant par '%c' seront conservées ; vous pouvez les supprimer vous-même\n" +"si vous le souhaitez. Un message vide abandonne la validation.\n" + +#: builtin/commit.c:755 +#, c-format +msgid "%sAuthor: %s" +msgstr "%sAuteur : %s" + +#: builtin/commit.c:762 +#, c-format +msgid "%sCommitter: %s" +msgstr "%sValidateur : %s" + +#: builtin/commit.c:782 +msgid "Cannot read index" +msgstr "Impossible de lire l'index" + +#: builtin/commit.c:819 +msgid "Error building trees" +msgstr "Erreur lors de la construction des arbres" + +#: builtin/commit.c:834 builtin/tag.c:359 +#, c-format +msgid "Please supply the message using either -m or -F option.\n" +msgstr "Veuillez fournir le message en utilisant l'option -m ou -F.\n" + +#: builtin/commit.c:931 +#, c-format +msgid "No existing author found with '%s'" +msgstr "Aucun auteur existant trouvé avec '%s'" + +#: builtin/commit.c:946 builtin/commit.c:1140 +#, c-format +msgid "Invalid untracked files mode '%s'" +msgstr "Mode de fichier non suivi invalide '%s'" + +#: builtin/commit.c:976 +msgid "Using both --reset-author and --author does not make sense" +msgstr "L'utilisation simultanée de --reset-author et --author n'a pas de sens" + +#: builtin/commit.c:987 +msgid "You have nothing to amend." +msgstr "Il n'y a rien à corriger." + +#: builtin/commit.c:990 +msgid "You are in the middle of a merge -- cannot amend." +msgstr "Vous êtes en pleine fusion -- impossible de corriger (amend)." + +#: builtin/commit.c:992 +msgid "You are in the middle of a cherry-pick -- cannot amend." +msgstr "Vous êtes en plein picorage -- impossible de corriger (amend)." + +#: builtin/commit.c:995 +msgid "Options --squash and --fixup cannot be used together" +msgstr "Les options --squash et --fixup ne peuvent pas être utilisées ensemble" + +#: builtin/commit.c:1005 +msgid "Only one of -c/-C/-F/--fixup can be used." +msgstr "Une seule option parmi -c/-C/-F/--fixup peut être utilisée." + +#: builtin/commit.c:1007 +msgid "Option -m cannot be combined with -c/-C/-F/--fixup." +msgstr "L'option -m ne peut pas être combinée avec -c/-C/-F/--fixup." + +#: builtin/commit.c:1015 +msgid "--reset-author can be used only with -C, -c or --amend." +msgstr "--reset-author ne peut être utilisé qu'avec -C, -c ou --amend." + +#: builtin/commit.c:1032 +msgid "Only one of --include/--only/--all/--interactive/--patch can be used." +msgstr "Une seule option parmi --include/--only/--all/--interactive/--patch peut être utilisée." + +#: builtin/commit.c:1034 +msgid "No paths with --include/--only does not make sense." +msgstr "Aucun chemin avec les options --include/--only n'a pas de sens." + +#: builtin/commit.c:1036 +msgid "Clever... amending the last one with dirty index." +msgstr "Malin... correction du dernier avec un index sale." + +#: builtin/commit.c:1038 +msgid "Explicit paths specified without -i nor -o; assuming --only paths..." +msgstr "" + +#: builtin/commit.c:1048 builtin/tag.c:575 +#, c-format +msgid "Invalid cleanup mode %s" +msgstr "" + +#: builtin/commit.c:1053 +msgid "Paths with -a does not make sense." +msgstr "" + +#: builtin/commit.c:1059 builtin/commit.c:1194 +msgid "--long and -z are incompatible" +msgstr "" + +#: builtin/commit.c:1154 builtin/commit.c:1390 +msgid "show status concisely" +msgstr "" + +#: builtin/commit.c:1156 builtin/commit.c:1392 +msgid "show branch information" +msgstr "" + +#: builtin/commit.c:1158 builtin/commit.c:1394 builtin/push.c:426 +msgid "machine-readable output" +msgstr "" + +#: builtin/commit.c:1161 builtin/commit.c:1396 +msgid "show status in long format (default)" +msgstr "" + +#: builtin/commit.c:1164 builtin/commit.c:1399 +msgid "terminate entries with NUL" +msgstr "" + +#: builtin/commit.c:1166 builtin/commit.c:1402 builtin/fast-export.c:659 +#: builtin/fast-export.c:662 builtin/tag.c:459 +msgid "mode" +msgstr "" + +#: builtin/commit.c:1167 builtin/commit.c:1402 +msgid "show untracked files, optional modes: all, normal, no. (Default: all)" +msgstr "" + +#: builtin/commit.c:1170 +msgid "show ignored files" +msgstr "" + +#: builtin/commit.c:1171 parse-options.h:151 +msgid "when" +msgstr "" + +#: builtin/commit.c:1172 +msgid "" +"ignore changes to submodules, optional when: all, dirty, untracked. " +"(Default: all)" +msgstr "" + +#: builtin/commit.c:1174 +msgid "list untracked files in columns" +msgstr "" + +#: builtin/commit.c:1248 +msgid "couldn't look up newly created commit" +msgstr "" + +#: builtin/commit.c:1250 +msgid "could not parse newly created commit" +msgstr "" + +#: builtin/commit.c:1291 +msgid "detached HEAD" +msgstr "" + +#: builtin/commit.c:1293 +msgid " (root-commit)" +msgstr "" + +#: builtin/commit.c:1360 +msgid "suppress summary after successful commit" +msgstr "" + +#: builtin/commit.c:1361 +msgid "show diff in commit message template" +msgstr "" + +#: builtin/commit.c:1363 +msgid "Commit message options" +msgstr "" + +#: builtin/commit.c:1364 builtin/tag.c:457 +msgid "read message from file" +msgstr "" + +#: builtin/commit.c:1365 +msgid "author" +msgstr "" + +#: builtin/commit.c:1365 +msgid "override author for commit" +msgstr "" + +#: builtin/commit.c:1366 builtin/gc.c:178 +msgid "date" +msgstr "" + +#: builtin/commit.c:1366 +msgid "override date for commit" +msgstr "" + +#: builtin/commit.c:1367 builtin/merge.c:208 builtin/notes.c:533 +#: builtin/notes.c:690 builtin/tag.c:455 +msgid "message" +msgstr "" + +#: builtin/commit.c:1367 +msgid "commit message" +msgstr "" + +#: builtin/commit.c:1368 +msgid "reuse and edit message from specified commit" +msgstr "" + +#: builtin/commit.c:1369 +msgid "reuse message from specified commit" +msgstr "" + +#: builtin/commit.c:1370 +msgid "use autosquash formatted message to fixup specified commit" +msgstr "" + +#: builtin/commit.c:1371 +msgid "use autosquash formatted message to squash specified commit" +msgstr "" + +#: builtin/commit.c:1372 +msgid "the commit is authored by me now (used with -C/-c/--amend)" +msgstr "" + +#: builtin/commit.c:1373 builtin/log.c:1113 builtin/revert.c:109 +msgid "add Signed-off-by:" +msgstr "" + +#: builtin/commit.c:1374 +msgid "use specified template file" +msgstr "" + +#: builtin/commit.c:1375 +msgid "force edit of commit" +msgstr "" + +#: builtin/commit.c:1376 +msgid "default" +msgstr "" + +#: builtin/commit.c:1376 builtin/tag.c:460 +msgid "how to strip spaces and #comments from message" +msgstr "" + +#: builtin/commit.c:1377 +msgid "include status in commit message template" +msgstr "" + +#: builtin/commit.c:1378 builtin/merge.c:215 builtin/tag.c:461 +msgid "key id" +msgstr "" + +#: builtin/commit.c:1379 builtin/merge.c:216 +msgid "GPG sign commit" +msgstr "" + +#. end commit message options +#: builtin/commit.c:1382 +msgid "Commit contents options" +msgstr "" + +#: builtin/commit.c:1383 +msgid "commit all changed files" +msgstr "" + +#: builtin/commit.c:1384 +msgid "add specified files to index for commit" +msgstr "" + +#: builtin/commit.c:1385 +msgid "interactively add files" +msgstr "" + +#: builtin/commit.c:1386 +msgid "interactively add changes" +msgstr "" + +#: builtin/commit.c:1387 +msgid "commit only specified files" +msgstr "" + +#: builtin/commit.c:1388 +msgid "bypass pre-commit hook" +msgstr "" + +#: builtin/commit.c:1389 +msgid "show what would be committed" +msgstr "" + +#: builtin/commit.c:1400 +msgid "amend previous commit" +msgstr "" + +#: builtin/commit.c:1401 +msgid "bypass post-rewrite hook" +msgstr "" + +#: builtin/commit.c:1406 +msgid "ok to record an empty change" +msgstr "" + +#: builtin/commit.c:1409 +msgid "ok to record a change with an empty message" +msgstr "" + +#: builtin/commit.c:1441 +msgid "could not parse HEAD commit" +msgstr "" + +#: builtin/commit.c:1479 builtin/merge.c:510 +#, c-format +msgid "could not open '%s' for reading" +msgstr "" + +#: builtin/commit.c:1486 +#, c-format +msgid "Corrupt MERGE_HEAD file (%s)" +msgstr "" + +#: builtin/commit.c:1493 +msgid "could not read MERGE_MODE" +msgstr "" + +#: builtin/commit.c:1512 +#, c-format +msgid "could not read commit message: %s" +msgstr "" + +#: builtin/commit.c:1526 +#, c-format +msgid "Aborting commit; you did not edit the message.\n" +msgstr "" + +#: builtin/commit.c:1531 +#, c-format +msgid "Aborting commit due to empty commit message.\n" +msgstr "" + +#: builtin/commit.c:1546 builtin/merge.c:847 builtin/merge.c:872 +msgid "failed to write commit object" +msgstr "" + +#: builtin/commit.c:1567 +msgid "cannot lock HEAD ref" +msgstr "" + +#: builtin/commit.c:1571 +msgid "cannot update HEAD ref" +msgstr "" + +#: builtin/commit.c:1582 +msgid "" +"Repository has been updated, but unable to write\n" +"new_index file. Check that disk is not full or quota is\n" +"not exceeded, and then \"git reset HEAD\" to recover." +msgstr "" + +#: builtin/config.c:7 +msgid "git config [options]" +msgstr "" + +#: builtin/config.c:51 +msgid "Config file location" +msgstr "" + +#: builtin/config.c:52 +msgid "use global config file" +msgstr "" + +#: builtin/config.c:53 +msgid "use system config file" +msgstr "" + +#: builtin/config.c:54 +msgid "use repository config file" +msgstr "" + +#: builtin/config.c:55 +msgid "use given config file" +msgstr "" + +#: builtin/config.c:56 +msgid "Action" +msgstr "" + +#: builtin/config.c:57 +msgid "get value: name [value-regex]" +msgstr "" + +#: builtin/config.c:58 +msgid "get all values: key [value-regex]" +msgstr "" + +#: builtin/config.c:59 +msgid "get values for regexp: name-regex [value-regex]" +msgstr "" + +#: builtin/config.c:60 +msgid "replace all matching variables: name value [value_regex]" +msgstr "" + +#: builtin/config.c:61 +msgid "add a new variable: name value" +msgstr "" + +#: builtin/config.c:62 +msgid "remove a variable: name [value-regex]" +msgstr "" + +#: builtin/config.c:63 +msgid "remove all matches: name [value-regex]" +msgstr "" + +#: builtin/config.c:64 +msgid "rename section: old-name new-name" +msgstr "" + +#: builtin/config.c:65 +msgid "remove a section: name" +msgstr "" + +#: builtin/config.c:66 +msgid "list all" +msgstr "" + +#: builtin/config.c:67 +msgid "open an editor" +msgstr "" + +#: builtin/config.c:68 builtin/config.c:69 +msgid "slot" +msgstr "" + +#: builtin/config.c:68 +msgid "find the color configured: [default]" +msgstr "" + +#: builtin/config.c:69 +msgid "find the color setting: [stdout-is-tty]" +msgstr "" + +#: builtin/config.c:70 +msgid "Type" +msgstr "" + +#: builtin/config.c:71 +msgid "value is \"true\" or \"false\"" +msgstr "" + +#: builtin/config.c:72 +msgid "value is decimal number" +msgstr "" + +#: builtin/config.c:73 +msgid "value is --bool or --int" +msgstr "" + +#: builtin/config.c:74 +msgid "value is a path (file or directory name)" +msgstr "" + +#: builtin/config.c:75 +msgid "Other" +msgstr "" + +#: builtin/config.c:76 +msgid "terminate values with NUL byte" +msgstr "" + +#: builtin/config.c:77 +msgid "respect include directives on lookup" +msgstr "" + +#: builtin/count-objects.c:82 +msgid "git count-objects [-v] [-H | --human-readable]" +msgstr "" + +#: builtin/count-objects.c:97 +msgid "print sizes in human readable format" +msgstr "" + +#: builtin/describe.c:15 +msgid "git describe [options] <committish>*" +msgstr "" + +#: builtin/describe.c:16 +msgid "git describe [options] --dirty" +msgstr "" + +#: builtin/describe.c:233 +#, c-format +msgid "annotated tag %s not available" +msgstr "" + +#: builtin/describe.c:237 +#, c-format +msgid "annotated tag %s has no embedded name" +msgstr "" + +#: builtin/describe.c:239 +#, c-format +msgid "tag '%s' is really '%s' here" +msgstr "" + +#: builtin/describe.c:266 +#, c-format +msgid "Not a valid object name %s" +msgstr "" + +#: builtin/describe.c:269 +#, c-format +msgid "%s is not a valid '%s' object" +msgstr "%s n'est pas un objet '%s' valide" + +#: builtin/describe.c:286 +#, c-format +msgid "no tag exactly matches '%s'" +msgstr "" + +#: builtin/describe.c:288 +#, c-format +msgid "searching to describe %s\n" +msgstr "" + +#: builtin/describe.c:328 +#, c-format +msgid "finished search at %s\n" +msgstr "" + +#: builtin/describe.c:352 +#, c-format +msgid "" +"No annotated tags can describe '%s'.\n" +"However, there were unannotated tags: try --tags." +msgstr "" + +#: builtin/describe.c:356 +#, c-format +msgid "" +"No tags can describe '%s'.\n" +"Try --always, or create some tags." +msgstr "" + +#: builtin/describe.c:377 +#, c-format +msgid "traversed %lu commits\n" +msgstr "" + +#: builtin/describe.c:380 +#, c-format +msgid "" +"more than %i tags found; listed %i most recent\n" +"gave up search at %s\n" +msgstr "" + +#: builtin/describe.c:402 +msgid "find the tag that comes after the commit" +msgstr "" + +#: builtin/describe.c:403 +msgid "debug search strategy on stderr" +msgstr "" + +#: builtin/describe.c:404 +msgid "use any ref" +msgstr "" + +#: builtin/describe.c:405 +msgid "use any tag, even unannotated" +msgstr "" + +#: builtin/describe.c:406 +msgid "always use long format" +msgstr "" + +#: builtin/describe.c:409 +msgid "only output exact matches" +msgstr "" + +#: builtin/describe.c:411 +msgid "consider <n> most recent tags (default: 10)" +msgstr "" + +#: builtin/describe.c:413 +msgid "only consider tags matching <pattern>" +msgstr "" + +#: builtin/describe.c:415 builtin/name-rev.c:238 +msgid "show abbreviated commit object as fallback" +msgstr "" + +#: builtin/describe.c:416 +msgid "mark" +msgstr "" + +#: builtin/describe.c:417 +msgid "append <mark> on dirty working tree (default: \"-dirty\")" +msgstr "" + +#: builtin/describe.c:435 +msgid "--long is incompatible with --abbrev=0" +msgstr "" + +#: builtin/describe.c:461 +msgid "No names found, cannot describe anything." +msgstr "" + +#: builtin/describe.c:481 +msgid "--dirty is incompatible with committishes" +msgstr "" + +#: builtin/diff.c:79 +#, c-format +msgid "'%s': not a regular file or symlink" +msgstr "" + +#: builtin/diff.c:228 +#, c-format +msgid "invalid option: %s" +msgstr "" + +#: builtin/diff.c:305 +msgid "Not a git repository" +msgstr "" + +#: builtin/diff.c:348 +#, c-format +msgid "invalid object '%s' given." +msgstr "" + +#: builtin/diff.c:353 +#, c-format +msgid "more than %d trees given: '%s'" +msgstr "" + +#: builtin/diff.c:363 +#, c-format +msgid "more than two blobs given: '%s'" +msgstr "" + +#: builtin/diff.c:371 +#, c-format +msgid "unhandled object '%s' given." +msgstr "" + +#: builtin/fast-export.c:22 +msgid "git fast-export [rev-list-opts]" +msgstr "" + +#: builtin/fast-export.c:658 +msgid "show progress after <n> objects" +msgstr "" + +#: builtin/fast-export.c:660 +msgid "select handling of signed tags" +msgstr "" + +#: builtin/fast-export.c:663 +msgid "select handling of tags that tag filtered objects" +msgstr "" + +#: builtin/fast-export.c:666 +msgid "Dump marks to this file" +msgstr "" + +#: builtin/fast-export.c:668 +msgid "Import marks from this file" +msgstr "" + +#: builtin/fast-export.c:670 +msgid "Fake a tagger when tags lack one" +msgstr "" + +#: builtin/fast-export.c:672 +msgid "Output full tree for each commit" +msgstr "" + +#: builtin/fast-export.c:674 +msgid "Use the done feature to terminate the stream" +msgstr "" + +#: builtin/fast-export.c:675 +msgid "Skip output of blob data" +msgstr "" + +#: builtin/fetch.c:20 +msgid "git fetch [<options>] [<repository> [<refspec>...]]" +msgstr "" + +#: builtin/fetch.c:21 +msgid "git fetch [<options>] <group>" +msgstr "" + +#: builtin/fetch.c:22 +msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]" +msgstr "" + +#: builtin/fetch.c:23 +msgid "git fetch --all [<options>]" +msgstr "" + +#: builtin/fetch.c:60 +msgid "fetch from all remotes" +msgstr "" + +#: builtin/fetch.c:62 +msgid "append to .git/FETCH_HEAD instead of overwriting" +msgstr "" + +#: builtin/fetch.c:64 +msgid "path to upload pack on remote end" +msgstr "" + +#: builtin/fetch.c:65 +msgid "force overwrite of local branch" +msgstr "" + +#: builtin/fetch.c:67 +msgid "fetch from multiple remotes" +msgstr "" + +#: builtin/fetch.c:69 +msgid "fetch all tags and associated objects" +msgstr "" + +#: builtin/fetch.c:71 +msgid "do not fetch all tags (--no-tags)" +msgstr "" + +#: builtin/fetch.c:73 +msgid "prune remote-tracking branches no longer on remote" +msgstr "" + +#: builtin/fetch.c:74 +msgid "on-demand" +msgstr "" + +#: builtin/fetch.c:75 +msgid "control recursive fetching of submodules" +msgstr "" + +#: builtin/fetch.c:79 +msgid "keep downloaded pack" +msgstr "" + +#: builtin/fetch.c:81 +msgid "allow updating of HEAD ref" +msgstr "" + +#: builtin/fetch.c:84 +msgid "deepen history of shallow clone" +msgstr "" + +#: builtin/fetch.c:86 +msgid "convert to a complete repository" +msgstr "" + +#: builtin/fetch.c:88 builtin/log.c:1130 +msgid "dir" +msgstr "" + +#: builtin/fetch.c:89 +msgid "prepend this to submodule path output" +msgstr "" + +#: builtin/fetch.c:92 +msgid "default mode for recursion" +msgstr "" + +#: builtin/fetch.c:204 +msgid "Couldn't find remote ref HEAD" +msgstr "" + +#: builtin/fetch.c:257 +#, c-format +msgid "object %s not found" +msgstr "" + +#: builtin/fetch.c:262 +msgid "[up to date]" +msgstr "" + +#: builtin/fetch.c:276 +#, c-format +msgid "! %-*s %-*s -> %s (can't fetch in current branch)" +msgstr "" + +#: builtin/fetch.c:277 builtin/fetch.c:363 +msgid "[rejected]" +msgstr "" + +#: builtin/fetch.c:288 +msgid "[tag update]" +msgstr "" + +#: builtin/fetch.c:290 builtin/fetch.c:325 builtin/fetch.c:343 +msgid " (unable to update local ref)" +msgstr "" + +#: builtin/fetch.c:308 +msgid "[new tag]" +msgstr "" + +#: builtin/fetch.c:311 +msgid "[new branch]" +msgstr "" + +#: builtin/fetch.c:314 +msgid "[new ref]" +msgstr "" + +#: builtin/fetch.c:359 +msgid "unable to update local ref" +msgstr "" + +#: builtin/fetch.c:359 +msgid "forced update" +msgstr "" + +#: builtin/fetch.c:365 +msgid "(non-fast-forward)" +msgstr "" + +#: builtin/fetch.c:396 builtin/fetch.c:688 +#, c-format +msgid "cannot open %s: %s\n" +msgstr "impossible d'ouvrir %s : %s\n" + +#: builtin/fetch.c:405 +#, c-format +msgid "%s did not send all necessary objects\n" +msgstr "%s n'a pas envoyé tous les objets nécessaires\n" + +#: builtin/fetch.c:491 +#, c-format +msgid "From %.*s\n" +msgstr "" + +#: builtin/fetch.c:502 +#, c-format +msgid "" +"some local refs could not be updated; try running\n" +" 'git remote prune %s' to remove any old, conflicting branches" +msgstr "" + +#: builtin/fetch.c:552 +#, c-format +msgid " (%s will become dangling)" +msgstr "" + +#: builtin/fetch.c:553 +#, c-format +msgid " (%s has become dangling)" +msgstr "" + +#: builtin/fetch.c:560 +msgid "[deleted]" +msgstr "" + +#: builtin/fetch.c:561 builtin/remote.c:1055 +msgid "(none)" +msgstr "" + +#: builtin/fetch.c:678 +#, c-format +msgid "Refusing to fetch into current branch %s of non-bare repository" +msgstr "" + +#: builtin/fetch.c:712 +#, c-format +msgid "Don't know how to fetch from %s" +msgstr "" + +#: builtin/fetch.c:789 +#, c-format +msgid "Option \"%s\" value \"%s\" is not valid for %s" +msgstr "" + +#: builtin/fetch.c:792 +#, c-format +msgid "Option \"%s\" is ignored for %s\n" +msgstr "" + +#: builtin/fetch.c:894 +#, c-format +msgid "Fetching %s\n" +msgstr "" + +#: builtin/fetch.c:896 builtin/remote.c:100 +#, c-format +msgid "Could not fetch %s" +msgstr "" + +#: builtin/fetch.c:915 +msgid "" +"No remote repository specified. Please, specify either a URL or a\n" +"remote name from which new revisions should be fetched." +msgstr "" + +#: builtin/fetch.c:935 +msgid "You need to specify a tag name." +msgstr "" + +#: builtin/fetch.c:981 +msgid "--depth and --unshallow cannot be used together" +msgstr "" + +#: builtin/fetch.c:983 +msgid "--unshallow on a complete repository does not make sense" +msgstr "" + +#: builtin/fetch.c:1002 +msgid "fetch --all does not take a repository argument" +msgstr "" + +#: builtin/fetch.c:1004 +msgid "fetch --all does not make sense with refspecs" +msgstr "" + +#: builtin/fetch.c:1015 +#, c-format +msgid "No such remote or remote group: %s" +msgstr "" + +#: builtin/fetch.c:1023 +msgid "Fetching a group and specifying refspecs does not make sense" +msgstr "" + +#: builtin/fmt-merge-msg.c:13 +msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]" +msgstr "" + +#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:701 +#: builtin/merge.c:188 builtin/show-branch.c:655 builtin/show-ref.c:175 +#: builtin/tag.c:446 parse-options.h:133 parse-options.h:239 +msgid "n" +msgstr "" + +#: builtin/fmt-merge-msg.c:664 +msgid "populate log with at most <n> entries from shortlog" +msgstr "" + +#: builtin/fmt-merge-msg.c:667 +msgid "alias for --log (deprecated)" +msgstr "" + +#: builtin/fmt-merge-msg.c:670 +msgid "text" +msgstr "" + +#: builtin/fmt-merge-msg.c:671 +msgid "use <text> as start of message" +msgstr "" + +#: builtin/fmt-merge-msg.c:672 +msgid "file to read from" +msgstr "" + +#: builtin/for-each-ref.c:979 +msgid "git for-each-ref [options] [<pattern>]" +msgstr "" + +#: builtin/for-each-ref.c:994 +msgid "quote placeholders suitably for shells" +msgstr "" + +#: builtin/for-each-ref.c:996 +msgid "quote placeholders suitably for perl" +msgstr "" + +#: builtin/for-each-ref.c:998 +msgid "quote placeholders suitably for python" +msgstr "" + +#: builtin/for-each-ref.c:1000 +msgid "quote placeholders suitably for tcl" +msgstr "" + +#: builtin/for-each-ref.c:1003 +msgid "show only <n> matched refs" +msgstr "" + +#: builtin/for-each-ref.c:1004 +msgid "format" +msgstr "" + +#: builtin/for-each-ref.c:1004 +msgid "format to use for the output" +msgstr "" + +#: builtin/for-each-ref.c:1005 +msgid "key" +msgstr "" + +#: builtin/for-each-ref.c:1006 +msgid "field name to sort on" +msgstr "" + +#: builtin/fsck.c:608 +msgid "git fsck [options] [<object>...]" +msgstr "" + +#: builtin/fsck.c:614 +msgid "show unreachable objects" +msgstr "" + +#: builtin/fsck.c:615 +msgid "show dangling objects" +msgstr "" + +#: builtin/fsck.c:616 +msgid "report tags" +msgstr "" + +#: builtin/fsck.c:617 +msgid "report root nodes" +msgstr "" + +#: builtin/fsck.c:618 +msgid "make index objects head nodes" +msgstr "" + +#: builtin/fsck.c:619 +msgid "make reflogs head nodes (default)" +msgstr "" + +#: builtin/fsck.c:620 +msgid "also consider packs and alternate objects" +msgstr "" + +#: builtin/fsck.c:621 +msgid "enable more strict checking" +msgstr "" + +#: builtin/fsck.c:623 +msgid "write dangling objects in .git/lost-found" +msgstr "" + +#: builtin/fsck.c:624 builtin/prune.c:134 +msgid "show progress" +msgstr "" + +#: builtin/gc.c:22 +msgid "git gc [options]" +msgstr "" + +#: builtin/gc.c:63 +#, c-format +msgid "Invalid %s: '%s'" +msgstr "" + +#: builtin/gc.c:90 +#, c-format +msgid "insanely long object directory %.*s" +msgstr "" + +#: builtin/gc.c:179 +msgid "prune unreferenced objects" +msgstr "" + +#: builtin/gc.c:181 +msgid "be more thorough (increased runtime)" +msgstr "" + +#: builtin/gc.c:182 +msgid "enable auto-gc mode" +msgstr "" + +#: builtin/gc.c:222 +#, c-format +msgid "" +"Auto packing the repository for optimum performance. You may also\n" +"run \"git gc\" manually. See \"git help gc\" for more information.\n" +msgstr "" + +#: builtin/gc.c:249 +msgid "" +"There are too many unreachable loose objects; run 'git prune' to remove them." +msgstr "" + +#: builtin/grep.c:22 +msgid "git grep [options] [-e] <pattern> [<rev>...] [[--] <path>...]" +msgstr "" + +#: builtin/grep.c:217 +#, c-format +msgid "grep: failed to create thread: %s" +msgstr "" + +#: builtin/grep.c:365 +#, c-format +msgid "Failed to chdir: %s" +msgstr "" + +#: builtin/grep.c:443 builtin/grep.c:478 +#, c-format +msgid "unable to read tree (%s)" +msgstr "" + +#: builtin/grep.c:493 +#, c-format +msgid "unable to grep from object of type %s" +msgstr "" + +#: builtin/grep.c:551 +#, c-format +msgid "switch `%c' expects a numerical value" +msgstr "" + +#: builtin/grep.c:568 +#, c-format +msgid "cannot open '%s'" +msgstr "" + +#: builtin/grep.c:643 +msgid "search in index instead of in the work tree" +msgstr "" + +#: builtin/grep.c:645 +msgid "find in contents not managed by git" +msgstr "" + +#: builtin/grep.c:647 +msgid "search in both tracked and untracked files" +msgstr "" + +#: builtin/grep.c:649 +msgid "search also in ignored files" +msgstr "" + +#: builtin/grep.c:652 +msgid "show non-matching lines" +msgstr "" + +#: builtin/grep.c:654 +msgid "case insensitive matching" +msgstr "" + +#: builtin/grep.c:656 +msgid "match patterns only at word boundaries" +msgstr "" + +#: builtin/grep.c:658 +msgid "process binary files as text" +msgstr "" + +#: builtin/grep.c:660 +msgid "don't match patterns in binary files" +msgstr "" + +#: builtin/grep.c:663 +msgid "descend at most <depth> levels" +msgstr "" + +#: builtin/grep.c:667 +msgid "use extended POSIX regular expressions" +msgstr "" + +#: builtin/grep.c:670 +msgid "use basic POSIX regular expressions (default)" +msgstr "" + +#: builtin/grep.c:673 +msgid "interpret patterns as fixed strings" +msgstr "" + +#: builtin/grep.c:676 +msgid "use Perl-compatible regular expressions" +msgstr "" + +#: builtin/grep.c:679 +msgid "show line numbers" +msgstr "" + +#: builtin/grep.c:680 +msgid "don't show filenames" +msgstr "" + +#: builtin/grep.c:681 +msgid "show filenames" +msgstr "" + +#: builtin/grep.c:683 +msgid "show filenames relative to top directory" +msgstr "" + +#: builtin/grep.c:685 +msgid "show only filenames instead of matching lines" +msgstr "" + +#: builtin/grep.c:687 +msgid "synonym for --files-with-matches" +msgstr "" + +#: builtin/grep.c:690 +msgid "show only the names of files without match" +msgstr "" + +#: builtin/grep.c:692 +msgid "print NUL after filenames" +msgstr "" + +#: builtin/grep.c:694 +msgid "show the number of matches instead of matching lines" +msgstr "" + +#: builtin/grep.c:695 +msgid "highlight matches" +msgstr "" + +#: builtin/grep.c:697 +msgid "print empty line between matches from different files" +msgstr "" + +#: builtin/grep.c:699 +msgid "show filename only once above matches from same file" +msgstr "" + +#: builtin/grep.c:702 +msgid "show <n> context lines before and after matches" +msgstr "" + +#: builtin/grep.c:705 +msgid "show <n> context lines before matches" +msgstr "" + +#: builtin/grep.c:707 +msgid "show <n> context lines after matches" +msgstr "" + +#: builtin/grep.c:708 +msgid "shortcut for -C NUM" +msgstr "" + +#: builtin/grep.c:711 +msgid "show a line with the function name before matches" +msgstr "" + +#: builtin/grep.c:713 +msgid "show the surrounding function" +msgstr "" + +#: builtin/grep.c:716 +msgid "read patterns from file" +msgstr "" + +#: builtin/grep.c:718 +msgid "match <pattern>" +msgstr "" + +#: builtin/grep.c:720 +msgid "combine patterns specified with -e" +msgstr "" + +#: builtin/grep.c:732 +msgid "indicate hit with exit status without output" +msgstr "" + +#: builtin/grep.c:734 +msgid "show only matches from files that match all patterns" +msgstr "" + +#: builtin/grep.c:736 +msgid "show parse tree for grep expression" +msgstr "" + +#: builtin/grep.c:740 +msgid "pager" +msgstr "" + +#: builtin/grep.c:740 +msgid "show matching files in the pager" +msgstr "" + +#: builtin/grep.c:743 +msgid "allow calling of grep(1) (ignored by this build)" +msgstr "" + +#: builtin/grep.c:744 builtin/show-ref.c:184 +msgid "show usage" +msgstr "" + +#: builtin/grep.c:811 +msgid "no pattern given." +msgstr "" + +#: builtin/grep.c:866 +msgid "--open-files-in-pager only works on the worktree" +msgstr "" + +#: builtin/grep.c:889 +msgid "--cached or --untracked cannot be used with --no-index." +msgstr "" + +#: builtin/grep.c:894 +msgid "--no-index or --untracked cannot be used with revs." +msgstr "" + +#: builtin/grep.c:897 +msgid "--[no-]exclude-standard cannot be used for tracked contents." +msgstr "" + +#: builtin/grep.c:905 +msgid "both --cached and trees are given." +msgstr "" + +#: builtin/hash-object.c:60 +msgid "" +"git hash-object [-t <type>] [-w] [--path=<file>|--no-filters] [--stdin] [--] " +"<file>..." +msgstr "" + +#: builtin/hash-object.c:61 +msgid "git hash-object --stdin-paths < <list-of-paths>" +msgstr "" + +#: builtin/hash-object.c:72 +msgid "type" +msgstr "" + +#: builtin/hash-object.c:72 +msgid "object type" +msgstr "" + +#: builtin/hash-object.c:73 +msgid "write the object into the object database" +msgstr "" + +#: builtin/hash-object.c:74 +msgid "read the object from stdin" +msgstr "" + +#: builtin/hash-object.c:76 +msgid "store file as is without filters" +msgstr "" + +#: builtin/hash-object.c:77 +msgid "process file as it were from this path" +msgstr "" + +#: builtin/help.c:43 +msgid "print all available commands" +msgstr "" + +#: builtin/help.c:44 +msgid "print list of useful guides" +msgstr "" + +#: builtin/help.c:45 +msgid "show man page" +msgstr "" + +#: builtin/help.c:46 +msgid "show manual in web browser" +msgstr "" + +#: builtin/help.c:48 +msgid "show info page" +msgstr "" + +#: builtin/help.c:54 +msgid "git help [--all] [--guides] [--man|--web|--info] [command]" +msgstr "" + +#: builtin/help.c:66 +#, c-format +msgid "unrecognized help format '%s'" +msgstr "" + +#: builtin/help.c:94 +msgid "Failed to start emacsclient." +msgstr "" + +#: builtin/help.c:107 +msgid "Failed to parse emacsclient version." +msgstr "" + +#: builtin/help.c:115 +#, c-format +msgid "emacsclient version '%d' too old (< 22)." +msgstr "" + +#: builtin/help.c:133 builtin/help.c:161 builtin/help.c:170 builtin/help.c:178 +#, c-format +msgid "failed to exec '%s': %s" +msgstr "" + +#: builtin/help.c:218 +#, c-format +msgid "" +"'%s': path for unsupported man viewer.\n" +"Please consider using 'man.<tool>.cmd' instead." +msgstr "" + +#: builtin/help.c:230 +#, c-format +msgid "" +"'%s': cmd for supported man viewer.\n" +"Please consider using 'man.<tool>.path' instead." +msgstr "" + +#: builtin/help.c:351 +#, c-format +msgid "'%s': unknown man viewer." +msgstr "" + +#: builtin/help.c:368 +msgid "no man viewer handled the request" +msgstr "" + +#: builtin/help.c:376 +msgid "no info viewer handled the request" +msgstr "" + +#: builtin/help.c:422 +msgid "Defining attributes per path" +msgstr "" + +#: builtin/help.c:423 +msgid "A Git glossary" +msgstr "" + +#: builtin/help.c:424 +msgid "Specifies intentionally untracked files to ignore" +msgstr "" + +#: builtin/help.c:425 +msgid "Defining submodule properties" +msgstr "" + +#: builtin/help.c:426 +msgid "Specifying revisions and ranges for Git" +msgstr "" + +#: builtin/help.c:427 +msgid "A tutorial introduction to Git (for version 1.5.1 or newer)" +msgstr "" + +#: builtin/help.c:428 +msgid "An overview of recommended workflows with Git" +msgstr "" + +#: builtin/help.c:440 +msgid "The common Git guides are:\n" +msgstr "" + +#: builtin/help.c:462 builtin/help.c:478 +#, c-format +msgid "usage: %s%s" +msgstr "" + +#: builtin/help.c:494 +#, c-format +msgid "`git %s' is aliased to `%s'" +msgstr "" + +#: builtin/index-pack.c:182 +#, c-format +msgid "object type mismatch at %s" +msgstr "" + +#: builtin/index-pack.c:202 +msgid "object of unexpected type" +msgstr "" + +#: builtin/index-pack.c:239 +#, c-format +msgid "cannot fill %d byte" +msgid_plural "cannot fill %d bytes" +msgstr[0] "" +msgstr[1] "" + +#: builtin/index-pack.c:249 +msgid "early EOF" +msgstr "" + +#: builtin/index-pack.c:250 +msgid "read error on input" +msgstr "" + +#: builtin/index-pack.c:262 +msgid "used more bytes than were available" +msgstr "" + +#: builtin/index-pack.c:269 +msgid "pack too large for current definition of off_t" +msgstr "" + +#: builtin/index-pack.c:285 +#, c-format +msgid "unable to create '%s'" +msgstr "" + +#: builtin/index-pack.c:290 +#, c-format +msgid "cannot open packfile '%s'" +msgstr "" + +#: builtin/index-pack.c:304 +msgid "pack signature mismatch" +msgstr "" + +#: builtin/index-pack.c:306 +#, c-format +msgid "pack version %<PRIu32> unsupported" +msgstr "" + +#: builtin/index-pack.c:324 +#, c-format +msgid "pack has bad object at offset %lu: %s" +msgstr "" + +#: builtin/index-pack.c:446 +#, c-format +msgid "inflate returned %d" +msgstr "" + +#: builtin/index-pack.c:495 +msgid "offset value overflow for delta base object" +msgstr "" + +#: builtin/index-pack.c:503 +msgid "delta base offset is out of bound" +msgstr "" + +#: builtin/index-pack.c:511 +#, c-format +msgid "unknown object type %d" +msgstr "" + +#: builtin/index-pack.c:542 +msgid "cannot pread pack file" +msgstr "" + +#: builtin/index-pack.c:544 +#, c-format +msgid "premature end of pack file, %lu byte missing" +msgid_plural "premature end of pack file, %lu bytes missing" +msgstr[0] "" +msgstr[1] "" + +#: builtin/index-pack.c:570 +msgid "serious inflate inconsistency" +msgstr "" + +#: builtin/index-pack.c:661 builtin/index-pack.c:667 builtin/index-pack.c:690 +#: builtin/index-pack.c:724 builtin/index-pack.c:733 +#, c-format +msgid "SHA1 COLLISION FOUND WITH %s !" +msgstr "" + +#: builtin/index-pack.c:664 builtin/pack-objects.c:170 +#: builtin/pack-objects.c:262 +#, c-format +msgid "unable to read %s" +msgstr "" + +#: builtin/index-pack.c:730 +#, c-format +msgid "cannot read existing object %s" +msgstr "" + +#: builtin/index-pack.c:744 +#, c-format +msgid "invalid blob object %s" +msgstr "" + +#: builtin/index-pack.c:759 +#, c-format +msgid "invalid %s" +msgstr "" + +#: builtin/index-pack.c:761 +msgid "Error in object" +msgstr "" + +#: builtin/index-pack.c:763 +#, c-format +msgid "Not all child objects of %s are reachable" +msgstr "" + +#: builtin/index-pack.c:833 builtin/index-pack.c:863 +msgid "failed to apply delta" +msgstr "" + +#: builtin/index-pack.c:1004 +msgid "Receiving objects" +msgstr "" + +#: builtin/index-pack.c:1004 +msgid "Indexing objects" +msgstr "" + +#: builtin/index-pack.c:1030 +msgid "pack is corrupted (SHA1 mismatch)" +msgstr "" + +#: builtin/index-pack.c:1035 +msgid "cannot fstat packfile" +msgstr "" + +#: builtin/index-pack.c:1038 +msgid "pack has junk at the end" +msgstr "" + +#: builtin/index-pack.c:1049 +msgid "confusion beyond insanity in parse_pack_objects()" +msgstr "" + +#: builtin/index-pack.c:1072 +msgid "Resolving deltas" +msgstr "" + +#: builtin/index-pack.c:1082 +#, c-format +msgid "unable to create thread: %s" +msgstr "" + +#: builtin/index-pack.c:1124 +msgid "confusion beyond insanity" +msgstr "" + +#: builtin/index-pack.c:1132 +#, c-format +msgid "completed with %d local objects" +msgstr "" + +#: builtin/index-pack.c:1142 +#, c-format +msgid "Unexpected tail checksum for %s (disk corruption?)" +msgstr "" + +#: builtin/index-pack.c:1146 +#, c-format +msgid "pack has %d unresolved delta" +msgid_plural "pack has %d unresolved deltas" +msgstr[0] "" +msgstr[1] "" + +#: builtin/index-pack.c:1171 +#, c-format +msgid "unable to deflate appended object (%d)" +msgstr "" + +#: builtin/index-pack.c:1250 +#, c-format +msgid "local object %s is corrupt" +msgstr "" + +#: builtin/index-pack.c:1274 +msgid "error while closing pack file" +msgstr "" + +#: builtin/index-pack.c:1287 +#, c-format +msgid "cannot write keep file '%s'" +msgstr "" + +#: builtin/index-pack.c:1295 +#, c-format +msgid "cannot close written keep file '%s'" +msgstr "" + +#: builtin/index-pack.c:1308 +msgid "cannot store pack file" +msgstr "" + +#: builtin/index-pack.c:1319 +msgid "cannot store index file" +msgstr "" + +#: builtin/index-pack.c:1352 +#, c-format +msgid "bad pack.indexversion=%<PRIu32>" +msgstr "" + +#: builtin/index-pack.c:1358 +#, c-format +msgid "invalid number of threads specified (%d)" +msgstr "" + +#: builtin/index-pack.c:1362 builtin/index-pack.c:1535 +#, c-format +msgid "no threads support, ignoring %s" +msgstr "" + +#: builtin/index-pack.c:1420 +#, c-format +msgid "Cannot open existing pack file '%s'" +msgstr "" + +#: builtin/index-pack.c:1422 +#, c-format +msgid "Cannot open existing pack idx file for '%s'" +msgstr "" + +#: builtin/index-pack.c:1469 +#, c-format +msgid "non delta: %d object" +msgid_plural "non delta: %d objects" +msgstr[0] "" +msgstr[1] "" + +#: builtin/index-pack.c:1476 +#, c-format +msgid "chain length = %d: %lu object" +msgid_plural "chain length = %d: %lu objects" +msgstr[0] "" +msgstr[1] "" + +#: builtin/index-pack.c:1503 +msgid "Cannot come back to cwd" +msgstr "" + +#: builtin/index-pack.c:1547 builtin/index-pack.c:1550 +#: builtin/index-pack.c:1562 builtin/index-pack.c:1566 +#, c-format +msgid "bad %s" +msgstr "" + +#: builtin/index-pack.c:1580 +msgid "--fix-thin cannot be used without --stdin" +msgstr "" + +#: builtin/index-pack.c:1584 builtin/index-pack.c:1594 +#, c-format +msgid "packfile name '%s' does not end with '.pack'" +msgstr "" + +#: builtin/index-pack.c:1603 +msgid "--verify with no packfile name given" +msgstr "" + +#: builtin/init-db.c:35 +#, c-format +msgid "Could not make %s writable by group" +msgstr "" + +#: builtin/init-db.c:62 +#, c-format +msgid "insanely long template name %s" +msgstr "" + +#: builtin/init-db.c:67 +#, c-format +msgid "cannot stat '%s'" +msgstr "" + +#: builtin/init-db.c:73 +#, c-format +msgid "cannot stat template '%s'" +msgstr "" + +#: builtin/init-db.c:80 +#, c-format +msgid "cannot opendir '%s'" +msgstr "" + +#: builtin/init-db.c:97 +#, c-format +msgid "cannot readlink '%s'" +msgstr "" + +#: builtin/init-db.c:99 +#, c-format +msgid "insanely long symlink %s" +msgstr "" + +#: builtin/init-db.c:102 +#, c-format +msgid "cannot symlink '%s' '%s'" +msgstr "" + +#: builtin/init-db.c:106 +#, c-format +msgid "cannot copy '%s' to '%s'" +msgstr "" + +#: builtin/init-db.c:110 +#, c-format +msgid "ignoring template %s" +msgstr "" + +#: builtin/init-db.c:133 +#, c-format +msgid "insanely long template path %s" +msgstr "" + +#: builtin/init-db.c:141 +#, c-format +msgid "templates not found %s" +msgstr "" + +#: builtin/init-db.c:154 +#, c-format +msgid "not copying templates of a wrong format version %d from '%s'" +msgstr "" + +#: builtin/init-db.c:192 +#, c-format +msgid "insane git directory %s" +msgstr "" + +#: builtin/init-db.c:323 builtin/init-db.c:326 +#, c-format +msgid "%s already exists" +msgstr "%s existe déjà " + +#: builtin/init-db.c:355 +#, c-format +msgid "unable to handle file type %d" +msgstr "" + +#: builtin/init-db.c:358 +#, c-format +msgid "unable to move %s to %s" +msgstr "" + +#: builtin/init-db.c:363 +#, c-format +msgid "Could not create git link %s" +msgstr "" + +#. +#. * TRANSLATORS: The first '%s' is either "Reinitialized +#. * existing" or "Initialized empty", the second " shared" or +#. * "", and the last '%s%s' is the verbatim directory name. +#. +#: builtin/init-db.c:420 +#, c-format +msgid "%s%s Git repository in %s%s\n" +msgstr "%s%s Dépôt git dans %s%s\n" + +#: builtin/init-db.c:421 +msgid "Reinitialized existing" +msgstr "" + +#: builtin/init-db.c:421 +msgid "Initialized empty" +msgstr "" + +#: builtin/init-db.c:422 +msgid " shared" +msgstr "" + +#: builtin/init-db.c:441 +msgid "cannot tell cwd" +msgstr "" + +#: builtin/init-db.c:467 +msgid "" +"git init [-q | --quiet] [--bare] [--template=<template-directory>] [--" +"shared[=<permissions>]] [directory]" +msgstr "" + +#: builtin/init-db.c:490 +msgid "permissions" +msgstr "" + +#: builtin/init-db.c:491 +msgid "specify that the git repository is to be shared amongst several users" +msgstr "" + +#: builtin/init-db.c:493 builtin/prune-packed.c:77 +msgid "be quiet" +msgstr "" + +#: builtin/init-db.c:522 builtin/init-db.c:529 +#, c-format +msgid "cannot mkdir %s" +msgstr "" + +#: builtin/init-db.c:533 +#, c-format +msgid "cannot chdir to %s" +msgstr "" + +#: builtin/init-db.c:555 +#, c-format +msgid "" +"%s (or --work-tree=<directory>) not allowed without specifying %s (or --git-" +"dir=<directory>)" +msgstr "" + +#: builtin/init-db.c:579 +msgid "Cannot access current working directory" +msgstr "" + +#: builtin/init-db.c:586 +#, c-format +msgid "Cannot access work tree '%s'" +msgstr "" + +#: builtin/log.c:40 +msgid "git log [<options>] [<revision range>] [[--] <path>...]\n" +msgstr "" + +#: builtin/log.c:41 +msgid " or: git show [options] <object>..." +msgstr "" + +#: builtin/log.c:103 +msgid "suppress diff output" +msgstr "" + +#: builtin/log.c:104 +msgid "show source" +msgstr "" + +#: builtin/log.c:105 +msgid "Use mail map file" +msgstr "" + +#: builtin/log.c:106 +msgid "decorate options" +msgstr "" + +#: builtin/log.c:199 +#, c-format +msgid "Final output: %d %s\n" +msgstr "" + +#: builtin/log.c:422 builtin/log.c:514 +#, c-format +msgid "Could not read object %s" +msgstr "" + +#: builtin/log.c:538 +#, c-format +msgid "Unknown type: %d" +msgstr "" + +#: builtin/log.c:638 +msgid "format.headers without value" +msgstr "" + +#: builtin/log.c:720 +msgid "name of output directory is too long" +msgstr "" + +#: builtin/log.c:736 +#, c-format +msgid "Cannot open patch file %s" +msgstr "" + +#: builtin/log.c:750 +msgid "Need exactly one range." +msgstr "" + +#: builtin/log.c:758 +msgid "Not a range." +msgstr "" + +#: builtin/log.c:860 +msgid "Cover letter needs email format" +msgstr "" + +#: builtin/log.c:936 +#, c-format +msgid "insane in-reply-to: %s" +msgstr "" + +#: builtin/log.c:964 +msgid "git format-patch [options] [<since> | <revision range>]" +msgstr "" + +#: builtin/log.c:1009 +msgid "Two output directories?" +msgstr "" + +#: builtin/log.c:1108 +msgid "use [PATCH n/m] even with a single patch" +msgstr "" + +#: builtin/log.c:1111 +msgid "use [PATCH] even with multiple patches" +msgstr "" + +#: builtin/log.c:1115 +msgid "print patches to standard out" +msgstr "" + +#: builtin/log.c:1117 +msgid "generate a cover letter" +msgstr "" + +#: builtin/log.c:1119 +msgid "use simple number sequence for output file names" +msgstr "" + +#: builtin/log.c:1120 +msgid "sfx" +msgstr "" + +#: builtin/log.c:1121 +msgid "use <sfx> instead of '.patch'" +msgstr "" + +#: builtin/log.c:1123 +msgid "start numbering patches at <n> instead of 1" +msgstr "" + +#: builtin/log.c:1125 +msgid "mark the series as Nth re-roll" +msgstr "" + +#: builtin/log.c:1127 +msgid "Use [<prefix>] instead of [PATCH]" +msgstr "" + +#: builtin/log.c:1130 +msgid "store resulting files in <dir>" +msgstr "" + +#: builtin/log.c:1133 +msgid "don't strip/add [PATCH]" +msgstr "" + +#: builtin/log.c:1136 +msgid "don't output binary diffs" +msgstr "" + +#: builtin/log.c:1138 +msgid "don't include a patch matching a commit upstream" +msgstr "" + +#: builtin/log.c:1140 +msgid "show patch format instead of default (patch + stat)" +msgstr "" + +#: builtin/log.c:1142 +msgid "Messaging" +msgstr "" + +#: builtin/log.c:1143 +msgid "header" +msgstr "" + +#: builtin/log.c:1144 +msgid "add email header" +msgstr "" + +#: builtin/log.c:1145 builtin/log.c:1147 +msgid "email" +msgstr "" + +#: builtin/log.c:1145 +msgid "add To: header" +msgstr "" + +#: builtin/log.c:1147 +msgid "add Cc: header" +msgstr "" + +#: builtin/log.c:1149 +msgid "message-id" +msgstr "" + +#: builtin/log.c:1150 +msgid "make first mail a reply to <message-id>" +msgstr "" + +#: builtin/log.c:1151 builtin/log.c:1154 +msgid "boundary" +msgstr "" + +#: builtin/log.c:1152 +msgid "attach the patch" +msgstr "" + +#: builtin/log.c:1155 +msgid "inline the patch" +msgstr "" + +#: builtin/log.c:1159 +msgid "enable message threading, styles: shallow, deep" +msgstr "" + +#: builtin/log.c:1161 +msgid "signature" +msgstr "" + +#: builtin/log.c:1162 +msgid "add a signature" +msgstr "" + +#: builtin/log.c:1164 +msgid "don't print the patch filenames" +msgstr "" + +#: builtin/log.c:1248 +msgid "-n and -k are mutually exclusive." +msgstr "" + +#: builtin/log.c:1250 +msgid "--subject-prefix and -k are mutually exclusive." +msgstr "" + +#: builtin/log.c:1258 +msgid "--name-only does not make sense" +msgstr "" + +#: builtin/log.c:1260 +msgid "--name-status does not make sense" +msgstr "" + +#: builtin/log.c:1262 +msgid "--check does not make sense" +msgstr "" + +#: builtin/log.c:1285 +msgid "standard output, or directory, which one?" +msgstr "" + +#: builtin/log.c:1287 +#, c-format +msgid "Could not create directory '%s'" +msgstr "" + +#: builtin/log.c:1435 +msgid "Failed to create output files" +msgstr "" + +#: builtin/log.c:1484 +msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]" +msgstr "" + +#: builtin/log.c:1539 +#, c-format +msgid "" +"Could not find a tracked remote branch, please specify <upstream> manually.\n" +msgstr "" + +#: builtin/log.c:1552 builtin/log.c:1554 builtin/log.c:1566 +#, c-format +msgid "Unknown commit %s" +msgstr "" + +#: builtin/ls-files.c:402 +msgid "git ls-files [options] [<file>...]" +msgstr "" + +#: builtin/ls-files.c:459 +msgid "identify the file status with tags" +msgstr "" + +#: builtin/ls-files.c:461 +msgid "use lowercase letters for 'assume unchanged' files" +msgstr "" + +#: builtin/ls-files.c:463 +msgid "show cached files in the output (default)" +msgstr "" + +#: builtin/ls-files.c:465 +msgid "show deleted files in the output" +msgstr "" + +#: builtin/ls-files.c:467 +msgid "show modified files in the output" +msgstr "" + +#: builtin/ls-files.c:469 +msgid "show other files in the output" +msgstr "" + +#: builtin/ls-files.c:471 +msgid "show ignored files in the output" +msgstr "" + +#: builtin/ls-files.c:474 +msgid "show staged contents' object name in the output" +msgstr "" + +#: builtin/ls-files.c:476 +msgid "show files on the filesystem that need to be removed" +msgstr "" + +#: builtin/ls-files.c:478 +msgid "show 'other' directories' name only" +msgstr "" + +#: builtin/ls-files.c:481 +msgid "don't show empty directories" +msgstr "" + +#: builtin/ls-files.c:484 +msgid "show unmerged files in the output" +msgstr "" + +#: builtin/ls-files.c:486 +msgid "show resolve-undo information" +msgstr "" + +#: builtin/ls-files.c:488 +msgid "skip files matching pattern" +msgstr "" + +#: builtin/ls-files.c:491 +msgid "exclude patterns are read from <file>" +msgstr "" + +#: builtin/ls-files.c:494 +msgid "read additional per-directory exclude patterns in <file>" +msgstr "" + +#: builtin/ls-files.c:496 +msgid "add the standard git exclusions" +msgstr "" + +#: builtin/ls-files.c:499 +msgid "make the output relative to the project top directory" +msgstr "" + +#: builtin/ls-files.c:502 +msgid "if any <file> is not in the index, treat this as an error" +msgstr "" + +#: builtin/ls-files.c:503 +msgid "tree-ish" +msgstr "" + +#: builtin/ls-files.c:504 +msgid "pretend that paths removed since <tree-ish> are still present" +msgstr "" + +#: builtin/ls-files.c:506 +msgid "show debugging data" +msgstr "" + +#: builtin/ls-tree.c:27 +msgid "git ls-tree [<options>] <tree-ish> [<path>...]" +msgstr "" + +#: builtin/ls-tree.c:125 +msgid "only show trees" +msgstr "" + +#: builtin/ls-tree.c:127 +msgid "recurse into subtrees" +msgstr "" + +#: builtin/ls-tree.c:129 +msgid "show trees when recursing" +msgstr "" + +#: builtin/ls-tree.c:132 +msgid "terminate entries with NUL byte" +msgstr "" + +#: builtin/ls-tree.c:133 +msgid "include object size" +msgstr "" + +#: builtin/ls-tree.c:135 builtin/ls-tree.c:137 +msgid "list only filenames" +msgstr "" + +#: builtin/ls-tree.c:140 +msgid "use full path names" +msgstr "" + +#: builtin/ls-tree.c:142 +msgid "list entire tree; not just current directory (implies --full-name)" +msgstr "" + +#: builtin/merge.c:43 +msgid "git merge [options] [<commit>...]" +msgstr "" + +#: builtin/merge.c:44 +msgid "git merge [options] <msg> HEAD <commit>" +msgstr "" + +#: builtin/merge.c:45 +msgid "git merge --abort" +msgstr "" + +#: builtin/merge.c:90 +msgid "switch `m' requires a value" +msgstr "" + +#: builtin/merge.c:127 +#, c-format +msgid "Could not find merge strategy '%s'.\n" +msgstr "" + +#: builtin/merge.c:128 +#, c-format +msgid "Available strategies are:" +msgstr "" + +#: builtin/merge.c:133 +#, c-format +msgid "Available custom strategies are:" +msgstr "" + +#: builtin/merge.c:183 +msgid "do not show a diffstat at the end of the merge" +msgstr "" + +#: builtin/merge.c:186 +msgid "show a diffstat at the end of the merge" +msgstr "" + +#: builtin/merge.c:187 +msgid "(synonym to --stat)" +msgstr "" + +#: builtin/merge.c:189 +msgid "add (at most <n>) entries from shortlog to merge commit message" +msgstr "" + +#: builtin/merge.c:192 +msgid "create a single commit instead of doing a merge" +msgstr "" + +#: builtin/merge.c:194 +msgid "perform a commit if the merge succeeds (default)" +msgstr "" + +#: builtin/merge.c:196 +msgid "edit message before committing" +msgstr "" + +#: builtin/merge.c:198 +msgid "allow fast-forward (default)" +msgstr "" + +#: builtin/merge.c:200 +msgid "abort if fast-forward is not possible" +msgstr "" + +#: builtin/merge.c:203 +msgid "Verify that the named commit has a valid GPG signature" +msgstr "" + +#: builtin/merge.c:204 builtin/notes.c:866 builtin/revert.c:112 +msgid "strategy" +msgstr "" + +#: builtin/merge.c:205 +msgid "merge strategy to use" +msgstr "" + +#: builtin/merge.c:206 +msgid "option=value" +msgstr "" + +#: builtin/merge.c:207 +msgid "option for selected merge strategy" +msgstr "" + +#: builtin/merge.c:209 +msgid "merge commit message (for a non-fast-forward merge)" +msgstr "" + +#: builtin/merge.c:213 +msgid "abort the current in-progress merge" +msgstr "" + +#: builtin/merge.c:242 +msgid "could not run stash." +msgstr "" + +#: builtin/merge.c:247 +msgid "stash failed" +msgstr "" + +#: builtin/merge.c:252 +#, c-format +msgid "not a valid object: %s" +msgstr "" + +#: builtin/merge.c:271 builtin/merge.c:288 +msgid "read-tree failed" +msgstr "" + +#: builtin/merge.c:318 +msgid " (nothing to squash)" +msgstr " (rien à compresser)" + +#: builtin/merge.c:331 +#, c-format +msgid "Squash commit -- not updating HEAD\n" +msgstr "" + +#: builtin/merge.c:363 +msgid "Writing SQUASH_MSG" +msgstr "" + +#: builtin/merge.c:365 +msgid "Finishing SQUASH_MSG" +msgstr "" + +#: builtin/merge.c:388 +#, c-format +msgid "No merge message -- not updating HEAD\n" +msgstr "" + +#: builtin/merge.c:438 +#, c-format +msgid "'%s' does not point to a commit" +msgstr "" + +#: builtin/merge.c:550 +#, c-format +msgid "Bad branch.%s.mergeoptions string: %s" +msgstr "" + +#: builtin/merge.c:643 +msgid "git write-tree failed to write a tree" +msgstr "" + +#: builtin/merge.c:671 +msgid "Not handling anything other than two heads merge." +msgstr "" + +#: builtin/merge.c:685 +#, c-format +msgid "Unknown option for merge-recursive: -X%s" +msgstr "" + +#: builtin/merge.c:699 +#, c-format +msgid "unable to write %s" +msgstr "" + +#: builtin/merge.c:788 +#, c-format +msgid "Could not read from '%s'" +msgstr "" + +#: builtin/merge.c:797 +#, c-format +msgid "Not committing merge; use 'git commit' to complete the merge.\n" +msgstr "" + +#: builtin/merge.c:803 +#, c-format +msgid "" +"Please enter a commit message to explain why this merge is necessary,\n" +"especially if it merges an updated upstream into a topic branch.\n" +"\n" +"Lines starting with '%c' will be ignored, and an empty message aborts\n" +"the commit.\n" +msgstr "" + +#: builtin/merge.c:827 +msgid "Empty commit message." +msgstr "" + +#: builtin/merge.c:839 +#, c-format +msgid "Wonderful.\n" +msgstr "" + +#: builtin/merge.c:904 +#, c-format +msgid "Automatic merge failed; fix conflicts and then commit the result.\n" +msgstr "" + +#: builtin/merge.c:920 +#, c-format +msgid "'%s' is not a commit" +msgstr "" + +#: builtin/merge.c:961 +msgid "No current branch." +msgstr "" + +#: builtin/merge.c:963 +msgid "No remote for the current branch." +msgstr "" + +#: builtin/merge.c:965 +msgid "No default upstream defined for the current branch." +msgstr "" + +#: builtin/merge.c:970 +#, c-format +msgid "No remote tracking branch for %s from %s" +msgstr "" + +#: builtin/merge.c:1057 builtin/merge.c:1214 +#, c-format +msgid "%s - not something we can merge" +msgstr "" + +#: builtin/merge.c:1125 +msgid "There is no merge to abort (MERGE_HEAD missing)." +msgstr "" + +#: builtin/merge.c:1141 git-pull.sh:31 +msgid "" +"You have not concluded your merge (MERGE_HEAD exists).\n" +"Please, commit your changes before you can merge." +msgstr "" + +#: builtin/merge.c:1144 git-pull.sh:34 +msgid "You have not concluded your merge (MERGE_HEAD exists)." +msgstr "" + +#: builtin/merge.c:1148 +msgid "" +"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" +"Please, commit your changes before you can merge." +msgstr "" + +#: builtin/merge.c:1151 +msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." +msgstr "" + +#: builtin/merge.c:1160 +msgid "You cannot combine --squash with --no-ff." +msgstr "" + +#: builtin/merge.c:1165 +msgid "You cannot combine --no-ff with --ff-only." +msgstr "" + +#: builtin/merge.c:1172 +msgid "No commit specified and merge.defaultToUpstream not set." +msgstr "" + +#: builtin/merge.c:1204 +msgid "Can merge only exactly one commit into empty head" +msgstr "" + +#: builtin/merge.c:1207 +msgid "Squash commit into empty head not supported yet" +msgstr "" + +#: builtin/merge.c:1209 +msgid "Non-fast-forward commit does not make sense into an empty head" +msgstr "" + +#: builtin/merge.c:1265 +#, c-format +msgid "Commit %s has an untrusted GPG signature, allegedly by %s." +msgstr "" + +#: builtin/merge.c:1268 +#, c-format +msgid "Commit %s has a bad GPG signature allegedly by %s." +msgstr "" + +#. 'N' +#: builtin/merge.c:1271 +#, c-format +msgid "Commit %s does not have a GPG signature." +msgstr "" + +#: builtin/merge.c:1274 +#, c-format +msgid "Commit %s has a good GPG signature by %s\n" +msgstr "" + +#: builtin/merge.c:1358 +#, c-format +msgid "Updating %s..%s\n" +msgstr "" + +#: builtin/merge.c:1397 +#, c-format +msgid "Trying really trivial in-index merge...\n" +msgstr "" + +#: builtin/merge.c:1404 +#, c-format +msgid "Nope.\n" +msgstr "" + +#: builtin/merge.c:1436 +msgid "Not possible to fast-forward, aborting." +msgstr "" + +#: builtin/merge.c:1459 builtin/merge.c:1538 +#, c-format +msgid "Rewinding the tree to pristine...\n" +msgstr "" + +#: builtin/merge.c:1463 +#, c-format +msgid "Trying merge strategy %s...\n" +msgstr "" + +#: builtin/merge.c:1529 +#, c-format +msgid "No merge strategy handled the merge.\n" +msgstr "" + +#: builtin/merge.c:1531 +#, c-format +msgid "Merge with strategy %s failed.\n" +msgstr "" + +#: builtin/merge.c:1540 +#, c-format +msgid "Using the %s to prepare resolving by hand.\n" +msgstr "" + +#: builtin/merge.c:1552 +#, c-format +msgid "Automatic merge went well; stopped before committing as requested\n" +msgstr "" + +#: builtin/merge-base.c:26 +msgid "git merge-base [-a|--all] <commit> <commit>..." +msgstr "" + +#: builtin/merge-base.c:27 +msgid "git merge-base [-a|--all] --octopus <commit>..." +msgstr "" + +#: builtin/merge-base.c:28 +msgid "git merge-base --independent <commit>..." +msgstr "" + +#: builtin/merge-base.c:29 +msgid "git merge-base --is-ancestor <commit> <commit>" +msgstr "" + +#: builtin/merge-base.c:98 +msgid "output all common ancestors" +msgstr "" + +#: builtin/merge-base.c:99 +msgid "find ancestors for a single n-way merge" +msgstr "" + +#: builtin/merge-base.c:100 +msgid "list revs not reachable from others" +msgstr "" + +#: builtin/merge-base.c:102 +msgid "is the first one ancestor of the other?" +msgstr "" + +#: builtin/merge-file.c:8 +msgid "" +"git merge-file [options] [-L name1 [-L orig [-L name2]]] file1 orig_file " +"file2" +msgstr "" + +#: builtin/merge-file.c:33 +msgid "send results to standard output" +msgstr "" + +#: builtin/merge-file.c:34 +msgid "use a diff3 based merge" +msgstr "" + +#: builtin/merge-file.c:35 +msgid "for conflicts, use our version" +msgstr "" + +#: builtin/merge-file.c:37 +msgid "for conflicts, use their version" +msgstr "" + +#: builtin/merge-file.c:39 +msgid "for conflicts, use a union version" +msgstr "" + +#: builtin/merge-file.c:42 +msgid "for conflicts, use this marker size" +msgstr "" + +#: builtin/merge-file.c:43 +msgid "do not warn about conflicts" +msgstr "" + +#: builtin/merge-file.c:45 +msgid "set labels for file1/orig_file/file2" +msgstr "" + +#: builtin/mktree.c:67 +msgid "git mktree [-z] [--missing] [--batch]" +msgstr "" + +#: builtin/mktree.c:153 +msgid "input is NUL terminated" +msgstr "" + +#: builtin/mktree.c:154 builtin/write-tree.c:24 +msgid "allow missing objects" +msgstr "" + +#: builtin/mktree.c:155 +msgid "allow creation of more than one tree" +msgstr "" + +#: builtin/mv.c:14 +msgid "git mv [options] <source>... <destination>" +msgstr "" + +#: builtin/mv.c:64 +msgid "force move/rename even if target exists" +msgstr "" + +#: builtin/mv.c:65 +msgid "skip move/rename errors" +msgstr "" + +#: builtin/mv.c:108 +#, c-format +msgid "Checking rename of '%s' to '%s'\n" +msgstr "" + +#: builtin/mv.c:112 +msgid "bad source" +msgstr "" + +#: builtin/mv.c:115 +msgid "can not move directory into itself" +msgstr "" + +#: builtin/mv.c:118 +msgid "cannot move directory over file" +msgstr "" + +#: builtin/mv.c:128 +#, c-format +msgid "Huh? %.*s is in index?" +msgstr "" + +#: builtin/mv.c:140 +msgid "source directory is empty" +msgstr "" + +#: builtin/mv.c:171 +msgid "not under version control" +msgstr "" + +#: builtin/mv.c:173 +msgid "destination exists" +msgstr "" + +#: builtin/mv.c:181 +#, c-format +msgid "overwriting '%s'" +msgstr "" + +#: builtin/mv.c:184 +msgid "Cannot overwrite" +msgstr "" + +#: builtin/mv.c:187 +msgid "multiple sources for the same target" +msgstr "" + +#: builtin/mv.c:202 +#, c-format +msgid "%s, source=%s, destination=%s" +msgstr "%s, source=%s, destination=%s" + +#: builtin/mv.c:212 +#, c-format +msgid "Renaming %s to %s\n" +msgstr "" + +#: builtin/mv.c:215 builtin/remote.c:731 +#, c-format +msgid "renaming '%s' failed" +msgstr "" + +#: builtin/name-rev.c:175 +msgid "git name-rev [options] <commit>..." +msgstr "" + +#: builtin/name-rev.c:176 +msgid "git name-rev [options] --all" +msgstr "" + +#: builtin/name-rev.c:177 +msgid "git name-rev [options] --stdin" +msgstr "" + +#: builtin/name-rev.c:229 +msgid "print only names (no SHA-1)" +msgstr "" + +#: builtin/name-rev.c:230 +msgid "only use tags to name the commits" +msgstr "" + +#: builtin/name-rev.c:232 +msgid "only use refs matching <pattern>" +msgstr "" + +#: builtin/name-rev.c:234 +msgid "list all commits reachable from all refs" +msgstr "" + +#: builtin/name-rev.c:235 +msgid "read from stdin" +msgstr "" + +#: builtin/name-rev.c:236 +msgid "allow to print `undefined` names" +msgstr "" + +#: builtin/notes.c:26 +msgid "git notes [--ref <notes_ref>] [list [<object>]]" +msgstr "" + +#: builtin/notes.c:27 +msgid "" +"git notes [--ref <notes_ref>] add [-f] [-m <msg> | -F <file> | (-c | -C) " +"<object>] [<object>]" +msgstr "" + +#: builtin/notes.c:28 +msgid "git notes [--ref <notes_ref>] copy [-f] <from-object> <to-object>" +msgstr "" + +#: builtin/notes.c:29 +msgid "" +"git notes [--ref <notes_ref>] append [-m <msg> | -F <file> | (-c | -C) " +"<object>] [<object>]" +msgstr "" + +#: builtin/notes.c:30 +msgid "git notes [--ref <notes_ref>] edit [<object>]" +msgstr "" + +#: builtin/notes.c:31 +msgid "git notes [--ref <notes_ref>] show [<object>]" +msgstr "" + +#: builtin/notes.c:32 +msgid "" +"git notes [--ref <notes_ref>] merge [-v | -q] [-s <strategy> ] <notes_ref>" +msgstr "" + +#: builtin/notes.c:33 +msgid "git notes merge --commit [-v | -q]" +msgstr "" + +#: builtin/notes.c:34 +msgid "git notes merge --abort [-v | -q]" +msgstr "" + +#: builtin/notes.c:35 +msgid "git notes [--ref <notes_ref>] remove [<object>...]" +msgstr "" + +#: builtin/notes.c:36 +msgid "git notes [--ref <notes_ref>] prune [-n | -v]" +msgstr "" + +#: builtin/notes.c:37 +msgid "git notes [--ref <notes_ref>] get-ref" +msgstr "" + +#: builtin/notes.c:42 +msgid "git notes [list [<object>]]" +msgstr "" + +#: builtin/notes.c:47 +msgid "git notes add [<options>] [<object>]" +msgstr "" + +#: builtin/notes.c:52 +msgid "git notes copy [<options>] <from-object> <to-object>" +msgstr "" + +#: builtin/notes.c:53 +msgid "git notes copy --stdin [<from-object> <to-object>]..." +msgstr "" + +#: builtin/notes.c:58 +msgid "git notes append [<options>] [<object>]" +msgstr "" + +#: builtin/notes.c:63 +msgid "git notes edit [<object>]" +msgstr "" + +#: builtin/notes.c:68 +msgid "git notes show [<object>]" +msgstr "" + +#: builtin/notes.c:73 +msgid "git notes merge [<options>] <notes_ref>" +msgstr "" + +#: builtin/notes.c:74 +msgid "git notes merge --commit [<options>]" +msgstr "" + +#: builtin/notes.c:75 +msgid "git notes merge --abort [<options>]" +msgstr "" + +#: builtin/notes.c:80 +msgid "git notes remove [<object>]" +msgstr "" + +#: builtin/notes.c:85 +msgid "git notes prune [<options>]" +msgstr "" + +#: builtin/notes.c:90 +msgid "git notes get-ref" +msgstr "" + +#: builtin/notes.c:139 +#, c-format +msgid "unable to start 'show' for object '%s'" +msgstr "" + +#: builtin/notes.c:143 +msgid "could not read 'show' output" +msgstr "" + +#: builtin/notes.c:151 +#, c-format +msgid "failed to finish 'show' for object '%s'" +msgstr "" + +#: builtin/notes.c:169 builtin/tag.c:341 +#, c-format +msgid "could not create file '%s'" +msgstr "" + +#: builtin/notes.c:188 +msgid "Please supply the note contents using either -m or -F option" +msgstr "" + +#: builtin/notes.c:209 builtin/notes.c:972 +#, c-format +msgid "Removing note for object %s\n" +msgstr "" + +#: builtin/notes.c:214 +msgid "unable to write note object" +msgstr "" + +#: builtin/notes.c:216 +#, c-format +msgid "The note contents has been left in %s" +msgstr "" + +#: builtin/notes.c:250 builtin/tag.c:540 +#, c-format +msgid "cannot read '%s'" +msgstr "" + +#: builtin/notes.c:252 builtin/tag.c:543 +#, c-format +msgid "could not open or read '%s'" +msgstr "" + +#: builtin/notes.c:271 builtin/notes.c:444 builtin/notes.c:446 +#: builtin/notes.c:506 builtin/notes.c:560 builtin/notes.c:643 +#: builtin/notes.c:648 builtin/notes.c:723 builtin/notes.c:765 +#: builtin/notes.c:967 builtin/tag.c:556 +#, c-format +msgid "Failed to resolve '%s' as a valid ref." +msgstr "" + +#: builtin/notes.c:274 +#, c-format +msgid "Failed to read object '%s'." +msgstr "" + +#: builtin/notes.c:298 +msgid "Cannot commit uninitialized/unreferenced notes tree" +msgstr "" + +#: builtin/notes.c:339 +#, c-format +msgid "Bad notes.rewriteMode value: '%s'" +msgstr "" + +#: builtin/notes.c:349 +#, c-format +msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" +msgstr "" + +#. TRANSLATORS: The first %s is the name of the +#. environment variable, the second %s is its value +#: builtin/notes.c:376 +#, c-format +msgid "Bad %s value: '%s'" +msgstr "" + +#: builtin/notes.c:440 +#, c-format +msgid "Malformed input line: '%s'." +msgstr "" + +#: builtin/notes.c:455 +#, c-format +msgid "Failed to copy notes from '%s' to '%s'" +msgstr "" + +#: builtin/notes.c:499 builtin/notes.c:553 builtin/notes.c:626 +#: builtin/notes.c:638 builtin/notes.c:711 builtin/notes.c:758 +#: builtin/notes.c:1032 +msgid "too many parameters" +msgstr "" + +#: builtin/notes.c:512 builtin/notes.c:771 +#, c-format +msgid "No note found for object %s." +msgstr "" + +#: builtin/notes.c:534 builtin/notes.c:691 +msgid "note contents as a string" +msgstr "" + +#: builtin/notes.c:537 builtin/notes.c:694 +msgid "note contents in a file" +msgstr "" + +#: builtin/notes.c:539 builtin/notes.c:542 builtin/notes.c:696 +#: builtin/notes.c:699 builtin/tag.c:474 +msgid "object" +msgstr "" + +#: builtin/notes.c:540 builtin/notes.c:697 +msgid "reuse and edit specified note object" +msgstr "" + +#: builtin/notes.c:543 builtin/notes.c:700 +msgid "reuse specified note object" +msgstr "" + +#: builtin/notes.c:545 builtin/notes.c:613 +msgid "replace existing notes" +msgstr "" + +#: builtin/notes.c:579 +#, c-format +msgid "" +"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite " +"existing notes" +msgstr "" + +#: builtin/notes.c:584 builtin/notes.c:661 +#, c-format +msgid "Overwriting existing notes for object %s\n" +msgstr "" + +#: builtin/notes.c:614 +msgid "read objects from stdin" +msgstr "" + +#: builtin/notes.c:616 +msgid "load rewriting config for <command> (implies --stdin)" +msgstr "" + +#: builtin/notes.c:634 +msgid "too few parameters" +msgstr "" + +#: builtin/notes.c:655 +#, c-format +msgid "" +"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite " +"existing notes" +msgstr "" + +#: builtin/notes.c:667 +#, c-format +msgid "Missing notes on source object %s. Cannot copy." +msgstr "" + +#: builtin/notes.c:716 +#, c-format +msgid "" +"The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n" +"Please use 'git notes add -f -m/-F/-c/-C' instead.\n" +msgstr "" + +#: builtin/notes.c:863 +msgid "General options" +msgstr "" + +#: builtin/notes.c:865 +msgid "Merge options" +msgstr "" + +#: builtin/notes.c:867 +msgid "" +"resolve notes conflicts using the given strategy (manual/ours/theirs/union/" +"cat_sort_uniq)" +msgstr "" + +#: builtin/notes.c:869 +msgid "Committing unmerged notes" +msgstr "" + +#: builtin/notes.c:871 +msgid "finalize notes merge by committing unmerged notes" +msgstr "" + +#: builtin/notes.c:873 +msgid "Aborting notes merge resolution" +msgstr "" + +#: builtin/notes.c:875 +msgid "abort notes merge" +msgstr "" + +#: builtin/notes.c:970 +#, c-format +msgid "Object %s has no note\n" +msgstr "" + +#: builtin/notes.c:982 +msgid "attempt to remove non-existent note is not an error" +msgstr "" + +#: builtin/notes.c:985 +msgid "read object names from the standard input" +msgstr "" + +#: builtin/notes.c:1066 +msgid "notes_ref" +msgstr "" + +#: builtin/notes.c:1067 +msgid "use notes from <notes_ref>" +msgstr "" + +#: builtin/notes.c:1102 builtin/remote.c:1598 +#, c-format +msgid "Unknown subcommand: %s" +msgstr "" + +#: builtin/pack-objects.c:23 +msgid "git pack-objects --stdout [options...] [< ref-list | < object-list]" +msgstr "" + +#: builtin/pack-objects.c:24 +msgid "git pack-objects [options...] base-name [< ref-list | < object-list]" +msgstr "" + +#: builtin/pack-objects.c:183 builtin/pack-objects.c:186 +#, c-format +msgid "deflate error (%d)" +msgstr "" + +#: builtin/pack-objects.c:2397 +#, c-format +msgid "unsupported index version %s" +msgstr "" + +#: builtin/pack-objects.c:2401 +#, c-format +msgid "bad index version '%s'" +msgstr "" + +#: builtin/pack-objects.c:2424 +#, c-format +msgid "option %s does not accept negative form" +msgstr "" + +#: builtin/pack-objects.c:2428 +#, c-format +msgid "unable to parse value '%s' for option %s" +msgstr "" + +#: builtin/pack-objects.c:2447 +msgid "do not show progress meter" +msgstr "" + +#: builtin/pack-objects.c:2449 +msgid "show progress meter" +msgstr "" + +#: builtin/pack-objects.c:2451 +msgid "show progress meter during object writing phase" +msgstr "" + +#: builtin/pack-objects.c:2454 +msgid "similar to --all-progress when progress meter is shown" +msgstr "" + +#: builtin/pack-objects.c:2455 +msgid "version[,offset]" +msgstr "" + +#: builtin/pack-objects.c:2456 +msgid "write the pack index file in the specified idx format version" +msgstr "" + +#: builtin/pack-objects.c:2459 +msgid "maximum size of each output pack file" +msgstr "" + +#: builtin/pack-objects.c:2461 +msgid "ignore borrowed objects from alternate object store" +msgstr "" + +#: builtin/pack-objects.c:2463 +msgid "ignore packed objects" +msgstr "" + +#: builtin/pack-objects.c:2465 +msgid "limit pack window by objects" +msgstr "" + +#: builtin/pack-objects.c:2467 +msgid "limit pack window by memory in addition to object limit" +msgstr "" + +#: builtin/pack-objects.c:2469 +msgid "maximum length of delta chain allowed in the resulting pack" +msgstr "" + +#: builtin/pack-objects.c:2471 +msgid "reuse existing deltas" +msgstr "" + +#: builtin/pack-objects.c:2473 +msgid "reuse existing objects" +msgstr "" + +#: builtin/pack-objects.c:2475 +msgid "use OFS_DELTA objects" +msgstr "" + +#: builtin/pack-objects.c:2477 +msgid "use threads when searching for best delta matches" +msgstr "" + +#: builtin/pack-objects.c:2479 +msgid "do not create an empty pack output" +msgstr "" + +#: builtin/pack-objects.c:2481 +msgid "read revision arguments from standard input" +msgstr "" + +#: builtin/pack-objects.c:2483 +msgid "limit the objects to those that are not yet packed" +msgstr "" + +#: builtin/pack-objects.c:2486 +msgid "include objects reachable from any reference" +msgstr "" + +#: builtin/pack-objects.c:2489 +msgid "include objects referred by reflog entries" +msgstr "" + +#: builtin/pack-objects.c:2492 +msgid "output pack to stdout" +msgstr "" + +#: builtin/pack-objects.c:2494 +msgid "include tag objects that refer to objects to be packed" +msgstr "" + +#: builtin/pack-objects.c:2496 +msgid "keep unreachable objects" +msgstr "" + +#: builtin/pack-objects.c:2497 parse-options.h:141 +msgid "time" +msgstr "" + +#: builtin/pack-objects.c:2498 +msgid "unpack unreachable objects newer than <time>" +msgstr "" + +#: builtin/pack-objects.c:2501 +msgid "create thin packs" +msgstr "" + +#: builtin/pack-objects.c:2503 +msgid "ignore packs that have companion .keep file" +msgstr "" + +#: builtin/pack-objects.c:2505 +msgid "pack compression level" +msgstr "" + +#: builtin/pack-objects.c:2507 +msgid "do not hide commits by grafts" +msgstr "" + +#: builtin/pack-refs.c:6 +msgid "git pack-refs [options]" +msgstr "" + +#: builtin/pack-refs.c:14 +msgid "pack everything" +msgstr "" + +#: builtin/pack-refs.c:15 +msgid "prune loose refs (default)" +msgstr "" + +#: builtin/prune-packed.c:7 +msgid "git prune-packed [-n|--dry-run] [-q|--quiet]" +msgstr "" + +#: builtin/prune.c:12 +msgid "git prune [-n] [-v] [--expire <time>] [--] [<head>...]" +msgstr "" + +#: builtin/prune.c:132 +msgid "do not remove, show only" +msgstr "" + +#: builtin/prune.c:133 +msgid "report pruned objects" +msgstr "" + +#: builtin/prune.c:136 +msgid "expire objects older than <time>" +msgstr "" + +#: builtin/push.c:14 +msgid "git push [<options>] [<repository> [<refspec>...]]" +msgstr "" + +#: builtin/push.c:45 +msgid "tag shorthand without <tag>" +msgstr "" + +#: builtin/push.c:64 +msgid "--delete only accepts plain target ref names" +msgstr "" + +#: builtin/push.c:99 +msgid "" +"\n" +"To choose either option permanently, see push.default in 'git help config'." +msgstr "" + +#: builtin/push.c:102 +#, c-format +msgid "" +"The upstream branch of your current branch does not match\n" +"the name of your current branch. To push to the upstream branch\n" +"on the remote, use\n" +"\n" +" git push %s HEAD:%s\n" +"\n" +"To push to the branch of the same name on the remote, use\n" +"\n" +" git push %s %s\n" +"%s" +msgstr "" + +#: builtin/push.c:121 +#, c-format +msgid "" +"You are not currently on a branch.\n" +"To push the history leading to the current (detached HEAD)\n" +"state now, use\n" +"\n" +" git push %s HEAD:<name-of-remote-branch>\n" +msgstr "" + +#: builtin/push.c:128 +#, c-format +msgid "" +"The current branch %s has no upstream branch.\n" +"To push the current branch and set the remote as upstream, use\n" +"\n" +" git push --set-upstream %s %s\n" +msgstr "" + +#: builtin/push.c:136 +#, c-format +msgid "The current branch %s has multiple upstream branches, refusing to push." +msgstr "" + +#: builtin/push.c:139 +#, c-format +msgid "" +"You are pushing to remote '%s', which is not the upstream of\n" +"your current branch '%s', without telling me what to push\n" +"to update which remote branch." +msgstr "" + +#: builtin/push.c:151 +msgid "" +"push.default is unset; its implicit value is changing in\n" +"Git 2.0 from 'matching' to 'simple'. To squelch this message\n" +"and maintain the current behavior after the default changes, use:\n" +"\n" +" git config --global push.default matching\n" +"\n" +"To squelch this message and adopt the new behavior now, use:\n" +"\n" +" git config --global push.default simple\n" +"\n" +"See 'git help config' and search for 'push.default' for further " +"information.\n" +"(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode\n" +"'current' instead of 'simple' if you sometimes use older versions of Git)" +msgstr "" + +#: builtin/push.c:199 +msgid "" +"You didn't specify any refspecs to push, and push.default is \"nothing\"." +msgstr "" + +#: builtin/push.c:206 +msgid "" +"Updates were rejected because the tip of your current branch is behind\n" +"its remote counterpart. Merge the remote changes (e.g. 'git pull')\n" +"before pushing again.\n" +"See the 'Note about fast-forwards' in 'git push --help' for details." +msgstr "" + +#: builtin/push.c:212 +msgid "" +"Updates were rejected because a pushed branch tip is behind its remote\n" +"counterpart. If you did not intend to push that branch, you may want to\n" +"specify branches to push or set the 'push.default' configuration variable\n" +"to 'simple', 'current' or 'upstream' to push only the current branch." +msgstr "" + +#: builtin/push.c:218 +msgid "" +"Updates were rejected because a pushed branch tip is behind its remote\n" +"counterpart. Check out this branch and merge the remote changes\n" +"(e.g. 'git pull') before pushing again.\n" +"See the 'Note about fast-forwards' in 'git push --help' for details." +msgstr "" + +#: builtin/push.c:224 +msgid "" +"Updates were rejected because the remote contains work that you do\n" +"not have locally. This is usually caused by another repository pushing\n" +"to the same ref. You may want to first merge the remote changes (e.g.,\n" +"'git pull') before pushing again.\n" +"See the 'Note about fast-forwards' in 'git push --help' for details." +msgstr "" + +#: builtin/push.c:231 +msgid "Updates were rejected because the tag already exists in the remote." +msgstr "" + +#: builtin/push.c:234 +msgid "" +"You cannot update a remote ref that points at a non-commit object,\n" +"or update a remote ref to make it point at a non-commit object,\n" +"without using the '--force' option.\n" +msgstr "" + +#: builtin/push.c:294 +#, c-format +msgid "Pushing to %s\n" +msgstr "" + +#: builtin/push.c:298 +#, c-format +msgid "failed to push some refs to '%s'" +msgstr "" + +#: builtin/push.c:331 +#, c-format +msgid "bad repository '%s'" +msgstr "" + +#: builtin/push.c:332 +msgid "" +"No configured push destination.\n" +"Either specify the URL from the command-line or configure a remote " +"repository using\n" +"\n" +" git remote add <name> <url>\n" +"\n" +"and then push using the remote name\n" +"\n" +" git push <name>\n" +msgstr "" + +#: builtin/push.c:347 +msgid "--all and --tags are incompatible" +msgstr "" + +#: builtin/push.c:348 +msgid "--all can't be combined with refspecs" +msgstr "" + +#: builtin/push.c:353 +msgid "--mirror and --tags are incompatible" +msgstr "" + +#: builtin/push.c:354 +msgid "--mirror can't be combined with refspecs" +msgstr "" + +#: builtin/push.c:359 +msgid "--all and --mirror are incompatible" +msgstr "" + +#: builtin/push.c:419 +msgid "repository" +msgstr "" + +#: builtin/push.c:420 +msgid "push all refs" +msgstr "" + +#: builtin/push.c:421 +msgid "mirror all refs" +msgstr "" + +#: builtin/push.c:423 +msgid "delete refs" +msgstr "" + +#: builtin/push.c:424 +msgid "push tags (can't be used with --all or --mirror)" +msgstr "" + +#: builtin/push.c:427 +msgid "force updates" +msgstr "" + +#: builtin/push.c:428 +msgid "check" +msgstr "" + +#: builtin/push.c:429 +msgid "control recursive pushing of submodules" +msgstr "" + +#: builtin/push.c:431 +msgid "use thin pack" +msgstr "" + +#: builtin/push.c:432 builtin/push.c:433 +msgid "receive pack program" +msgstr "" + +#: builtin/push.c:434 +msgid "set upstream for git pull/status" +msgstr "" + +#: builtin/push.c:437 +msgid "prune locally removed refs" +msgstr "" + +#: builtin/push.c:439 +msgid "bypass pre-push hook" +msgstr "" + +#: builtin/push.c:440 +msgid "push missing but relevant tags" +msgstr "" + +#: builtin/push.c:450 +msgid "--delete is incompatible with --all, --mirror and --tags" +msgstr "" + +#: builtin/push.c:452 +msgid "--delete doesn't make sense without any refs" +msgstr "" + +#: builtin/read-tree.c:36 +msgid "" +"git read-tree [[-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>] " +"[-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--" +"index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])" +msgstr "" + +#: builtin/read-tree.c:108 +msgid "write resulting index to <file>" +msgstr "" + +#: builtin/read-tree.c:111 +msgid "only empty the index" +msgstr "" + +#: builtin/read-tree.c:113 +msgid "Merging" +msgstr "" + +#: builtin/read-tree.c:115 +msgid "perform a merge in addition to a read" +msgstr "" + +#: builtin/read-tree.c:117 +msgid "3-way merge if no file level merging required" +msgstr "" + +#: builtin/read-tree.c:119 +msgid "3-way merge in presence of adds and removes" +msgstr "" + +#: builtin/read-tree.c:121 +msgid "same as -m, but discard unmerged entries" +msgstr "" + +#: builtin/read-tree.c:122 +msgid "<subdirectory>/" +msgstr "" + +#: builtin/read-tree.c:123 +msgid "read the tree into the index under <subdirectory>/" +msgstr "" + +#: builtin/read-tree.c:126 +msgid "update working tree with merge result" +msgstr "" + +#: builtin/read-tree.c:128 +msgid "gitignore" +msgstr "" + +#: builtin/read-tree.c:129 +msgid "allow explicitly ignored files to be overwritten" +msgstr "" + +#: builtin/read-tree.c:132 +msgid "don't check the working tree after merging" +msgstr "" + +#: builtin/read-tree.c:133 +msgid "don't update the index or the work tree" +msgstr "" + +#: builtin/read-tree.c:135 +msgid "skip applying sparse checkout filter" +msgstr "" + +#: builtin/read-tree.c:137 +msgid "debug unpack-trees" +msgstr "" + +#: builtin/remote.c:11 +msgid "git remote [-v | --verbose]" +msgstr "git remote [-v | --verbose]" + +#: builtin/remote.c:12 +msgid "" +"git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--" +"mirror=<fetch|push>] <name> <url>" +msgstr "git remote add [-t <branche>] [-m <maîtresse>] [-f] [--tags|--no-tags] [--mirror=<fetch|push>] <nom> <URL>" + +#: builtin/remote.c:13 builtin/remote.c:32 +msgid "git remote rename <old> <new>" +msgstr "git remote rename <ancienne> <nouvelle>" + +#: builtin/remote.c:14 builtin/remote.c:37 +msgid "git remote remove <name>" +msgstr "git remote remove <nom>" + +#: builtin/remote.c:15 builtin/remote.c:42 +msgid "git remote set-head <name> (-a | -d | <branch>)" +msgstr "git remote set-head <nom> (-a | -d | <branche>)" + +#: builtin/remote.c:16 +msgid "git remote [-v | --verbose] show [-n] <name>" +msgstr "git remote [-v | --verbose] show [-n] <nom>" + +#: builtin/remote.c:17 +msgid "git remote prune [-n | --dry-run] <name>" +msgstr "git remote prune [-n | --dry-run] <nom>" + +#: builtin/remote.c:18 +msgid "" +"git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]" +msgstr "git remote [-v | --verbose] update [-p | --prune] [(<groupe> | <distante>)...]" + +#: builtin/remote.c:19 +msgid "git remote set-branches [--add] <name> <branch>..." +msgstr "git remote set-branches [--add] <nom> <branche>..." + +#: builtin/remote.c:20 builtin/remote.c:68 +msgid "git remote set-url [--push] <name> <newurl> [<oldurl>]" +msgstr "git remote set-url [--push] <nom> <nouvelle-URL> [<ancienne-URL>]" + +#: builtin/remote.c:21 builtin/remote.c:69 +msgid "git remote set-url --add <name> <newurl>" +msgstr "git remote set-url --add <nom> <nouvelle-URL>" + +#: builtin/remote.c:22 builtin/remote.c:70 +msgid "git remote set-url --delete <name> <url>" +msgstr "git remote set-url --delete <nom> <URL>" + +#: builtin/remote.c:27 +msgid "git remote add [<options>] <name> <url>" +msgstr "git remote add [<options>] <nom> <URL>" + +#: builtin/remote.c:47 +msgid "git remote set-branches <name> <branch>..." +msgstr "git remote set-branches <nom> <branche>..." + +#: builtin/remote.c:48 +msgid "git remote set-branches --add <name> <branch>..." +msgstr "git remote set-branches --add <nom> <branche>..." + +#: builtin/remote.c:53 +msgid "git remote show [<options>] <name>" +msgstr "git remote show [<options>] <nom>" + +#: builtin/remote.c:58 +msgid "git remote prune [<options>] <name>" +msgstr "git remote prune [<options>] <nom>" + +#: builtin/remote.c:63 +msgid "git remote update [<options>] [<group> | <remote>]..." +msgstr "git remote update [<options>] [<groupe> | <distante>]..." + +#: builtin/remote.c:98 +#, c-format +msgid "Updating %s" +msgstr "Mise à jour de %s" + +#: builtin/remote.c:130 +msgid "" +"--mirror is dangerous and deprecated; please\n" +"\t use --mirror=fetch or --mirror=push instead" +msgstr "" +"--mirror est dangereux et obsolète ; merci\n" +"\t d'utiliser --mirror=fetch ou --mirror=push à la place" + +#: builtin/remote.c:147 +#, c-format +msgid "unknown mirror argument: %s" +msgstr "argument miroir inconnu : %s" + +#: builtin/remote.c:163 +msgid "fetch the remote branches" +msgstr "rapatrier les branches distantes" + +#: builtin/remote.c:165 +msgid "import all tags and associated objects when fetching" +msgstr "importer toutes les étiquettes et les objets associés lors du rapatriement" + +#: builtin/remote.c:168 +msgid "or do not fetch any tag at all (--no-tags)" +msgstr "ou ne rapatrier aucune étiquette (--no-tags)" + +#: builtin/remote.c:170 +msgid "branch(es) to track" +msgstr "branche(s) à suivre" + +#: builtin/remote.c:171 +msgid "master branch" +msgstr "branche maîtresse" + +#: builtin/remote.c:172 +msgid "push|fetch" +msgstr "push|fetch" + +#: builtin/remote.c:173 +msgid "set up remote as a mirror to push to or fetch from" +msgstr "paramétrer la distante comme miroir pour pousser ou pour rapatrier depuis" + +#: builtin/remote.c:185 +msgid "specifying a master branch makes no sense with --mirror" +msgstr "spécifier une branche maîtresse n'a pas de sens avec --mirror" + +#: builtin/remote.c:187 +msgid "specifying branches to track makes sense only with fetch mirrors" +msgstr "spécifier les branches à suivre n'a de sens qu'avec des miroirs de rapatriement" + +#: builtin/remote.c:195 builtin/remote.c:646 +#, c-format +msgid "remote %s already exists." +msgstr "la distante %s existe déjà ." + +#: builtin/remote.c:199 builtin/remote.c:650 +#, c-format +msgid "'%s' is not a valid remote name" +msgstr "'%s' n'est pas un nom valide de distante" + +#: builtin/remote.c:243 +#, c-format +msgid "Could not setup master '%s'" +msgstr "Impossible de paramétrer la maîtresse '%s'" + +#: builtin/remote.c:299 +#, c-format +msgid "more than one %s" +msgstr "plus d'un %s" + +#: builtin/remote.c:339 +#, c-format +msgid "Could not get fetch map for refspec %s" +msgstr "" + +#: builtin/remote.c:440 builtin/remote.c:448 +msgid "(matching)" +msgstr "(correspond)" + +#: builtin/remote.c:452 +msgid "(delete)" +msgstr "(supprimer)" + +#: builtin/remote.c:595 builtin/remote.c:601 builtin/remote.c:607 +#, c-format +msgid "Could not append '%s' to '%s'" +msgstr "Impossible d'ajouter '%s' à '%s'" + +#: builtin/remote.c:639 builtin/remote.c:792 builtin/remote.c:890 +#, c-format +msgid "No such remote: %s" +msgstr "Distante inconnue : %s" + +#: builtin/remote.c:656 +#, c-format +msgid "Could not rename config section '%s' to '%s'" +msgstr "Impossible de renommer la section de configuration '%s' en '%s'" + +#: builtin/remote.c:662 builtin/remote.c:799 +#, c-format +msgid "Could not remove config section '%s'" +msgstr "Impossible de supprimer la section de configuration '%s'" + +#: builtin/remote.c:677 +#, c-format +msgid "" +"Not updating non-default fetch refspec\n" +"\t%s\n" +"\tPlease update the configuration manually if necessary." +msgstr "" +"Pas de mise à jour du refspec de rapatriement qui n'est pas par défaut\n" +"\t%s\n" +"\tMerci de mettre à jour la configuration si nécessaire." + +#: builtin/remote.c:683 +#, c-format +msgid "Could not append '%s'" +msgstr "Impossible d'ajouter '%s'" + +#: builtin/remote.c:694 +#, c-format +msgid "Could not set '%s'" +msgstr "Impossible de définir '%s'" + +#: builtin/remote.c:716 +#, c-format +msgid "deleting '%s' failed" +msgstr "échec de suppression de '%s'" + +#: builtin/remote.c:750 +#, c-format +msgid "creating '%s' failed" +msgstr "échec de création de '%s'" + +#: builtin/remote.c:764 +#, c-format +msgid "Could not remove branch %s" +msgstr "Impossible de supprimer la branche %s" + +#: builtin/remote.c:834 +msgid "" +"Note: A branch outside the refs/remotes/ hierarchy was not removed;\n" +"to delete it, use:" +msgid_plural "" +"Note: Some branches outside the refs/remotes/ hierarchy were not removed;\n" +"to delete them, use:" +msgstr[0] "" +"Note : Une branche en dehors de refs/remotes/ n'a pas été supprimée ;\n" +"pour la supprimer, utilisez :" +msgstr[1] "" +"Note : Plusieurs branches en dehors de refs/remotes/ n'ont pas été supprimées ;\n" +"pour les supprimer, utilisez :" + +#: builtin/remote.c:943 +#, c-format +msgid " new (next fetch will store in remotes/%s)" +msgstr " nouveau (le prochain rapatriement (fetch) stockera dans remotes/%s)" + +#: builtin/remote.c:946 +msgid " tracked" +msgstr " suivi" + +#: builtin/remote.c:948 +msgid " stale (use 'git remote prune' to remove)" +msgstr " dépassé (utilisez 'git remote prune' pour supprimer)" + +#: builtin/remote.c:950 +msgid " ???" +msgstr " ???" + +#: builtin/remote.c:991 +#, c-format +msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch" +msgstr "branch.%s.merge invalide ; ne peut pas rebaser sur plus d'une branche" + +#: builtin/remote.c:998 +#, c-format +msgid "rebases onto remote %s" +msgstr "rebase sur la distante %s" + +#: builtin/remote.c:1001 +#, c-format +msgid " merges with remote %s" +msgstr " fusionne avec la distante %s" + +#: builtin/remote.c:1002 +msgid " and with remote" +msgstr " et avec la distante" + +#: builtin/remote.c:1004 +#, c-format +msgid "merges with remote %s" +msgstr "fusionne avec la distante %s" + +#: builtin/remote.c:1005 +msgid " and with remote" +msgstr " et avec la distante" + +#: builtin/remote.c:1051 +msgid "create" +msgstr "créer" + +#: builtin/remote.c:1054 +msgid "delete" +msgstr "supprimer" + +#: builtin/remote.c:1058 +msgid "up to date" +msgstr "à jour" + +#: builtin/remote.c:1061 +msgid "fast-forwardable" +msgstr "peut être mis à jour en avance rapide" + +#: builtin/remote.c:1064 +msgid "local out of date" +msgstr "le local n'est pas à jour" + +#: builtin/remote.c:1071 +#, c-format +msgid " %-*s forces to %-*s (%s)" +msgstr " %-*s force vers %-*s (%s)" + +#: builtin/remote.c:1074 +#, c-format +msgid " %-*s pushes to %-*s (%s)" +msgstr " %-*s pousse vers %-*s (%s)" + +#: builtin/remote.c:1078 +#, c-format +msgid " %-*s forces to %s" +msgstr " %-*s force vers %s" + +#: builtin/remote.c:1081 +#, c-format +msgid " %-*s pushes to %s" +msgstr " %-*s pousse vers %s" + +#: builtin/remote.c:1091 +msgid "do not query remotes" +msgstr "ne pas interroger les distantes" + +#: builtin/remote.c:1118 +#, c-format +msgid "* remote %s" +msgstr "* distante %s" + +#: builtin/remote.c:1119 +#, c-format +msgid " Fetch URL: %s" +msgstr " URL de rapatriement : %s" + +#: builtin/remote.c:1120 builtin/remote.c:1285 +msgid "(no URL)" +msgstr "(pas d'URL)" + +#: builtin/remote.c:1129 builtin/remote.c:1131 +#, c-format +msgid " Push URL: %s" +msgstr " URL push : %s" + +#: builtin/remote.c:1133 builtin/remote.c:1135 builtin/remote.c:1137 +#, c-format +msgid " HEAD branch: %s" +msgstr " Branche HEAD : %s" + +#: builtin/remote.c:1139 +#, c-format +msgid "" +" HEAD branch (remote HEAD is ambiguous, may be one of the following):\n" +msgstr " Branche HEAD (la HEAD distante est ambiguë, peut être l'une des suivantes) :\n" + +#: builtin/remote.c:1151 +#, c-format +msgid " Remote branch:%s" +msgid_plural " Remote branches:%s" +msgstr[0] " Branche distante :%s" +msgstr[1] " Branches distantes :%s" + +#: builtin/remote.c:1154 builtin/remote.c:1181 +msgid " (status not queried)" +msgstr " (statut non demandé)" + +#: builtin/remote.c:1163 +msgid " Local branch configured for 'git pull':" +msgid_plural " Local branches configured for 'git pull':" +msgstr[0] " Branche locale configurée pour 'git pull' :" +msgstr[1] " Branches locales configurées pour 'git pull' :" + +#: builtin/remote.c:1171 +msgid " Local refs will be mirrored by 'git push'" +msgstr " Les références locales seront reflétées par 'git push'" + +#: builtin/remote.c:1178 +#, c-format +msgid " Local ref configured for 'git push'%s:" +msgid_plural " Local refs configured for 'git push'%s:" +msgstr[0] " Référence locale configurée pour 'git push'%s :" +msgstr[1] " Références locales configurées pour 'git push'%s :" + +#: builtin/remote.c:1199 +msgid "set refs/remotes/<name>/HEAD according to remote" +msgstr "définir refs/remotes/<nom>/HEAD selon la distante" + +#: builtin/remote.c:1201 +msgid "delete refs/remotes/<name>/HEAD" +msgstr "supprimer refs/remotes/<nom>/HEAD" + +#: builtin/remote.c:1216 +msgid "Cannot determine remote HEAD" +msgstr "Impossible de déterminer la HEAD distante" + +#: builtin/remote.c:1218 +msgid "Multiple remote HEAD branches. Please choose one explicitly with:" +msgstr "Il y a de multiples branches HEAD distantes. Merci d'en choisir une explicitement avec :" + +#: builtin/remote.c:1228 +#, c-format +msgid "Could not delete %s" +msgstr "Impossible de supprimer %s" + +#: builtin/remote.c:1236 +#, c-format +msgid "Not a valid ref: %s" +msgstr "Référence non valide : %s" + +#: builtin/remote.c:1238 +#, c-format +msgid "Could not setup %s" +msgstr "Impossible de paramétrer %s" + +#: builtin/remote.c:1274 +#, c-format +msgid " %s will become dangling!" +msgstr " %s deviendra en suspens !" + +#: builtin/remote.c:1275 +#, c-format +msgid " %s has become dangling!" +msgstr " %s est devenu en suspens !" + +#: builtin/remote.c:1281 +#, c-format +msgid "Pruning %s" +msgstr "Élagage de %s" + +#: builtin/remote.c:1282 +#, c-format +msgid "URL: %s" +msgstr "URL : %s" + +#: builtin/remote.c:1295 +#, c-format +msgid " * [would prune] %s" +msgstr " * [serait élagué] %s" + +#: builtin/remote.c:1298 +#, c-format +msgid " * [pruned] %s" +msgstr " * [élagué] %s" + +#: builtin/remote.c:1321 +msgid "prune remotes after fetching" +msgstr "élaguer les distants après le rapatriement" + +#: builtin/remote.c:1387 builtin/remote.c:1461 +#, c-format +msgid "No such remote '%s'" +msgstr "Pas de serveur remote '%s'" + +#: builtin/remote.c:1407 +msgid "add branch" +msgstr "ajouter une branche" + +#: builtin/remote.c:1414 +msgid "no remote specified" +msgstr "pas de serveur distant spécifié" + +#: builtin/remote.c:1436 +msgid "manipulate push URLs" +msgstr "manipuler les URLs push" + +#: builtin/remote.c:1438 +msgid "add URL" +msgstr "ajouter une URL" + +#: builtin/remote.c:1440 +msgid "delete URLs" +msgstr "supprimer des URLs" + +#: builtin/remote.c:1447 +msgid "--add --delete doesn't make sense" +msgstr "--add --delete n'a aucun sens" + +#: builtin/remote.c:1487 +#, c-format +msgid "Invalid old URL pattern: %s" +msgstr "Motif d'URL ancien invalide : %s" + +#: builtin/remote.c:1495 +#, c-format +msgid "No such URL found: %s" +msgstr "Pas d'URL trouvée : %s" + +#: builtin/remote.c:1497 +msgid "Will not delete all non-push URLs" +msgstr "" + +#: builtin/remote.c:1569 +msgid "be verbose; must be placed before a subcommand" +msgstr "être verbeux : doit être placé avant une sous-commande" + +#: builtin/replace.c:17 +msgid "git replace [-f] <object> <replacement>" +msgstr "git replace [-f] <objet> <remplacement>" + +#: builtin/replace.c:18 +msgid "git replace -d <object>..." +msgstr "git replace -d <objet>..." + +#: builtin/replace.c:19 +msgid "git replace -l [<pattern>]" +msgstr "git replace -l [<motif>]" + +#: builtin/replace.c:121 +msgid "list replace refs" +msgstr "afficher les références de remplacement" + +#: builtin/replace.c:122 +msgid "delete replace refs" +msgstr "supprimer les références de remplacement" + +#: builtin/replace.c:123 +msgid "replace the ref if it exists" +msgstr "remplacer la référence si elle existe" + +#: builtin/rerere.c:11 +msgid "git rerere [clear | forget path... | status | remaining | diff | gc]" +msgstr "git rerere [clear | forget chemin... | status | remaining | diff | gc]" + +#: builtin/rerere.c:56 +msgid "register clean resolutions in index" +msgstr "enregistrer des résolutions propres dans l'index" + +#: builtin/reset.c:25 +msgid "" +"git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]" +msgstr "git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]" + +#: builtin/reset.c:26 +msgid "git reset [-q] <tree-ish> [--] <paths>..." +msgstr "git reset [-q] <arbre> [--] <chemins>..." + +#: builtin/reset.c:27 +msgid "git reset --patch [<tree-ish>] [--] [<paths>...]" +msgstr "git reset --patch [<arbre>] [--] [<chemins>...]" + +#: builtin/reset.c:33 +msgid "mixed" +msgstr "mixed" + +#: builtin/reset.c:33 +msgid "soft" +msgstr "soft" + +#: builtin/reset.c:33 +msgid "hard" +msgstr "hard" + +#: builtin/reset.c:33 +msgid "merge" +msgstr "merge" + +#: builtin/reset.c:33 +msgid "keep" +msgstr "keep" + +#: builtin/reset.c:73 +msgid "You do not have a valid HEAD." +msgstr "Vous n'avez pas une HEAD valide." + +#: builtin/reset.c:75 +msgid "Failed to find tree of HEAD." +msgstr "Impossible de trouver l'arbre pour HEAD." + +#: builtin/reset.c:81 +#, c-format +msgid "Failed to find tree of %s." +msgstr "Impossible de trouver l'arbre pour %s." + +#: builtin/reset.c:98 +#, c-format +msgid "HEAD is now at %s" +msgstr "HEAD est maintenant à %s" + +#: builtin/reset.c:169 +#, c-format +msgid "Cannot do a %s reset in the middle of a merge." +msgstr "Impossible de faire un \"reset %s\" au milieu d'une fusion." + +#: builtin/reset.c:248 +msgid "be quiet, only report errors" +msgstr "être silencieux, afficher seulement les erreurs" + +#: builtin/reset.c:250 +msgid "reset HEAD and index" +msgstr "réinitialiser HEAD et l'index" + +#: builtin/reset.c:251 +msgid "reset only HEAD" +msgstr "réinitialiser seulement HEAD" + +#: builtin/reset.c:253 builtin/reset.c:255 +msgid "reset HEAD, index and working tree" +msgstr "réinitialiser HEAD, l'index et la copie de travail" + +#: builtin/reset.c:257 +msgid "reset HEAD but keep local changes" +msgstr "réinitialiser HEAD mais garder les changements locaux" + +#: builtin/reset.c:275 +#, c-format +msgid "Failed to resolve '%s' as a valid revision." +msgstr "Échec de résolution de '%s' comme une révision valide." + +#: builtin/reset.c:278 builtin/reset.c:286 +#, c-format +msgid "Could not parse object '%s'." +msgstr "Impossible d'analyser l'objet '%s'." + +#: builtin/reset.c:283 +#, c-format +msgid "Failed to resolve '%s' as a valid tree." +msgstr "Échec de résolution de '%s' comme un arbre valide." + +#: builtin/reset.c:292 +msgid "--patch is incompatible with --{hard,mixed,soft}" +msgstr "--patch est incompatible avec --{hard,mixed,soft}" + +#: builtin/reset.c:301 +msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead." +msgstr "--mixed avec des chemins est obsolète ; utilisez 'git reset -- <paths>' à la place." + +#: builtin/reset.c:303 +#, c-format +msgid "Cannot do %s reset with paths." +msgstr "Impossible de faire un \"%s reset\" avec des chemins." + +#: builtin/reset.c:313 +#, c-format +msgid "%s reset is not allowed in a bare repository" +msgstr "Le \"%s reset\" n'est pas permis dans un dépôt nu" + +#: builtin/reset.c:333 +#, c-format +msgid "Could not reset index file to revision '%s'." +msgstr "Impossible de réinitialiser le fichier d'index à la révision '%s'." + +#: builtin/reset.c:339 +msgid "Unstaged changes after reset:" +msgstr "Modifications non indexées après reset :" + +#: builtin/reset.c:344 +msgid "Could not write new index file." +msgstr "Impossible d'écrire le nouveau fichier d'index." + +#: builtin/rev-parse.c:339 +msgid "git rev-parse --parseopt [options] -- [<args>...]" +msgstr "git rev-parse --parseopt [options] -- [<arguments>...]" + +#: builtin/rev-parse.c:344 +msgid "keep the `--` passed as an arg" +msgstr "garder le `--` passé en argument" + +#: builtin/rev-parse.c:346 +msgid "stop parsing after the first non-option argument" +msgstr "arrêt de l'analyse après le premier argument qui n'est pas une option" + +#: builtin/rev-parse.c:464 +msgid "" +"git rev-parse --parseopt [options] -- [<args>...]\n" +" or: git rev-parse --sq-quote [<arg>...]\n" +" or: git rev-parse [options] [<arg>...]\n" +"\n" +"Run \"git rev-parse --parseopt -h\" for more information on the first usage." +msgstr "" +"git rev-parse --parseopt [options] -- [<arguments>...]\n" +" ou : git rev-parse --sq-quote [<argument>...]\n" +" ou : git rev-parse [options] [<argument>...]\n" +"\n" +"Lancez \"git rev-parse --parseopt -h\" pour plus d'information sur l'utilisation principale." + +#: builtin/revert.c:22 +msgid "git revert [options] <commit-ish>..." +msgstr "git revert [options] <commit>..." + +#: builtin/revert.c:23 +msgid "git revert <subcommand>" +msgstr "git revert <sous-commande>" + +#: builtin/revert.c:28 +msgid "git cherry-pick [options] <commit-ish>..." +msgstr "git cherry-pick [options] <commit>..." + +#: builtin/revert.c:29 +msgid "git cherry-pick <subcommand>" +msgstr "git cherry-pick <sous-commande>" + +#: builtin/revert.c:70 builtin/revert.c:92 +#, c-format +msgid "%s: %s cannot be used with %s" +msgstr "%s : %s ne peut pas être utilisé avec %s" + +#: builtin/revert.c:103 +msgid "end revert or cherry-pick sequence" +msgstr "mettre fin au retour ou picorage" + +#: builtin/revert.c:104 +msgid "resume revert or cherry-pick sequence" +msgstr "reprendre le retour ou picorage" + +#: builtin/revert.c:105 +msgid "cancel revert or cherry-pick sequence" +msgstr "annuler le retour ou picorage" + +#: builtin/revert.c:106 +msgid "don't automatically commit" +msgstr "ne pas valider automatiquement" + +#: builtin/revert.c:107 +msgid "edit the commit message" +msgstr "éditer le message de validation" + +#: builtin/revert.c:110 +msgid "parent number" +msgstr "numéro de parent" + +#: builtin/revert.c:112 +msgid "merge strategy" +msgstr "stratégie de fusion" + +#: builtin/revert.c:113 +msgid "option" +msgstr "option" + +#: builtin/revert.c:114 +msgid "option for merge strategy" +msgstr "option pour la stratégie de fusion" + +#: builtin/revert.c:125 +msgid "append commit name" +msgstr "ajouter le nom de validation" + +#: builtin/revert.c:126 +msgid "allow fast-forward" +msgstr "autoriser l'avance rapide" + +#: builtin/revert.c:127 +msgid "preserve initially empty commits" +msgstr "préserver les validations vides initialement" + +#: builtin/revert.c:128 +msgid "allow commits with empty messages" +msgstr "autoriser les validations avec des messages vides" + +#: builtin/revert.c:129 +msgid "keep redundant, empty commits" +msgstr "garder les validations redondantes, vides" + +#: builtin/revert.c:133 +msgid "program error" +msgstr "erreur du programme" + +#: builtin/revert.c:223 +msgid "revert failed" +msgstr "revert a échoué" + +#: builtin/revert.c:238 +msgid "cherry-pick failed" +msgstr "le picorage a échoué" + +#: builtin/rm.c:15 +msgid "git rm [options] [--] <file>..." +msgstr "git rm [options] [--] <fichier>..." + +#: builtin/rm.c:64 builtin/rm.c:186 +#, c-format +msgid "" +"submodule '%s' (or one of its nested submodules) uses a .git directory\n" +"(use 'rm -rf' if you really want to remove it including all of its history)" +msgstr "" +"le sous-module '%s' (ou un des sous-modules imbriqués) utilise un répertoire .git\n" +"(utilisez 'rm -rf' si vous souhaitez vraiment le supprimer avec tout son historique)" + +#: builtin/rm.c:174 +#, c-format +msgid "" +"'%s' has staged content different from both the file and the HEAD\n" +"(use -f to force removal)" +msgstr "" +"'%s' a du contenu indexé différent du fichier et de HEAD\n" +"(utilisez -f pour forcer la suppression)" + +#: builtin/rm.c:180 +#, c-format +msgid "" +"'%s' has changes staged in the index\n" +"(use --cached to keep the file, or -f to force removal)" +msgstr "" +"'%s' a des changements dans l'index\n" +"(utilisez --cached pour garder le fichier, ou -f pour forcer la suppression)" + +#: builtin/rm.c:191 +#, c-format +msgid "" +"'%s' has local modifications\n" +"(use --cached to keep the file, or -f to force removal)" +msgstr "" +"'%s' a des modifications locales\n" +"(utilisez --cached pour garder le fichier, ou -f pour forcer la suppression)" + +#: builtin/rm.c:207 +msgid "do not list removed files" +msgstr "ne pas afficher les fichiers supprimés" + +#: builtin/rm.c:208 +msgid "only remove from the index" +msgstr "supprimer seulement de l'index" + +#: builtin/rm.c:209 +msgid "override the up-to-date check" +msgstr "outrepasser la vérification des fichiers à jour" + +#: builtin/rm.c:210 +msgid "allow recursive removal" +msgstr "autoriser la suppression récursive" + +#: builtin/rm.c:212 +msgid "exit with a zero status even if nothing matched" +msgstr "sortir avec un statut zéro même si rien ne correspondait" + +#: builtin/rm.c:283 +#, c-format +msgid "not removing '%s' recursively without -r" +msgstr "pas de suppression récursive de '%s' sans -r" + +#: builtin/rm.c:322 +#, c-format +msgid "git rm: unable to remove %s" +msgstr "git rm : impossible de supprimer %s" + +#: builtin/shortlog.c:13 +msgid "git shortlog [<options>] [<revision range>] [[--] [<path>...]]" +msgstr "git shortlog [<options>] [<intervalle révisions>] [[--] [<chemin>...]]" + +#: builtin/shortlog.c:131 +#, c-format +msgid "Missing author: %s" +msgstr "Auteur manquant : %s" + +#: builtin/shortlog.c:227 +msgid "sort output according to the number of commits per author" +msgstr "trier la sortie sur le nombre de validations par auteur" + +#: builtin/shortlog.c:229 +msgid "Suppress commit descriptions, only provides commit count" +msgstr "Supprimer les descriptions de validation, fournit seulement le nombre de validations" + +#: builtin/shortlog.c:231 +msgid "Show the email address of each author" +msgstr "Afficher l'adresse e-mail de chaque auteur" + +#: builtin/shortlog.c:232 +msgid "w[,i1[,i2]]" +msgstr "w[,i1[,i2]]" + +#: builtin/shortlog.c:233 +msgid "Linewrap output" +msgstr "Couper les lignes" + +#: builtin/show-branch.c:9 +msgid "" +"git show-branch [-a|--all] [-r|--remotes] [--topo-order | --date-order] [--" +"current] [--color[=<when>] | --no-color] [--sparse] [--more=<n> | --list | --" +"independent | --merge-base] [--no-name | --sha1-name] [--topics] [(<rev> | " +"<glob>)...]" +msgstr "git show-branch [-a|--all] [-r|--remotes] [--topo-order | --date-order] [--current] [--color[=<quand>] | --no-color] [--sparse] [--more=<n> | --list | --independent | --merge-base] [--no-name | --sha1-name] [--topics] [(<révision> | <glob>)...]" + +#: builtin/show-branch.c:10 +msgid "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]" +msgstr "git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<référence>]" + +#: builtin/show-branch.c:650 +msgid "show remote-tracking and local branches" +msgstr "afficher les branches de suivi distantes et les branches locales" + +#: builtin/show-branch.c:652 +msgid "show remote-tracking branches" +msgstr "afficher les branches de suivi distantes" + +#: builtin/show-branch.c:654 +msgid "color '*!+-' corresponding to the branch" +msgstr "couleur '*!+-' correspondant à la branche" + +#: builtin/show-branch.c:656 +msgid "show <n> more commits after the common ancestor" +msgstr "afficher <n> validations de plus après l'ancêtre commun" + +#: builtin/show-branch.c:658 +msgid "synonym to more=-1" +msgstr "synonyme de more=-1" + +#: builtin/show-branch.c:659 +msgid "suppress naming strings" +msgstr "" + +#: builtin/show-branch.c:661 +msgid "include the current branch" +msgstr "inclure la branche courante" + +#: builtin/show-branch.c:663 +msgid "name commits with their object names" +msgstr "nommer les validations avec leurs noms d'objet" + +#: builtin/show-branch.c:665 +msgid "show possible merge bases" +msgstr "afficher les bases possibles de fusion" + +#: builtin/show-branch.c:667 +msgid "show refs unreachable from any other ref" +msgstr "afficher les références non accessibles depuis toute autre référence" + +#: builtin/show-branch.c:669 +msgid "show commits in topological order" +msgstr "afficher les validations dans l'ordre topologique" + +#: builtin/show-branch.c:671 +msgid "show only commits not on the first branch" +msgstr "afficher seulement les validations qui ne sont pas sur la première branche" + +#: builtin/show-branch.c:673 +msgid "show merges reachable from only one tip" +msgstr "afficher les fusions accessibles depuis une seule pointe" + +#: builtin/show-branch.c:675 +msgid "show commits where no parent comes before its children" +msgstr "afficher les validations où aucun parent ne vient avant ses enfants" + +#: builtin/show-branch.c:677 +msgid "<n>[,<base>]" +msgstr "<n>[,<base>]" + +#: builtin/show-branch.c:678 +msgid "show <n> most recent ref-log entries starting at base" +msgstr "afficher les <n> plus récentes entrées de ref-log en commençant à la base" + +#: builtin/show-ref.c:10 +msgid "" +"git show-ref [-q|--quiet] [--verify] [--head] [-d|--dereference] [-s|--" +"hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [pattern*] " +msgstr "git show-ref [-q|--quiet] [--verify] [--head] [-d|--dereference] [-s|--hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [motif*] " + +#: builtin/show-ref.c:11 +msgid "git show-ref --exclude-existing[=pattern] < ref-list" +msgstr "git show-ref --exclude-existing[=motif] < liste-références" + +#: builtin/show-ref.c:165 +msgid "only show tags (can be combined with heads)" +msgstr "afficher seulement les étiquettes (peut être combiné avec des têtes)" + +#: builtin/show-ref.c:166 +msgid "only show heads (can be combined with tags)" +msgstr "afficher seulement les têtes (peut être combiné avec des étiquettes)" + +#: builtin/show-ref.c:167 +msgid "stricter reference checking, requires exact ref path" +msgstr "vérification de référence plus stricte, requiert un chemin de référence exact" + +#: builtin/show-ref.c:170 builtin/show-ref.c:172 +msgid "show the HEAD reference" +msgstr "afficher la référence HEAD" + +#: builtin/show-ref.c:174 +msgid "dereference tags into object IDs" +msgstr "déréférencer les étiquettes en IDs d'objet" + +#: builtin/show-ref.c:176 +msgid "only show SHA1 hash using <n> digits" +msgstr "afficher seulement le hachage SHA1 en utilisant <n> chiffres" + +#: builtin/show-ref.c:180 +msgid "do not print results to stdout (useful with --verify)" +msgstr "ne pas afficher les résultats sur la sortie standard (pratique avec --verify)" + +#: builtin/show-ref.c:182 +msgid "show refs from stdin that aren't in local repository" +msgstr "afficher les références de l'entrée standard qui ne sont pas dans le dépôt local" + +#: builtin/symbolic-ref.c:7 +msgid "git symbolic-ref [options] name [ref]" +msgstr "git symbolic-ref [options] nom [référence]" + +#: builtin/symbolic-ref.c:8 +msgid "git symbolic-ref -d [-q] name" +msgstr "git symbolic-ref -d [-q] nom" + +#: builtin/symbolic-ref.c:40 +msgid "suppress error message for non-symbolic (detached) refs" +msgstr "supprimer le message d'erreur pour une référence non symbolique (détachée)" + +#: builtin/symbolic-ref.c:41 +msgid "delete symbolic ref" +msgstr "supprimer la référence symbolique" + +#: builtin/symbolic-ref.c:42 +msgid "shorten ref output" +msgstr "raccourcir l'affichage de la référence" + +#: builtin/symbolic-ref.c:43 builtin/update-ref.c:18 +msgid "reason" +msgstr "raison" + +#: builtin/symbolic-ref.c:43 builtin/update-ref.c:18 +msgid "reason of the update" +msgstr "raison de la mise à jour" + +#: builtin/tag.c:22 +msgid "" +"git tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]" +msgstr "git tag [-a|-s|-u <id-clé>] [-f] [-m <msg>|-F <file>] <nométiquette> [<head>]" + +#: builtin/tag.c:23 +msgid "git tag -d <tagname>..." +msgstr "git tag -d <nométiquette>..." + +#: builtin/tag.c:24 +msgid "" +"git tag -l [-n[<num>]] [--contains <commit>] [--points-at <object>] \n" +"\t\t[<pattern>...]" +msgstr "" +"git tag -l [-n[<num>]] [--contains <commit>] [--points-at <objet>] \n" +"\t\t[<motif>...]" + +#: builtin/tag.c:26 +msgid "git tag -v <tagname>..." +msgstr "git tag -v <nométiquette>..." + +#: builtin/tag.c:60 +#, c-format +msgid "malformed object at '%s'" +msgstr "objet malformé à '%s'" + +#: builtin/tag.c:207 +#, c-format +msgid "tag name too long: %.*s..." +msgstr "nom d'étiquette trop long : %.*s..." + +#: builtin/tag.c:212 +#, c-format +msgid "tag '%s' not found." +msgstr "étiquette '%s' non trouvée." + +#: builtin/tag.c:227 +#, c-format +msgid "Deleted tag '%s' (was %s)\n" +msgstr "Étiquette '%s' supprimée (elle était %s)\n" + +#: builtin/tag.c:239 +#, c-format +msgid "could not verify the tag '%s'" +msgstr "impossible de vérifier l'étiquette '%s'" + +#: builtin/tag.c:249 +#, c-format +msgid "" +"\n" +"Write a tag message\n" +"Lines starting with '%c' will be ignored.\n" +msgstr "" +"\n" +"Écrire un message pour l'étiquette\n" +"Les lignes commençant par '%c' seront ignorées.\n" + +#: builtin/tag.c:253 +#, c-format +msgid "" +"\n" +"Write a tag message\n" +"Lines starting with '%c' will be kept; you may remove them yourself if you " +"want to.\n" +msgstr "" +"\n" +"Écrire un message pour l'étiquette\n" +"Les lignes commençant par '%c' seront gardées ; vous pouvez les retirer vous-même si vous le souhaitez.\n" + +#: builtin/tag.c:292 +msgid "unable to sign the tag" +msgstr "impossible de signer l'étiquette" + +#: builtin/tag.c:294 +msgid "unable to write tag file" +msgstr "impossible d'écrire le fichier d'étiquettes" + +#: builtin/tag.c:319 +msgid "bad object type." +msgstr "mauvais type d'objet." + +#: builtin/tag.c:332 +msgid "tag header too big." +msgstr "en-tête d'étiquette trop gros." + +#: builtin/tag.c:368 +msgid "no tag message?" +msgstr "pas de message pour l'étiquette ?" + +#: builtin/tag.c:374 +#, c-format +msgid "The tag message has been left in %s\n" +msgstr "Le message pour l'étiquette a été laissé dans %s\n" + +#: builtin/tag.c:423 +msgid "switch 'points-at' requires an object" +msgstr "le commutateur 'points-at' requiert un objet" + +#: builtin/tag.c:425 +#, c-format +msgid "malformed object name '%s'" +msgstr "nom d'objet malformé '%s'" + +#: builtin/tag.c:445 +msgid "list tag names" +msgstr "afficher les noms des étiquettes" + +#: builtin/tag.c:447 +msgid "print <n> lines of each tag message" +msgstr "affiche <n> lignes de chaque message d'étiquette" + +#: builtin/tag.c:449 +msgid "delete tags" +msgstr "supprimer des étiquettes" + +#: builtin/tag.c:450 +msgid "verify tags" +msgstr "vérifier des étiquettes" + +#: builtin/tag.c:452 +msgid "Tag creation options" +msgstr "Options de création de l'étiquette" + +#: builtin/tag.c:454 +msgid "annotated tag, needs a message" +msgstr "étiquette annotée, nécessite un message" + +#: builtin/tag.c:456 +msgid "tag message" +msgstr "message pour l'étiquette" + +#: builtin/tag.c:458 +msgid "annotated and GPG-signed tag" +msgstr "étiquette annotée et signée avec GPG" + +#: builtin/tag.c:462 +msgid "use another key to sign the tag" +msgstr "utiliser une autre clé pour signer l'étiquette" + +#: builtin/tag.c:463 +msgid "replace the tag if exists" +msgstr "remplacer l'étiquette si elle existe" + +#: builtin/tag.c:464 +msgid "show tag list in columns" +msgstr "afficher la liste des étiquettes sous forme de colonnes" + +#: builtin/tag.c:466 +msgid "Tag listing options" +msgstr "Options d'affichage des étiquettes" + +#: builtin/tag.c:469 +msgid "print only tags that contain the commit" +msgstr "afficher seulement les étiquettes qui contiennent la validation" + +#: builtin/tag.c:475 +msgid "print only tags of the object" +msgstr "afficher seulement les étiquettes de l'objet" + +#: builtin/tag.c:504 +msgid "--column and -n are incompatible" +msgstr "--column et -n sont incompatibles" + +#: builtin/tag.c:521 +msgid "-n option is only allowed with -l." +msgstr "l'option -n est autorisée seulement avec -l." + +#: builtin/tag.c:523 +msgid "--contains option is only allowed with -l." +msgstr "l'option --contains est autorisée seulement avec -l." + +#: builtin/tag.c:525 +msgid "--points-at option is only allowed with -l." +msgstr "l'option --points-at est autorisée seulement avec -l." + +#: builtin/tag.c:533 +msgid "only one -F or -m option is allowed." +msgstr "une seule option -F ou -m est autorisée." + +#: builtin/tag.c:553 +msgid "too many params" +msgstr "trop de paramètres" + +#: builtin/tag.c:559 +#, c-format +msgid "'%s' is not a valid tag name." +msgstr "'%s' n'est pas un nom d'étiquette valide." + +#: builtin/tag.c:564 +#, c-format +msgid "tag '%s' already exists" +msgstr "l'étiquette '%s' existe déjà " + +#: builtin/tag.c:582 +#, c-format +msgid "%s: cannot lock the ref" +msgstr "%s : impossible de verrouiller la référence" + +#: builtin/tag.c:584 +#, c-format +msgid "%s: cannot update the ref" +msgstr "%s : impossible de mettre à jour la référence" + +#: builtin/tag.c:586 +#, c-format +msgid "Updated tag '%s' (was %s)\n" +msgstr "Étiquette '%s' mise à jour (elle était %s)\n" + +#: builtin/update-index.c:401 +msgid "git update-index [options] [--] [<file>...]" +msgstr "git update-index [options] [--] [<fichier>...]" + +#: builtin/update-index.c:718 +msgid "continue refresh even when index needs update" +msgstr "continuer de rafraîchir même si l'index a besoin d'une mise à jour" + +#: builtin/update-index.c:721 +msgid "refresh: ignore submodules" +msgstr "rafraîchir : ignorer les sous-modules" + +#: builtin/update-index.c:724 +msgid "do not ignore new files" +msgstr "ne pas ignorer les nouveaux fichiers" + +#: builtin/update-index.c:726 +msgid "let files replace directories and vice-versa" +msgstr "laisser les fichiers remplacer des répertoires et vice-versa" + +#: builtin/update-index.c:728 +msgid "notice files missing from worktree" +msgstr "aviser des fichiers manquants dans la copie de travail" + +#: builtin/update-index.c:730 +msgid "refresh even if index contains unmerged entries" +msgstr "rafraîchir même si l'index contient des entrées non fusionnées" + +#: builtin/update-index.c:733 +msgid "refresh stat information" +msgstr "rafraîchir l'information de stat" + +#: builtin/update-index.c:737 +msgid "like --refresh, but ignore assume-unchanged setting" +msgstr "comme --refresh, mais en ignorant l'option assume-unchanged" + +#: builtin/update-index.c:741 +msgid "<mode> <object> <path>" +msgstr "<mode> <objet> <chemin>" + +#: builtin/update-index.c:742 +msgid "add the specified entry to the index" +msgstr "ajouter l'entrée spécifiée dans l'index" + +#: builtin/update-index.c:746 +msgid "(+/-)x" +msgstr "(+/-)x" + +#: builtin/update-index.c:747 +msgid "override the executable bit of the listed files" +msgstr "outrepasser le bit exécutable pour les fichiers listés" + +#: builtin/update-index.c:751 +msgid "mark files as \"not changing\"" +msgstr "marquer les fichiers comme \"non changeants\"" + +#: builtin/update-index.c:754 +msgid "clear assumed-unchanged bit" +msgstr "" + +#: builtin/update-index.c:757 +msgid "mark files as \"index-only\"" +msgstr "marquer les fichiers comme \"index seulement\"" + +#: builtin/update-index.c:760 +msgid "clear skip-worktree bit" +msgstr "" + +#: builtin/update-index.c:763 +msgid "add to index only; do not add content to object database" +msgstr "ajouter seulement à l'index ; ne pas ajouter le contenu dans la base de données des objets" + +#: builtin/update-index.c:765 +msgid "remove named paths even if present in worktree" +msgstr "supprimer les chemins nommés même s'ils sont présents dans la copie de travail" + +#: builtin/update-index.c:767 +msgid "with --stdin: input lines are terminated by null bytes" +msgstr "avec --stdin : les lignes en entrée sont terminées par des octets nuls" + +#: builtin/update-index.c:769 +msgid "read list of paths to be updated from standard input" +msgstr "lire la liste des chemins à mettre à jour depuis l'entrée standard" + +#: builtin/update-index.c:773 +msgid "add entries from standard input to the index" +msgstr "ajouter les entrées depuis l'entrée standard à l'index" + +#: builtin/update-index.c:777 +msgid "repopulate stages #2 and #3 for the listed paths" +msgstr "repeupler les étapes n°2 et n°3 pour les chemins listés" + +#: builtin/update-index.c:781 +msgid "only update entries that differ from HEAD" +msgstr "mettre à jour seulement les entrées qui diffèrent de HEAD" + +#: builtin/update-index.c:785 +msgid "ignore files missing from worktree" +msgstr "ignorer les fichiers manquants dans la copie de travail" + +#: builtin/update-index.c:788 +msgid "report actions to standard output" +msgstr "afficher les actions sur la sortie standard" + +#: builtin/update-index.c:790 +msgid "(for porcelains) forget saved unresolved conflicts" +msgstr "(pour porcelaines) oublier les conflits sauvés et non résolus" + +#: builtin/update-index.c:794 +msgid "write index in this format" +msgstr "écrire l'index dans ce format" + +#: builtin/update-ref.c:7 +msgid "git update-ref [options] -d <refname> [<oldval>]" +msgstr "git update-ref [options] -d <nomréférence> [<anciennevaleur>]" + +#: builtin/update-ref.c:8 +msgid "git update-ref [options] <refname> <newval> [<oldval>]" +msgstr "git update-ref [options] <nomréférence> <nouvellevaleur> [<anciennevaleur>]" + +#: builtin/update-ref.c:19 +msgid "delete the reference" +msgstr "supprimer la référence" + +#: builtin/update-ref.c:21 +msgid "update <refname> not the one it points to" +msgstr "" + +#: builtin/update-server-info.c:6 +msgid "git update-server-info [--force]" +msgstr "git update-server-info [--force]" + +#: builtin/update-server-info.c:14 +msgid "update the info files from scratch" +msgstr "mettre à jour les fichiers d'information à partir de zéro" + +#: builtin/verify-pack.c:56 +msgid "git verify-pack [-v|--verbose] [-s|--stat-only] <pack>..." +msgstr "git verify-pack [-v|--verbose] [-s|--stat-only] <pack>..." + +#: builtin/verify-pack.c:66 +msgid "verbose" +msgstr "verbeux" + +#: builtin/verify-pack.c:68 +msgid "show statistics only" +msgstr "afficher seulement les statistiques" + +#: builtin/verify-tag.c:17 +msgid "git verify-tag [-v|--verbose] <tag>..." +msgstr "git verify-tag [-v|--verbose] <étiquette>..." + +#: builtin/verify-tag.c:73 +msgid "print tag contents" +msgstr "afficher le contenu de l'étiquette" + +#: builtin/write-tree.c:13 +msgid "git write-tree [--missing-ok] [--prefix=<prefix>/]" +msgstr "git write-tree [--missing-ok] [--prefix=<préfixe>/]" + +#: builtin/write-tree.c:26 +msgid "<prefix>/" +msgstr "<préfixe>/" + +#: builtin/write-tree.c:27 +msgid "write tree object for a subdirectory <prefix>" +msgstr "écrire l'objet arbre pour un sous-répertoire <préfixe>" + +#: builtin/write-tree.c:30 +msgid "only useful for debugging" +msgstr "seulement utile pour le débogage" + +#: git.c:16 +msgid "" +"'git help -a' and 'git help -g' lists available subcommands and some\n" +"concept guides. See 'git help <command>' or 'git help <concept>'\n" +"to read about a specific subcommand or concept." +msgstr "" +"'git help -a' et 'git help -g' listent les sous-commandes disponibles et\n" +"quelques concepts. Voir 'git help <command>' ou 'git help <concept>'\n" +"pour en lire plus à propos d'une commande spécifique ou d'un concept." + +#: parse-options.h:156 +msgid "no-op (backward compatibility)" +msgstr "sans action (rétrocompatibilité)" + +#: parse-options.h:232 +msgid "be more verbose" +msgstr "être plus verbeux" + +#: parse-options.h:234 +msgid "be more quiet" +msgstr "être plus silencieux" + +#: parse-options.h:240 +msgid "use <n> digits to display SHA-1s" +msgstr "utiliser <n> chiffres pour afficher les SHA-1s" + +#: common-cmds.h:8 +msgid "Add file contents to the index" +msgstr "Ajouter le contenu du fichier dans l'index" + +#: common-cmds.h:9 +msgid "Find by binary search the change that introduced a bug" +msgstr "Rechercher de manière binaire le changement qui a introduit un bogue" + +#: common-cmds.h:10 +msgid "List, create, or delete branches" +msgstr "Lister, créer ou supprimer des branches" + +#: common-cmds.h:11 +msgid "Checkout a branch or paths to the working tree" +msgstr "Extraire une branche ou des chemins dans la copie de travail" + +#: common-cmds.h:12 +msgid "Clone a repository into a new directory" +msgstr "Cloner un dépôt dans un nouveau répertoire" + +#: common-cmds.h:13 +msgid "Record changes to the repository" +msgstr "Enregistrer les changements dans le dépôt" + +#: common-cmds.h:14 +msgid "Show changes between commits, commit and working tree, etc" +msgstr "Afficher les changements entre les validations, entre validation et copie de travail, etc" + +#: common-cmds.h:15 +msgid "Download objects and refs from another repository" +msgstr "Télécharger les objets et références depuis un autre dépôt" + +#: common-cmds.h:16 +msgid "Print lines matching a pattern" +msgstr "Afficher les lignes correspondant à un motif" + +#: common-cmds.h:17 +msgid "Create an empty Git repository or reinitialize an existing one" +msgstr "Créer un dépôt Git vide ou réinitialiser un existant" + +#: common-cmds.h:18 +msgid "Show commit logs" +msgstr "Afficher l'historique des validations" + +#: common-cmds.h:19 +msgid "Join two or more development histories together" +msgstr "Joindre deux ou plusieurs historiques de développement ensemble" + +#: common-cmds.h:20 +msgid "Move or rename a file, a directory, or a symlink" +msgstr "Déplacer ou renommer un fichier, un répertoire, ou un lien symbolique" + +#: common-cmds.h:21 +msgid "Fetch from and merge with another repository or a local branch" +msgstr "Rapatrier et fusionner avec un autre dépôt ou une branche locale" + +#: common-cmds.h:22 +msgid "Update remote refs along with associated objects" +msgstr "Mettre à jour les références distantes ainsi que les objets associés" + +#: common-cmds.h:23 +msgid "Forward-port local commits to the updated upstream head" +msgstr "Reporter en avant les validations locales dans la tête en amont mise à jour" + +#: common-cmds.h:24 +msgid "Reset current HEAD to the specified state" +msgstr "Réinitialiser la HEAD courante à l'état spécifié" + +#: common-cmds.h:25 +msgid "Remove files from the working tree and from the index" +msgstr "Supprimer les fichiers de la copie de travail et de l'index" + +#: common-cmds.h:26 +msgid "Show various types of objects" +msgstr "Afficher différents types d'objects" + +#: common-cmds.h:27 +msgid "Show the working tree status" +msgstr "Afficher le statut de la copie de travail" + +#: common-cmds.h:28 +msgid "Create, list, delete or verify a tag object signed with GPG" +msgstr "Créer, lister, supprimer ou vérifier un objet d'étiquette signé avec GPG" + +#: git-am.sh:50 +msgid "You need to set your committer info first" +msgstr "Vous devez d'abord définir vos informations de validateur" + +#: git-am.sh:95 +msgid "" +"You seem to have moved HEAD since the last 'am' failure.\n" +"Not rewinding to ORIG_HEAD" +msgstr "" +"Vous semblez avoir déplacé la HEAD depuis le dernier échec de 'am'.\n" +"Pas de retour à ORIG_HEAD" + +#: git-am.sh:105 +#, sh-format +msgid "" +"When you have resolved this problem, run \"$cmdline --resolved\".\n" +"If you prefer to skip this patch, run \"$cmdline --skip\" instead.\n" +"To restore the original branch and stop patching, run \"$cmdline --abort\"." +msgstr "" +"Lorsque vous aurez résolu ce problème, lancez \"$cmdline --resolved\".\n" +"Si vous préférez sauter ce patch, lancez \"$cmdline --skip\" à la place.\n" +"Pour restaurer la branche d'origine et stopper le patchage, lancez \"$cmdline --abort\"." + +#: git-am.sh:121 +msgid "Cannot fall back to three-way merge." +msgstr "Impossible de retourner à une fusion 3-way." + +#: git-am.sh:137 +msgid "Repository lacks necessary blobs to fall back on 3-way merge." +msgstr "Le dépôt n'a pas les blobs nécessaires pour un retour à une fusion 3-way." + +#: git-am.sh:139 +msgid "Using index info to reconstruct a base tree..." +msgstr "Utilisation de l'information de l'index pour reconstruire un arbre de base..." + +#: git-am.sh:154 +msgid "" +"Did you hand edit your patch?\n" +"It does not apply to blobs recorded in its index." +msgstr "" +"Avez-vous édité le patch à la main ?\n" +"Il ne s'applique pas aux blobs enregistrés dans son index." + +#: git-am.sh:163 +msgid "Falling back to patching base and 3-way merge..." +msgstr "Retour à un patch de la base et fusion 3-way..." + +#: git-am.sh:179 +msgid "Failed to merge in the changes." +msgstr "Échec de fusion dans les changements." + +#: git-am.sh:274 +msgid "Only one StGIT patch series can be applied at once" +msgstr "Seulement une série de patches StGIT peut être appliquée à la fois" + +#: git-am.sh:361 +#, sh-format +msgid "Patch format $patch_format is not supported." +msgstr "Le format de patch $patch_format n'est pas supporté." + +#: git-am.sh:363 +msgid "Patch format detection failed." +msgstr "Échec de détection du format du patch." + +#: git-am.sh:389 +msgid "" +"The -b/--binary option has been a no-op for long time, and\n" +"it will be removed. Please do not use it anymore." +msgstr "" +"L'option -b/--binary ne fait plus rien depuis longtemps,\n" +"et elle sera supprimée. Merci de ne plus l'utiliser." + +#: git-am.sh:477 +#, sh-format +msgid "previous rebase directory $dotest still exists but mbox given." +msgstr "le répertoire précédent de rebasage $dotest existe toujours mais mbox donnée." + +#: git-am.sh:482 +msgid "Please make up your mind. --skip or --abort?" +msgstr "Décidez-vous. --skip ou --abort ?" + +#: git-am.sh:509 +msgid "Resolve operation not in progress, we are not resuming." +msgstr "Pas de résolution de l'opération en cours, nous ne sommes pas dans une reprise." + +#: git-am.sh:575 +#, sh-format +msgid "Dirty index: cannot apply patches (dirty: $files)" +msgstr "Index sale : impossible d'appliquer des patches (sales : $files)" + +#: git-am.sh:679 +#, sh-format +msgid "" +"Patch is empty. Was it split wrong?\n" +"If you would prefer to skip this patch, instead run \"$cmdline --skip\".\n" +"To restore the original branch and stop patching run \"$cmdline --abort\"." +msgstr "" +"Le patch est vide. Était-il mal découpé ?\n" +"Si vous préférez sauter ce patch, lancez plutôt \"$cmdline --skip\".\n" +"Pour restaurer la branche d'origine et stopper le patchage, lancez \"$cmdline --abort\"." + +#: git-am.sh:706 +msgid "Patch does not have a valid e-mail address." +msgstr "Le patch n'a pas d'adresse e-mail valide." + +#: git-am.sh:753 +msgid "cannot be interactive without stdin connected to a terminal." +msgstr "impossible d'être interactif sans entrée standard connectée à un terminal." + +#: git-am.sh:757 +msgid "Commit Body is:" +msgstr "Le corps de la validation est :" + +#. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a] +#. in your translation. The program will only accept English +#. input at this point. +#: git-am.sh:764 +msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " +msgstr "Appliquer ? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " + +#: git-am.sh:800 +#, sh-format +msgid "Applying: $FIRSTLINE" +msgstr "Application : $FIRSTLINE" + +#: git-am.sh:821 +msgid "" +"No changes - did you forget to use 'git add'?\n" +"If there is nothing left to stage, chances are that something else\n" +"already introduced the same changes; you might want to skip this patch." +msgstr "" + +#: git-am.sh:829 +msgid "" +"You still have unmerged paths in your index\n" +"did you forget to use 'git add'?" +msgstr "" +"Vous avez toujours des chemins non fusionnés dans votre index\n" +"auriez-vous oublié de faire 'git add' ?" + +#: git-am.sh:845 +msgid "No changes -- Patch already applied." +msgstr "Pas de changement -- Patch déjà appliqué." + +#: git-am.sh:855 +#, sh-format +msgid "Patch failed at $msgnum $FIRSTLINE" +msgstr "Le patch a échoué à $msgnum $FIRSTLINE" + +#: git-am.sh:858 +#, sh-format +msgid "" +"The copy of the patch that failed is found in:\n" +" $dotest/patch" +msgstr "" +"La copie du patch qui a échoué se trouve dans :\n" +" $dotest/patch" + +#: git-am.sh:876 +msgid "applying to an empty history" +msgstr "application à un historique vide" + +#: git-bisect.sh:48 +msgid "You need to start by \"git bisect start\"" +msgstr "Vous devez démarrer avec \"git bisect start\"" + +#. TRANSLATORS: Make sure to include [Y] and [n] in your +#. translation. The program will only accept English input +#. at this point. +#: git-bisect.sh:54 +msgid "Do you want me to do it for you [Y/n]? " +msgstr "Souhaitez-vous que je le fasse pour vous [Y/n] ? " + +#: git-bisect.sh:95 +#, sh-format +msgid "unrecognised option: '$arg'" +msgstr "option inconnue : '$arg'" + +#: git-bisect.sh:99 +#, sh-format +msgid "'$arg' does not appear to be a valid revision" +msgstr "'$arg' ne semble être une révision valide" + +#: git-bisect.sh:117 +msgid "Bad HEAD - I need a HEAD" +msgstr "Mauvaise HEAD - j'ai besoin d'une HEAD" + +#: git-bisect.sh:130 +#, sh-format +msgid "" +"Checking out '$start_head' failed. Try 'git bisect reset <validbranch>'." +msgstr "L'extraction de '$start_head' a échoué. Essayez 'git bisect reset <branchevalide>'." + +#: git-bisect.sh:140 +msgid "won't bisect on seeked tree" +msgstr "" + +#: git-bisect.sh:144 +msgid "Bad HEAD - strange symbolic ref" +msgstr "Mauvaise HEAD - référence symbolique douteuse" + +#: git-bisect.sh:189 +#, sh-format +msgid "Bad bisect_write argument: $state" +msgstr "Mauvais argument pour bisect_write : $state" + +#: git-bisect.sh:218 +#, sh-format +msgid "Bad rev input: $arg" +msgstr "Mauvaise révision en entrée : $arg" + +#: git-bisect.sh:232 +msgid "Please call 'bisect_state' with at least one argument." +msgstr "Merci d'appeler 'bisect_state' avec au moins un argument." + +#: git-bisect.sh:244 +#, sh-format +msgid "Bad rev input: $rev" +msgstr "Mauvaise révision en entrée : $rev" + +#: git-bisect.sh:250 +msgid "'git bisect bad' can take only one argument." +msgstr "'git bisect bad' n'accepte qu'un seul argument." + +#. have bad but not good. we could bisect although +#. this is less optimum. +#: git-bisect.sh:273 +msgid "Warning: bisecting only with a bad commit." +msgstr "Attention : bissection avec seulement une mauvaise validation." + +#. TRANSLATORS: Make sure to include [Y] and [n] in your +#. translation. The program will only accept English input +#. at this point. +#: git-bisect.sh:279 +msgid "Are you sure [Y/n]? " +msgstr "Êtes-vous sûr [Y/n] ? " + +#: git-bisect.sh:289 +msgid "" +"You need to give me at least one good and one bad revisions.\n" +"(You can use \"git bisect bad\" and \"git bisect good\" for that.)" +msgstr "" +"Vous devez me donner au moins une bonne et une mauvaise révision.\n" +"(Vous pouvez utiliser \"git bisect bad\" et \"git bisect good\" pour cela.)" + +#: git-bisect.sh:292 +msgid "" +"You need to start by \"git bisect start\".\n" +"You then need to give me at least one good and one bad revisions.\n" +"(You can use \"git bisect bad\" and \"git bisect good\" for that.)" +msgstr "" +"Vous devez démarrer avec \"git bisect start\".\n" +"Puis vous devez me donner au moins une bonne et une mauvaise révision.\n" +"(Vous pouvez utiliser \"git bisect bad\" et \"git bisect good\" pour cela.)" + +#: git-bisect.sh:363 git-bisect.sh:490 +msgid "We are not bisecting." +msgstr "Pas de bissection en cours." + +#: git-bisect.sh:370 +#, sh-format +msgid "'$invalid' is not a valid commit" +msgstr "'$invalid' n'est pas une validation valide" + +#: git-bisect.sh:379 +#, sh-format +msgid "" +"Could not check out original HEAD '$branch'.\n" +"Try 'git bisect reset <commit>'." +msgstr "" +"Échec d'extraction de la HEAD d'origine '$branch'.\n" +"Essayez 'git bisect reset <commit>'." + +#: git-bisect.sh:406 +msgid "No logfile given" +msgstr "Pas de fichier de log donné" + +#: git-bisect.sh:407 +#, sh-format +msgid "cannot read $file for replaying" +msgstr "impossible de lire $file pour rejouer" + +#: git-bisect.sh:424 +msgid "?? what are you talking about?" +msgstr "?? de quoi parlez-vous ?" + +#: git-bisect.sh:436 +#, sh-format +msgid "running $command" +msgstr "lancement de $command" + +#: git-bisect.sh:443 +#, sh-format +msgid "" +"bisect run failed:\n" +"exit code $res from '$command' is < 0 or >= 128" +msgstr "" +"la bissection a échoué :\n" +"le code retour $res de '$command' est < 0 ou >= 128" + +#: git-bisect.sh:469 +msgid "bisect run cannot continue any more" +msgstr "la bissection ne peut plus continuer" + +#: git-bisect.sh:475 +#, sh-format +msgid "" +"bisect run failed:\n" +"'bisect_state $state' exited with error code $res" +msgstr "" +"la bissection a échoué :\n" +"'bisect_state $state' a retourné le code erreur $res" + +#: git-bisect.sh:482 +msgid "bisect run success" +msgstr "succès de la bissection" + +#: git-pull.sh:21 +msgid "" +"Pull is not possible because you have unmerged files.\n" +"Please, fix them up in the work tree, and then use 'git add/rm <file>'\n" +"as appropriate to mark resolution, or use 'git commit -a'." +msgstr "" +"Le pull n'est pas possible car vous avez des fichiers non fusionnés.\n" +"Merci de corriger dans votre copie de travail, et utilisez alors 'git add/rm <file>'\n" +"si nécessaire pour marquer comme résolu, ou utilisez 'git commit -a'." + +#: git-pull.sh:25 +msgid "Pull is not possible because you have unmerged files." +msgstr "Le pull n'est pas possible car vous avez des fichiers non fusionnés." + +#: git-pull.sh:203 +msgid "updating an unborn branch with changes added to the index" +msgstr "mise à jour d'une branche non encore créée avec les changements ajoutés dans l'index" + +#. The fetch involved updating the current branch. +#. The working tree and the index file is still based on the +#. $orig_head commit, but we are merging into $curr_head. +#. First update the working tree to match $curr_head. +#: git-pull.sh:235 +#, sh-format +msgid "" +"Warning: fetch updated the current branch head.\n" +"Warning: fast-forwarding your working tree from\n" +"Warning: commit $orig_head." +msgstr "" +"Attention : fetch a mis à jour la tête de la branche courante.\n" +"Attention : mise à jour en avance rapide de votre copie de travail\n" +"Attention : depuis la validation $orig_head." + +#: git-pull.sh:260 +msgid "Cannot merge multiple branches into empty head" +msgstr "Impossible de fusionner de multiples branches sur une tête vide" + +#: git-pull.sh:264 +msgid "Cannot rebase onto multiple branches" +msgstr "Impossible de rebaser sur de multiples branches" + +#: git-rebase.sh:53 +msgid "" +"When you have resolved this problem, run \"git rebase --continue\".\n" +"If you prefer to skip this patch, run \"git rebase --skip\" instead.\n" +"To check out the original branch and stop rebasing, run \"git rebase --abort" +"\"." +msgstr "" +"Lorsque vous aurez résolu ce problème, lancez \"git rebase --continue\".\n" +"Si vous préférez sauter ce patch, lancez \"git rebase --skip\" à la place.\n" +"Pour extraire la branche d'origine et stopper le rebasage, lancez \"git rebase --abort\"." + +#: git-rebase.sh:160 +msgid "The pre-rebase hook refused to rebase." +msgstr "Le hook pre-rebase a refusé de rebaser." + +#: git-rebase.sh:165 +msgid "It looks like git-am is in progress. Cannot rebase." +msgstr "Il semble que git-am soit en cours. Impossible de rebaser." + +#: git-rebase.sh:296 +msgid "The --exec option must be used with the --interactive option" +msgstr "L'option --exec doit être utilisée avec l'option --interactive" + +#: git-rebase.sh:301 +msgid "No rebase in progress?" +msgstr "Pas de rebasage en cours ?" + +#: git-rebase.sh:312 +msgid "The --edit-todo action can only be used during interactive rebase." +msgstr "L'action --edit-todo peut seulement être utilisée lors d'un rebasage interactif." + +#: git-rebase.sh:319 +msgid "Cannot read HEAD" +msgstr "Impossible de lire HEAD" + +#: git-rebase.sh:322 +msgid "" +"You must edit all merge conflicts and then\n" +"mark them as resolved using git add" +msgstr "" +"Vous devez éditer tous les conflits de fusion et\n" +"les marquer comme résolus avec git add" + +#: git-rebase.sh:340 +#, sh-format +msgid "Could not move back to $head_name" +msgstr "Impossible de revenir à $head_name" + +#: git-rebase.sh:359 +#, sh-format +msgid "" +"It seems that there is already a $state_dir_base directory, and\n" +"I wonder if you are in the middle of another rebase. If that is the\n" +"case, please try\n" +"\t$cmd_live_rebase\n" +"If that is not the case, please\n" +"\t$cmd_clear_stale_rebase\n" +"and run me again. I am stopping in case you still have something\n" +"valuable there." +msgstr "" +"Il semble qu'il y ait déjà un répertoire $state_dir_base, et je me demande\n" +"si vous n'êtes pas au milieu d'un autre rebasage. Si c'est le cas,\n" +"merci d'essayer\n" +"\t$cmd_live_rebase\n" +"Si ça n'est pas le cas, merci de\n" +"\t$cmd_clear_stale_rebase\n" +"et relancer à nouveau. Je m'arrête au cas où vous auriez quelque chose\n" +"d'important ici." + +#: git-rebase.sh:404 +#, sh-format +msgid "invalid upstream $upstream_name" +msgstr "invalide $upstream_name en amont" + +#: git-rebase.sh:428 +#, sh-format +msgid "$onto_name: there are more than one merge bases" +msgstr "$onto_name : il y a plus d'une base de fusion" + +#: git-rebase.sh:431 git-rebase.sh:435 +#, sh-format +msgid "$onto_name: there is no merge base" +msgstr "$onto_name : il n'y a pas de base de fusion" + +#: git-rebase.sh:440 +#, sh-format +msgid "Does not point to a valid commit: $onto_name" +msgstr "Ne pointe pas sur une validation valide : $onto_name" + +#: git-rebase.sh:463 +#, sh-format +msgid "fatal: no such branch: $branch_name" +msgstr "fatal : pas de branche : $branch_name" + +#: git-rebase.sh:483 +msgid "Please commit or stash them." +msgstr "Merci de les valider ou de les remiser." + +#: git-rebase.sh:501 +#, sh-format +msgid "Current branch $branch_name is up to date." +msgstr "La branche courante $branch_name est à jour." + +#: git-rebase.sh:504 +#, sh-format +msgid "Current branch $branch_name is up to date, rebase forced." +msgstr "La branche courante $branch_name est à jour, rebasage forcé." + +#: git-rebase.sh:515 +#, sh-format +msgid "Changes from $mb to $onto:" +msgstr "Changements de $mb sur $onto :" + +#. Detach HEAD and reset the tree +#: git-rebase.sh:524 +msgid "First, rewinding head to replay your work on top of it..." +msgstr "Premièrement, retour de head pour rejouer votre travail par-dessus..." + +#: git-rebase.sh:532 +#, sh-format +msgid "Fast-forwarded $branch_name to $onto_name." +msgstr "$branch_name mise à jour en avance rapide sur $onto_name." + +#: git-stash.sh:51 +msgid "git stash clear with parameters is unimplemented" +msgstr "git stash clear avec des paramètres n'est pas implémenté" + +#: git-stash.sh:74 +msgid "You do not have the initial commit yet" +msgstr "Vous n'avez pas encore la validation initiale" + +#: git-stash.sh:89 +msgid "Cannot save the current index state" +msgstr "Impossible de sauver l'état courant de l'index" + +#: git-stash.sh:123 git-stash.sh:136 +msgid "Cannot save the current worktree state" +msgstr "Impossible de sauver l'état courant de la copie de travail" + +#: git-stash.sh:140 +msgid "No changes selected" +msgstr "Aucun changement sélectionné" + +#: git-stash.sh:143 +msgid "Cannot remove temporary index (can't happen)" +msgstr "Impossible de supprimer l'index temporaire (ne peut pas se produire)" + +#: git-stash.sh:156 +msgid "Cannot record working tree state" +msgstr "Impossible d'enregistrer l'état de la copie de travail" + +#. TRANSLATORS: $option is an invalid option, like +#. `--blah-blah'. The 7 spaces at the beginning of the +#. second line correspond to "error: ". So you should line +#. up the second line with however many characters the +#. translation of "error: " takes in your language. E.g. in +#. English this is: +#. +#. $ git stash save --blah-blah 2>&1 | head -n 2 +#. error: unknown option for 'stash save': --blah-blah +#. To provide a message, use git stash save -- '--blah-blah' +#: git-stash.sh:202 +#, sh-format +msgid "" +"error: unknown option for 'stash save': $option\n" +" To provide a message, use git stash save -- '$option'" +msgstr "" +"erreur: option inconnue pour 'stash save': $option\n" +" Pour fournir un message, utilisez git stash save -- '$option'" + +#: git-stash.sh:223 +msgid "No local changes to save" +msgstr "Pas de changements en local à sauver" + +#: git-stash.sh:227 +msgid "Cannot initialize stash" +msgstr "Impossible d'initialiser le remisage" + +#: git-stash.sh:235 +msgid "Cannot save the current status" +msgstr "Impossible de sauver le statut courant" + +#: git-stash.sh:253 +msgid "Cannot remove worktree changes" +msgstr "Impossible de supprimer les changements de la copie de travail" + +#: git-stash.sh:352 +msgid "No stash found." +msgstr "Pas de remisage trouvé." + +#: git-stash.sh:359 +#, sh-format +msgid "Too many revisions specified: $REV" +msgstr "Trop de révisions spécifiées : $REV" + +#: git-stash.sh:365 +#, sh-format +msgid "$reference is not valid reference" +msgstr "$reference n'est pas une référence valide" + +#: git-stash.sh:393 +#, sh-format +msgid "'$args' is not a stash-like commit" +msgstr "'$args' n'est pas une validation de type remisage" + +#: git-stash.sh:404 +#, sh-format +msgid "'$args' is not a stash reference" +msgstr "'$args' n'est pas une référence de remisage" + +#: git-stash.sh:412 +msgid "unable to refresh index" +msgstr "impossible de rafraîchir l'index" + +#: git-stash.sh:416 +msgid "Cannot apply a stash in the middle of a merge" +msgstr "Impossible d'appliquer un remisage au milieu d'une fusion" + +#: git-stash.sh:424 +msgid "Conflicts in index. Try without --index." +msgstr "Conflits dans l'index. Essayez sans --index." + +#: git-stash.sh:426 +msgid "Could not save index tree" +msgstr "Impossible de sauver l'arbre d'index" + +#: git-stash.sh:460 +msgid "Cannot unstage modified files" +msgstr "Impossible de désindexer les fichiers modifiés" + +#: git-stash.sh:475 +msgid "Index was not unstashed." +msgstr "" + +#: git-stash.sh:492 +#, sh-format +msgid "Dropped ${REV} ($s)" +msgstr "${REV} supprimé ($s)" + +#: git-stash.sh:493 +#, sh-format +msgid "${REV}: Could not drop stash entry" +msgstr "${REV}: Impossible de supprimer l'entrée de stash" + +#: git-stash.sh:500 +msgid "No branch name specified" +msgstr "Aucune branche spécifiée" + +#: git-stash.sh:571 +msgid "(To restore them type \"git stash apply\")" +msgstr "(Pour les restaurer tapez \"git stash apply\")" + +#: git-submodule.sh:91 +#, sh-format +msgid "cannot strip one component off url '$remoteurl'" +msgstr "impossible de supprimer un composant de l'URL '$remoteurl'" + +#: git-submodule.sh:196 +#, sh-format +msgid "No submodule mapping found in .gitmodules for path '$sm_path'" +msgstr "Pas de mappage du sous-module trouvé dans .gitmodules pour le chemin '$sm_path'" + +#: git-submodule.sh:239 +#, sh-format +msgid "Clone of '$url' into submodule path '$sm_path' failed" +msgstr "Le clonage de '$url' dans le chemin de sous-module '$sm_path' a échoué" + +#: git-submodule.sh:251 +#, sh-format +msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa" +msgstr "Le répertoire Git '$a' fait partie du chemin de sous-module '$b' ou vice-versa" + +#: git-submodule.sh:349 +#, sh-format +msgid "repo URL: '$repo' must be absolute or begin with ./|../" +msgstr "L'URL de dépôt '$repo' doit être absolu ou commencer par ./|../" + +#: git-submodule.sh:366 +#, sh-format +msgid "'$sm_path' already exists in the index" +msgstr "'$sm_path' existe déjà dans l'index" + +#: git-submodule.sh:370 +#, sh-format +msgid "" +"The following path is ignored by one of your .gitignore files:\n" +"$sm_path\n" +"Use -f if you really want to add it." +msgstr "" +"Le chemin suivant est ignoré par un de vos fichiers .gitignore :\n" +"$sm_path\n" +"Utilisez -f si vous voulez vraiment l'ajouter." + +#: git-submodule.sh:388 +#, sh-format +msgid "Adding existing repo at '$sm_path' to the index" +msgstr "Ajout du dépôt existant à '$sm_path' dans l'index" + +#: git-submodule.sh:390 +#, sh-format +msgid "'$sm_path' already exists and is not a valid git repo" +msgstr "'$sm_path' existe déjà et n'est pas un dépôt git valide" + +#: git-submodule.sh:398 +#, sh-format +msgid "A git directory for '$sm_name' is found locally with remote(s):" +msgstr "Un répertoire git pour '$sm_name' est trouvé en local avec le(s) serveur(s) distant(s) :" + +#: git-submodule.sh:400 +#, sh-format +msgid "" +"If you want to reuse this local git directory instead of cloning again from" +msgstr "Si vous voulez réutiliser ce répertoire git local au lieu de cloner à nouveau depuis" + +#: git-submodule.sh:402 +#, sh-format +msgid "" +"use the '--force' option. If the local git directory is not the correct repo" +msgstr "utilisez l'option '--force'. Si le répertoire local git n'est pas le dépôt correct" + +#: git-submodule.sh:403 +#, sh-format +msgid "" +"or you are unsure what this means choose another name with the '--name' " +"option." +msgstr "ou vous ne savez pas ce que cela signifie de choisir un autre nom avec l'option '--name'." + +#: git-submodule.sh:405 +#, sh-format +msgid "Reactivating local git directory for submodule '$sm_name'." +msgstr "Réactivation du répertoire git local pour le sous-module '$sm_name'." + +#: git-submodule.sh:417 +#, sh-format +msgid "Unable to checkout submodule '$sm_path'" +msgstr "Impossible d'extraire le sous-module '$sm_path'" + +#: git-submodule.sh:422 +#, sh-format +msgid "Failed to add submodule '$sm_path'" +msgstr "Échec d'ajout du sous-module '$sm_path'" + +#: git-submodule.sh:431 +#, sh-format +msgid "Failed to register submodule '$sm_path'" +msgstr "Échec d'enregistrement du sous-module '$sm_path'" + +#: git-submodule.sh:474 +#, sh-format +msgid "Entering '$prefix$sm_path'" +msgstr "Entrée dans '$prefix$sm_path'" + +#: git-submodule.sh:488 +#, sh-format +msgid "Stopping at '$sm_path'; script returned non-zero status." +msgstr "Arrêt sur '$sm_path' ; le script a retourné un statut non nul." + +#: git-submodule.sh:532 +#, sh-format +msgid "No url found for submodule path '$sm_path' in .gitmodules" +msgstr "URL non trouvé pour le chemin de sous-module '$sm_path' dans .gitmodules" + +#: git-submodule.sh:541 +#, sh-format +msgid "Failed to register url for submodule path '$sm_path'" +msgstr "Échec d'enregistrement de l'URL pour le chemin de sous-module '$sm_path'" + +#: git-submodule.sh:543 +#, sh-format +msgid "Submodule '$name' ($url) registered for path '$sm_path'" +msgstr "Sous-module '$name' ($url) enregistré pour le chemin '$sm_path'" + +#: git-submodule.sh:551 +#, sh-format +msgid "Failed to register update mode for submodule path '$sm_path'" +msgstr "Échec d'enregistrement du mode de mise à jour pour le chemin de sous-module '$sm_path'" + +#: git-submodule.sh:588 +#, sh-format +msgid "Use '.' if you really want to deinitialize all submodules" +msgstr "Utilisez '.' si vous voulez vraiment réinitialiser tous les sous-modules" + +#: git-submodule.sh:603 +#, sh-format +msgid "Submodule work tree '$sm_path' contains a .git directory" +msgstr "La copie de travail du sous-module '$sm_path' contient un répertoire .git" + +#: git-submodule.sh:604 +#, sh-format +msgid "" +"(use 'rm -rf' if you really want to remove it including all of its history)" +msgstr "(utilisez 'rm -rf' si vous voulez vraiment le supprimer en incluant tout son historique)" + +#: git-submodule.sh:610 +#, sh-format +msgid "" +"Submodule work tree '$sm_path' contains local modifications; use '-f' to " +"discard them" +msgstr "La copie de travail du sous-module '$sm_path' contient des modifications locales; utilisez '-f' pour les annuler" + +#: git-submodule.sh:613 +#, sh-format +msgid "Cleared directory '$sm_path'" +msgstr "Répertoire '$sm_path' nettoyé" + +#: git-submodule.sh:614 +#, sh-format +msgid "Could not remove submodule work tree '$sm_path'" +msgstr "Impossible de supprimer la copie de travail du sous-module '$sm_path'" + +#: git-submodule.sh:617 +#, sh-format +msgid "Could not create empty submodule directory '$sm_path'" +msgstr "Impossible de créer le répertoire vide du sous-module '$sm_path'" + +#: git-submodule.sh:626 +#, sh-format +msgid "Submodule '$name' ($url) unregistered for path '$sm_path'" +msgstr "Le sous-module '$name' ($url) n'est pas enregistré pour le chemin '$sm_path'" + +#: git-submodule.sh:731 +#, sh-format +msgid "" +"Submodule path '$prefix$sm_path' not initialized\n" +"Maybe you want to use 'update --init'?" +msgstr "" +"Chemin de sous-module '$prefix$sm_path' non initialisé\n" +"Peut-être souhaitez-vous utiliser 'update --init' ?" + +#: git-submodule.sh:744 +#, sh-format +msgid "Unable to find current revision in submodule path '$prefix$sm_path'" +msgstr "Impossible de trouver la révision courante dans le chemin de sous-module '$prefix$sm_path'" + +#: git-submodule.sh:753 +#, sh-format +msgid "Unable to fetch in submodule path '$sm_path'" +msgstr "Impossible de rapatrier dans le chemin de sous-module '$sm_path'" + +#: git-submodule.sh:777 +#, sh-format +msgid "Unable to fetch in submodule path '$prefix$sm_path'" +msgstr "Impossible de rapatrier dans le chemin de sous-module '$prefix$sm_path'" + +#: git-submodule.sh:791 +#, sh-format +msgid "Unable to rebase '$sha1' in submodule path '$prefix$sm_path'" +msgstr "Impossible de rebaser '$sha1' dans le chemin de sous-module '$prefix$sm_path'" + +#: git-submodule.sh:792 +#, sh-format +msgid "Submodule path '$prefix$sm_path': rebased into '$sha1'" +msgstr "Chemin de sous-module '$prefix$sm_path' : rebasé dans '$sha1'" + +#: git-submodule.sh:797 +#, sh-format +msgid "Unable to merge '$sha1' in submodule path '$prefix$sm_path'" +msgstr "Impossible de fusionner '$sha1' dans le chemin de sous-module '$prefix$sm_path'" + +#: git-submodule.sh:798 +#, sh-format +msgid "Submodule path '$prefix$sm_path': merged in '$sha1'" +msgstr "Chemin de sous-module '$prefix$sm_path' : fusionné dans '$sha1'" + +#: git-submodule.sh:803 +#, sh-format +msgid "Unable to checkout '$sha1' in submodule path '$prefix$sm_path'" +msgstr "Impossible d'extraire '$sha1' dans le chemin de sous-module '$prefix$sm_path'" + +#: git-submodule.sh:804 +#, sh-format +msgid "Submodule path '$prefix$sm_path': checked out '$sha1'" +msgstr "Chemin de sous-module '$prefix$sm_path' : '$sha1' extrait" + +#: git-submodule.sh:831 +#, sh-format +msgid "Failed to recurse into submodule path '$prefix$sm_path'" +msgstr "Échec de parcours dans le chemin du sous-module '$prefix$sm_path'" + +#: git-submodule.sh:939 +msgid "The --cached option cannot be used with the --files option" +msgstr "L'option --cached ne peut pas être utilisée avec l'option --files" + +#. unexpected type +#: git-submodule.sh:979 +#, sh-format +msgid "unexpected mode $mod_dst" +msgstr "mode $mod_dst inattendu" + +#: git-submodule.sh:997 +#, sh-format +msgid " Warn: $name doesn't contain commit $sha1_src" +msgstr " Attention : $name ne contient pas la validation $sha1_src" + +#: git-submodule.sh:1000 +#, sh-format +msgid " Warn: $name doesn't contain commit $sha1_dst" +msgstr " Attention : $name ne contient pas la validation $sha1_dst" + +#: git-submodule.sh:1003 +#, sh-format +msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst" +msgstr " Attention : $name ne contient pas les validations $sha1_src et $sha1_dst" + +#: git-submodule.sh:1028 +msgid "blob" +msgstr "blob" + +#: git-submodule.sh:1066 +msgid "Submodules changed but not updated:" +msgstr "Sous-modules modifiés mais non mis à jour :" + +#: git-submodule.sh:1068 +msgid "Submodule changes to be committed:" +msgstr "Changements du sous-module à valider :" + +#: git-submodule.sh:1153 +#, sh-format +msgid "Failed to recurse into submodule path '$sm_path'" +msgstr "Échec de parcours dans le chemin du sous-module '$sm_path'" + +#: git-submodule.sh:1216 +#, sh-format +msgid "Synchronizing submodule url for '$prefix$sm_path'" +msgstr "Synchronisation de l'URL sous-module pour '$prefix$sm_path'" diff --git a/po/git.pot b/po/git.pot index 4a9d4efed9..cf1e446330 100644 --- a/po/git.pot +++ b/po/git.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2013-04-30 08:25+0800\n" +"POT-Creation-Date: 2013-08-06 14:10+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" -#: advice.c:53 +#: advice.c:57 #, c-format msgid "hint: %.*s\n" msgstr "" @@ -27,7 +27,7 @@ msgstr "" #. * Message used both when 'git commit' fails and when #. * other commands doing a merge do. #. -#: advice.c:83 +#: advice.c:87 msgid "" "Fix them up in the work tree,\n" "and then use 'git add/rm <file>' as\n" @@ -60,7 +60,7 @@ msgstr "" msgid "archive format" msgstr "" -#: archive.c:324 builtin/log.c:1126 +#: archive.c:324 builtin/log.c:1173 msgid "prefix" msgstr "" @@ -68,11 +68,11 @@ msgstr "" msgid "prepend prefix to each pathname in the archive" msgstr "" -#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2371 -#: builtin/blame.c:2372 builtin/config.c:55 builtin/fast-export.c:665 -#: builtin/fast-export.c:667 builtin/grep.c:715 builtin/hash-object.c:77 -#: builtin/ls-files.c:490 builtin/ls-files.c:493 builtin/notes.c:536 -#: builtin/notes.c:693 builtin/read-tree.c:107 parse-options.h:149 +#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2292 +#: builtin/blame.c:2293 builtin/config.c:56 builtin/fast-export.c:673 +#: builtin/fast-export.c:675 builtin/grep.c:714 builtin/hash-object.c:77 +#: builtin/ls-files.c:496 builtin/ls-files.c:499 builtin/notes.c:408 +#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:152 msgid "file" msgstr "" @@ -104,7 +104,7 @@ msgstr "" msgid "list supported archive formats" msgstr "" -#: archive.c:345 builtin/archive.c:90 builtin/clone.c:86 +#: archive.c:345 builtin/archive.c:90 builtin/clone.c:85 msgid "repo" msgstr "" @@ -112,7 +112,7 @@ msgstr "" msgid "retrieve the archive from remote repository <repo>" msgstr "" -#: archive.c:347 builtin/archive.c:92 builtin/notes.c:615 +#: archive.c:347 builtin/archive.c:92 builtin/notes.c:487 msgid "command" msgstr "" @@ -195,17 +195,17 @@ msgstr "" msgid "Cannot force update the current branch." msgstr "" -#: branch.c:201 +#: branch.c:216 #, c-format msgid "Cannot setup tracking information; starting point '%s' is not a branch." msgstr "" -#: branch.c:203 +#: branch.c:218 #, c-format msgid "the requested upstream branch '%s' does not exist" msgstr "" -#: branch.c:205 +#: branch.c:220 msgid "" "\n" "If you are planning on basing your work on an upstream\n" @@ -217,26 +217,26 @@ msgid "" "\"git push -u\" to set the upstream config as you push." msgstr "" -#: branch.c:250 +#: branch.c:265 #, c-format msgid "Not a valid object name: '%s'." msgstr "" -#: branch.c:270 +#: branch.c:285 #, c-format msgid "Ambiguous object name: '%s'." msgstr "" -#: branch.c:275 +#: branch.c:290 #, c-format msgid "Not a valid branch point: '%s'." msgstr "" -#: branch.c:281 +#: branch.c:296 msgid "Failed to lock ref for update" msgstr "" -#: branch.c:299 +#: branch.c:314 msgid "Failed to write ref" msgstr "" @@ -250,7 +250,7 @@ msgstr "" msgid "unrecognized header: %s%s (%d)" msgstr "" -#: bundle.c:89 builtin/commit.c:676 +#: bundle.c:89 builtin/commit.c:697 #, c-format msgid "could not open '%s'" msgstr "" @@ -259,9 +259,9 @@ msgstr "" msgid "Repository lacks these prerequisite commits:" msgstr "" -#: bundle.c:164 sequencer.c:651 sequencer.c:1101 builtin/log.c:300 -#: builtin/log.c:770 builtin/log.c:1344 builtin/log.c:1570 builtin/merge.c:349 -#: builtin/shortlog.c:155 +#: bundle.c:164 sequencer.c:661 sequencer.c:1111 builtin/log.c:331 +#: builtin/log.c:801 builtin/log.c:1399 builtin/log.c:1625 builtin/merge.c:364 +#: builtin/shortlog.c:156 msgid "revision walk setup failed" msgstr "" @@ -287,7 +287,7 @@ msgstr[1] "" msgid "rev-list died" msgstr "" -#: bundle.c:300 builtin/log.c:1255 builtin/shortlog.c:258 +#: bundle.c:300 builtin/log.c:1310 builtin/shortlog.c:259 #, c-format msgid "unrecognized argument: %s" msgstr "" @@ -318,12 +318,12 @@ msgstr "" msgid "index-pack died" msgstr "" -#: commit.c:50 +#: commit.c:53 #, c-format msgid "could not parse %s" msgstr "" -#: commit.c:52 +#: commit.c:55 #, c-format msgid "%s %s is not a commit!" msgstr "" @@ -332,16 +332,16 @@ msgstr "" msgid "memory exhausted" msgstr "" -#: connected.c:39 +#: connected.c:60 msgid "Could not run 'git rev-list'" msgstr "" -#: connected.c:48 +#: connected.c:80 #, c-format msgid "failed write to rev-list: %s" msgstr "" -#: connected.c:56 +#: connected.c:88 #, c-format msgid "failed to close rev-list's stdin: %s" msgstr "" @@ -435,14 +435,14 @@ msgid "" "%s" msgstr "" -#: diff.c:3481 +#: diff.c:3487 #, c-format msgid "" "Failed to parse --dirstat/-X option parameter:\n" "%s" msgstr "" -#: diff.c:3495 +#: diff.c:3501 #, c-format msgid "Failed to parse --submodule option parameter: '%s'" msgstr "" @@ -484,48 +484,48 @@ msgstr "" msgid "'%s': short read %s" msgstr "" -#: help.c:212 +#: help.c:210 #, c-format msgid "available git commands in '%s'" msgstr "" -#: help.c:219 +#: help.c:217 msgid "git commands available from elsewhere on your $PATH" msgstr "" -#: help.c:235 +#: help.c:233 msgid "The most commonly used git commands are:" msgstr "" -#: help.c:292 +#: help.c:290 #, c-format msgid "" "'%s' appears to be a git command, but we were not\n" "able to execute it. Maybe git-%s is broken?" msgstr "" -#: help.c:349 +#: help.c:347 msgid "Uh oh. Your system reports no Git commands at all." msgstr "" -#: help.c:371 +#: help.c:369 #, c-format msgid "" "WARNING: You called a Git command named '%s', which does not exist.\n" "Continuing under the assumption that you meant '%s'" msgstr "" -#: help.c:376 +#: help.c:374 #, c-format msgid "in %0.1f seconds automatically..." msgstr "" -#: help.c:383 +#: help.c:381 #, c-format msgid "git: '%s' is not a git command. See 'git --help'." msgstr "" -#: help.c:387 +#: help.c:385 help.c:444 msgid "" "\n" "Did you mean this?" @@ -535,12 +535,17 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" +#: help.c:440 +#, c-format +msgid "%s: %s - %s" +msgstr "" + #: merge.c:56 msgid "failed to read the cache" msgstr "" #: merge.c:110 builtin/checkout.c:365 builtin/checkout.c:566 -#: builtin/clone.c:645 +#: builtin/clone.c:656 msgid "unable to write new index file" msgstr "" @@ -554,243 +559,264 @@ msgstr "" msgid "addinfo_cache failed for path '%s'" msgstr "" -#: merge-recursive.c:268 +#: merge-recursive.c:269 msgid "error building trees" msgstr "" -#: merge-recursive.c:672 +#: merge-recursive.c:673 #, c-format msgid "failed to create path '%s'%s" msgstr "" -#: merge-recursive.c:683 +#: merge-recursive.c:684 #, c-format msgid "Removing %s to make room for subdirectory\n" msgstr "" #. something else exists #. .. but not some other error (who really cares what?) -#: merge-recursive.c:697 merge-recursive.c:718 +#: merge-recursive.c:698 merge-recursive.c:719 msgid ": perhaps a D/F conflict?" msgstr "" -#: merge-recursive.c:708 +#: merge-recursive.c:709 #, c-format msgid "refusing to lose untracked file at '%s'" msgstr "" -#: merge-recursive.c:748 +#: merge-recursive.c:749 #, c-format msgid "cannot read object %s '%s'" msgstr "" -#: merge-recursive.c:750 +#: merge-recursive.c:751 #, c-format msgid "blob expected for %s '%s'" msgstr "" -#: merge-recursive.c:773 builtin/clone.c:313 +#: merge-recursive.c:774 builtin/clone.c:312 #, c-format msgid "failed to open '%s'" msgstr "" -#: merge-recursive.c:781 +#: merge-recursive.c:782 #, c-format msgid "failed to symlink '%s'" msgstr "" -#: merge-recursive.c:784 +#: merge-recursive.c:785 #, c-format msgid "do not know what to do with %06o %s '%s'" msgstr "" -#: merge-recursive.c:922 +#: merge-recursive.c:923 msgid "Failed to execute internal merge" msgstr "" -#: merge-recursive.c:926 +#: merge-recursive.c:927 #, c-format msgid "Unable to add %s to database" msgstr "" -#: merge-recursive.c:942 +#: merge-recursive.c:943 msgid "unsupported object type in the tree" msgstr "" -#: merge-recursive.c:1021 merge-recursive.c:1035 +#: merge-recursive.c:1022 merge-recursive.c:1036 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " "in tree." msgstr "" -#: merge-recursive.c:1027 merge-recursive.c:1040 +#: merge-recursive.c:1028 merge-recursive.c:1041 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " "in tree at %s." msgstr "" -#: merge-recursive.c:1081 +#: merge-recursive.c:1082 msgid "rename" msgstr "" -#: merge-recursive.c:1081 +#: merge-recursive.c:1082 msgid "renamed" msgstr "" -#: merge-recursive.c:1137 +#: merge-recursive.c:1138 #, c-format msgid "%s is a directory in %s adding as %s instead" msgstr "" -#: merge-recursive.c:1159 +#: merge-recursive.c:1160 #, c-format msgid "" "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s" "\"->\"%s\" in \"%s\"%s" msgstr "" -#: merge-recursive.c:1164 +#: merge-recursive.c:1165 msgid " (left unresolved)" msgstr "" -#: merge-recursive.c:1218 +#: merge-recursive.c:1219 #, c-format msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s" msgstr "" -#: merge-recursive.c:1248 +#: merge-recursive.c:1249 #, c-format msgid "Renaming %s to %s and %s to %s instead" msgstr "" -#: merge-recursive.c:1447 +#: merge-recursive.c:1448 #, c-format msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s" msgstr "" -#: merge-recursive.c:1457 +#: merge-recursive.c:1458 #, c-format msgid "Adding merged %s" msgstr "" -#: merge-recursive.c:1462 merge-recursive.c:1660 +#: merge-recursive.c:1463 merge-recursive.c:1661 #, c-format msgid "Adding as %s instead" msgstr "" -#: merge-recursive.c:1513 +#: merge-recursive.c:1514 #, c-format msgid "cannot read object %s" msgstr "" -#: merge-recursive.c:1516 +#: merge-recursive.c:1517 #, c-format msgid "object %s is not a blob" msgstr "" -#: merge-recursive.c:1564 +#: merge-recursive.c:1565 msgid "modify" msgstr "" -#: merge-recursive.c:1564 +#: merge-recursive.c:1565 msgid "modified" msgstr "" -#: merge-recursive.c:1574 +#: merge-recursive.c:1575 msgid "content" msgstr "" -#: merge-recursive.c:1581 +#: merge-recursive.c:1582 msgid "add/add" msgstr "" -#: merge-recursive.c:1615 +#: merge-recursive.c:1616 #, c-format msgid "Skipped %s (merged same as existing)" msgstr "" -#: merge-recursive.c:1629 +#: merge-recursive.c:1630 #, c-format msgid "Auto-merging %s" msgstr "" -#: merge-recursive.c:1633 git-submodule.sh:1029 +#: merge-recursive.c:1634 git-submodule.sh:1118 msgid "submodule" msgstr "" -#: merge-recursive.c:1634 +#: merge-recursive.c:1635 #, c-format msgid "CONFLICT (%s): Merge conflict in %s" msgstr "" -#: merge-recursive.c:1724 +#: merge-recursive.c:1725 #, c-format msgid "Removing %s" msgstr "" -#: merge-recursive.c:1749 +#: merge-recursive.c:1750 msgid "file/directory" msgstr "" -#: merge-recursive.c:1755 +#: merge-recursive.c:1756 msgid "directory/file" msgstr "" -#: merge-recursive.c:1760 +#: merge-recursive.c:1761 #, c-format msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s" msgstr "" -#: merge-recursive.c:1770 +#: merge-recursive.c:1771 #, c-format msgid "Adding %s" msgstr "" -#: merge-recursive.c:1787 +#: merge-recursive.c:1788 msgid "Fatal merge failure, shouldn't happen." msgstr "" -#: merge-recursive.c:1806 +#: merge-recursive.c:1807 msgid "Already up-to-date!" msgstr "" -#: merge-recursive.c:1815 +#: merge-recursive.c:1816 #, c-format msgid "merging of trees %s and %s failed" msgstr "" -#: merge-recursive.c:1845 +#: merge-recursive.c:1846 #, c-format msgid "Unprocessed path??? %s" msgstr "" -#: merge-recursive.c:1890 +#: merge-recursive.c:1891 msgid "Merging:" msgstr "" -#: merge-recursive.c:1903 +#: merge-recursive.c:1904 #, c-format msgid "found %u common ancestor:" msgid_plural "found %u common ancestors:" msgstr[0] "" msgstr[1] "" -#: merge-recursive.c:1940 +#: merge-recursive.c:1941 msgid "merge returned no commit" msgstr "" -#: merge-recursive.c:1997 +#: merge-recursive.c:1998 #, c-format msgid "Could not parse object '%s'" msgstr "" -#: merge-recursive.c:2009 builtin/merge.c:658 +#: merge-recursive.c:2010 builtin/merge.c:672 msgid "Unable to write index." msgstr "" -#: object.c:195 +#: notes-utils.c:40 +msgid "Cannot commit uninitialized/unreferenced notes tree" +msgstr "" + +#: notes-utils.c:81 +#, c-format +msgid "Bad notes.rewriteMode value: '%s'" +msgstr "" + +#: notes-utils.c:91 +#, c-format +msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" +msgstr "" + +#. TRANSLATORS: The first %s is the name of the +#. environment variable, the second %s is its value +#: notes-utils.c:118 +#, c-format +msgid "Bad %s value: '%s'" +msgstr "" + +#: object.c:204 #, c-format msgid "unable to parse object: %s" msgstr "" @@ -830,18 +856,18 @@ msgstr "" msgid "'%s' is beyond a symbolic link" msgstr "" -#: remote.c:1781 +#: remote.c:1788 #, c-format msgid "Your branch is ahead of '%s' by %d commit.\n" msgid_plural "Your branch is ahead of '%s' by %d commits.\n" msgstr[0] "" msgstr[1] "" -#: remote.c:1787 +#: remote.c:1794 msgid " (use \"git push\" to publish your local commits)\n" msgstr "" -#: remote.c:1790 +#: remote.c:1797 #, c-format msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n" msgid_plural "" @@ -849,11 +875,11 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: remote.c:1798 +#: remote.c:1805 msgid " (use \"git pull\" to update your local branch)\n" msgstr "" -#: remote.c:1801 +#: remote.c:1808 #, c-format msgid "" "Your branch and '%s' have diverged,\n" @@ -864,18 +890,27 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: remote.c:1811 +#: remote.c:1818 msgid " (use \"git pull\" to merge the remote branch into yours)\n" msgstr "" -#: sequencer.c:206 builtin/merge.c:776 builtin/merge.c:889 builtin/merge.c:999 -#: builtin/merge.c:1009 +#: run-command.c:80 +msgid "open /dev/null failed" +msgstr "" + +#: run-command.c:82 +#, c-format +msgid "dup2(%d,%d) failed" +msgstr "" + +#: sequencer.c:206 builtin/merge.c:790 builtin/merge.c:903 +#: builtin/merge.c:1013 builtin/merge.c:1023 #, c-format msgid "Could not open '%s' for writing" msgstr "" -#: sequencer.c:208 builtin/merge.c:335 builtin/merge.c:779 -#: builtin/merge.c:1001 builtin/merge.c:1014 +#: sequencer.c:208 builtin/merge.c:350 builtin/merge.c:793 +#: builtin/merge.c:1015 builtin/merge.c:1028 #, c-format msgid "Could not write to '%s'" msgstr "" @@ -893,7 +928,7 @@ msgid "" "and commit the result with 'git commit'" msgstr "" -#: sequencer.c:245 sequencer.c:859 sequencer.c:942 +#: sequencer.c:245 sequencer.c:869 sequencer.c:952 #, c-format msgid "Could not write to %s" msgstr "" @@ -916,215 +951,228 @@ msgid "Commit your changes or stash them to proceed." msgstr "" #. TRANSLATORS: %s will be "revert" or "cherry-pick" -#: sequencer.c:319 +#: sequencer.c:324 #, c-format msgid "%s: Unable to write new index file" msgstr "" -#: sequencer.c:350 +#: sequencer.c:355 msgid "Could not resolve HEAD commit\n" msgstr "" -#: sequencer.c:371 +#: sequencer.c:377 msgid "Unable to update cache tree\n" msgstr "" -#: sequencer.c:416 +#: sequencer.c:422 #, c-format msgid "Could not parse commit %s\n" msgstr "" -#: sequencer.c:421 +#: sequencer.c:427 #, c-format msgid "Could not parse parent commit %s\n" msgstr "" -#: sequencer.c:487 +#: sequencer.c:493 msgid "Your index file is unmerged." msgstr "" -#: sequencer.c:506 +#: sequencer.c:512 #, c-format msgid "Commit %s is a merge but no -m option was given." msgstr "" -#: sequencer.c:514 +#: sequencer.c:520 #, c-format msgid "Commit %s does not have parent %d" msgstr "" -#: sequencer.c:518 +#: sequencer.c:524 #, c-format msgid "Mainline was specified but commit %s is not a merge." msgstr "" #. TRANSLATORS: The first %s will be "revert" or #. "cherry-pick", the second %s a SHA1 -#: sequencer.c:531 +#: sequencer.c:537 #, c-format msgid "%s: cannot parse parent commit %s" msgstr "" -#: sequencer.c:535 +#: sequencer.c:541 #, c-format msgid "Cannot get commit message for %s" msgstr "" -#: sequencer.c:621 +#: sequencer.c:627 #, c-format msgid "could not revert %s... %s" msgstr "" -#: sequencer.c:622 +#: sequencer.c:628 #, c-format msgid "could not apply %s... %s" msgstr "" -#: sequencer.c:654 +#: sequencer.c:664 msgid "empty commit set passed" msgstr "" -#: sequencer.c:662 +#: sequencer.c:672 #, c-format msgid "git %s: failed to read the index" msgstr "" -#: sequencer.c:667 +#: sequencer.c:677 #, c-format msgid "git %s: failed to refresh the index" msgstr "" -#: sequencer.c:725 +#: sequencer.c:735 #, c-format msgid "Cannot %s during a %s" msgstr "" -#: sequencer.c:747 +#: sequencer.c:757 #, c-format msgid "Could not parse line %d." msgstr "" -#: sequencer.c:752 +#: sequencer.c:762 msgid "No commits parsed." msgstr "" -#: sequencer.c:765 +#: sequencer.c:775 #, c-format msgid "Could not open %s" msgstr "" -#: sequencer.c:769 +#: sequencer.c:779 #, c-format msgid "Could not read %s." msgstr "" -#: sequencer.c:776 +#: sequencer.c:786 #, c-format msgid "Unusable instruction sheet: %s" msgstr "" -#: sequencer.c:804 +#: sequencer.c:814 #, c-format msgid "Invalid key: %s" msgstr "" -#: sequencer.c:807 +#: sequencer.c:817 #, c-format msgid "Invalid value for %s: %s" msgstr "" -#: sequencer.c:819 +#: sequencer.c:829 #, c-format msgid "Malformed options sheet: %s" msgstr "" -#: sequencer.c:840 +#: sequencer.c:850 msgid "a cherry-pick or revert is already in progress" msgstr "" -#: sequencer.c:841 +#: sequencer.c:851 msgid "try \"git cherry-pick (--continue | --quit | --abort)\"" msgstr "" -#: sequencer.c:845 +#: sequencer.c:855 #, c-format msgid "Could not create sequencer directory %s" msgstr "" -#: sequencer.c:861 sequencer.c:946 +#: sequencer.c:871 sequencer.c:956 #, c-format msgid "Error wrapping up %s." msgstr "" -#: sequencer.c:880 sequencer.c:1014 +#: sequencer.c:890 sequencer.c:1024 msgid "no cherry-pick or revert in progress" msgstr "" -#: sequencer.c:882 +#: sequencer.c:892 msgid "cannot resolve HEAD" msgstr "" -#: sequencer.c:884 +#: sequencer.c:894 msgid "cannot abort from a branch yet to be born" msgstr "" -#: sequencer.c:906 builtin/apply.c:4060 +#: sequencer.c:916 builtin/apply.c:4061 #, c-format msgid "cannot open %s: %s" msgstr "" -#: sequencer.c:909 +#: sequencer.c:919 #, c-format msgid "cannot read %s: %s" msgstr "" -#: sequencer.c:910 +#: sequencer.c:920 msgid "unexpected end of file" msgstr "" -#: sequencer.c:916 +#: sequencer.c:926 #, c-format msgid "stored pre-cherry-pick HEAD file '%s' is corrupt" msgstr "" -#: sequencer.c:939 +#: sequencer.c:949 #, c-format msgid "Could not format %s." msgstr "" -#: sequencer.c:1083 +#: sequencer.c:1092 #, c-format msgid "%s: can't cherry-pick a %s" msgstr "" -#: sequencer.c:1085 +#: sequencer.c:1095 #, c-format msgid "%s: bad revision" msgstr "" -#: sequencer.c:1119 +#: sequencer.c:1129 msgid "Can't revert as initial commit" msgstr "" -#: sequencer.c:1120 +#: sequencer.c:1130 msgid "Can't cherry-pick into empty head" msgstr "" -#: sha1_name.c:1036 +#: sha1_name.c:440 +msgid "" +"Git normally never creates a ref that ends with 40 hex characters\n" +"because it will be ignored when you just specify 40-hex. These refs\n" +"may be created by mistake. For example,\n" +"\n" +" git checkout -b $br $(git rev-parse ...)\n" +"\n" +"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" +"examine these refs and maybe delete them. Turn this message off by\n" +"running \"git config advice.objectNameWarning false\"" +msgstr "" + +#: sha1_name.c:1097 msgid "HEAD does not point to a branch" msgstr "" -#: sha1_name.c:1039 +#: sha1_name.c:1100 #, c-format msgid "No such branch: '%s'" msgstr "" -#: sha1_name.c:1041 +#: sha1_name.c:1102 #, c-format msgid "No upstream configured for branch '%s'" msgstr "" -#: sha1_name.c:1044 +#: sha1_name.c:1106 #, c-format msgid "Upstream branch '%s' not stored as a remote-tracking branch" msgstr "" @@ -1134,160 +1182,160 @@ msgstr "" msgid "unable to access '%s': %s" msgstr "" -#: wrapper.c:423 +#: wrapper.c:429 #, c-format msgid "unable to access '%s'" msgstr "" -#: wrapper.c:434 +#: wrapper.c:440 #, c-format msgid "unable to look up current user in the passwd file: %s" msgstr "" -#: wrapper.c:435 +#: wrapper.c:441 msgid "no such user" msgstr "" -#: wt-status.c:140 +#: wt-status.c:141 msgid "Unmerged paths:" msgstr "" -#: wt-status.c:167 wt-status.c:194 +#: wt-status.c:168 wt-status.c:195 #, c-format msgid " (use \"git reset %s <file>...\" to unstage)" msgstr "" -#: wt-status.c:169 wt-status.c:196 +#: wt-status.c:170 wt-status.c:197 msgid " (use \"git rm --cached <file>...\" to unstage)" msgstr "" -#: wt-status.c:173 +#: wt-status.c:174 msgid " (use \"git add <file>...\" to mark resolution)" msgstr "" -#: wt-status.c:175 wt-status.c:179 +#: wt-status.c:176 wt-status.c:180 msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)" msgstr "" -#: wt-status.c:177 +#: wt-status.c:178 msgid " (use \"git rm <file>...\" to mark resolution)" msgstr "" -#: wt-status.c:188 +#: wt-status.c:189 msgid "Changes to be committed:" msgstr "" -#: wt-status.c:206 +#: wt-status.c:207 msgid "Changes not staged for commit:" msgstr "" -#: wt-status.c:210 +#: wt-status.c:211 msgid " (use \"git add <file>...\" to update what will be committed)" msgstr "" -#: wt-status.c:212 +#: wt-status.c:213 msgid " (use \"git add/rm <file>...\" to update what will be committed)" msgstr "" -#: wt-status.c:213 +#: wt-status.c:214 msgid "" " (use \"git checkout -- <file>...\" to discard changes in working directory)" msgstr "" -#: wt-status.c:215 +#: wt-status.c:216 msgid " (commit or discard the untracked or modified content in submodules)" msgstr "" -#: wt-status.c:227 +#: wt-status.c:228 #, c-format msgid " (use \"git %s <file>...\" to include in what will be committed)" msgstr "" -#: wt-status.c:244 +#: wt-status.c:245 msgid "bug" msgstr "" -#: wt-status.c:249 +#: wt-status.c:250 msgid "both deleted:" msgstr "" -#: wt-status.c:250 +#: wt-status.c:251 msgid "added by us:" msgstr "" -#: wt-status.c:251 +#: wt-status.c:252 msgid "deleted by them:" msgstr "" -#: wt-status.c:252 +#: wt-status.c:253 msgid "added by them:" msgstr "" -#: wt-status.c:253 +#: wt-status.c:254 msgid "deleted by us:" msgstr "" -#: wt-status.c:254 +#: wt-status.c:255 msgid "both added:" msgstr "" -#: wt-status.c:255 +#: wt-status.c:256 msgid "both modified:" msgstr "" -#: wt-status.c:285 +#: wt-status.c:286 msgid "new commits, " msgstr "" -#: wt-status.c:287 +#: wt-status.c:288 msgid "modified content, " msgstr "" -#: wt-status.c:289 +#: wt-status.c:290 msgid "untracked content, " msgstr "" -#: wt-status.c:306 +#: wt-status.c:307 #, c-format msgid "new file: %s" msgstr "" -#: wt-status.c:309 +#: wt-status.c:310 #, c-format msgid "copied: %s -> %s" msgstr "" -#: wt-status.c:312 +#: wt-status.c:313 #, c-format msgid "deleted: %s" msgstr "" -#: wt-status.c:315 +#: wt-status.c:316 #, c-format msgid "modified: %s" msgstr "" -#: wt-status.c:318 +#: wt-status.c:319 #, c-format msgid "renamed: %s -> %s" msgstr "" -#: wt-status.c:321 +#: wt-status.c:322 #, c-format msgid "typechange: %s" msgstr "" -#: wt-status.c:324 +#: wt-status.c:325 #, c-format msgid "unknown: %s" msgstr "" -#: wt-status.c:327 +#: wt-status.c:328 #, c-format msgid "unmerged: %s" msgstr "" -#: wt-status.c:330 +#: wt-status.c:331 #, c-format msgid "bug: unhandled diff status %c" msgstr "" @@ -1296,7 +1344,7 @@ msgstr "" msgid "You have unmerged paths." msgstr "" -#: wt-status.c:806 wt-status.c:958 +#: wt-status.c:806 msgid " (fix conflicts and run \"git commit\")" msgstr "" @@ -1317,7 +1365,7 @@ msgid "The current patch is empty." msgstr "" #: wt-status.c:829 -msgid " (fix conflicts and then run \"git am --resolved\")" +msgid " (fix conflicts and then run \"git am --continue\")" msgstr "" #: wt-status.c:831 @@ -1389,37 +1437,45 @@ msgstr "" msgid "You are currently cherry-picking." msgstr "" +#: wt-status.c:958 +msgid " (fix conflicts and run \"git cherry-pick --continue\")" +msgstr "" + #: wt-status.c:961 -msgid " (all conflicts fixed: run \"git commit\")" +msgid " (all conflicts fixed: run \"git cherry-pick --continue\")" +msgstr "" + +#: wt-status.c:963 +msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)" msgstr "" -#: wt-status.c:970 +#: wt-status.c:972 #, c-format msgid "You are currently reverting commit %s." msgstr "" -#: wt-status.c:975 +#: wt-status.c:977 msgid " (fix conflicts and run \"git revert --continue\")" msgstr "" -#: wt-status.c:978 +#: wt-status.c:980 msgid " (all conflicts fixed: run \"git revert --continue\")" msgstr "" -#: wt-status.c:980 +#: wt-status.c:982 msgid " (use \"git revert --abort\" to cancel the revert operation)" msgstr "" -#: wt-status.c:991 +#: wt-status.c:993 #, c-format msgid "You are currently bisecting, started from branch '%s'." msgstr "" -#: wt-status.c:995 +#: wt-status.c:997 msgid "You are currently bisecting." msgstr "" -#: wt-status.c:998 +#: wt-status.c:1000 msgid " (use \"git bisect reset\" to get back to the original branch)" msgstr "" @@ -1427,31 +1483,35 @@ msgstr "" msgid "On branch " msgstr "" -#: wt-status.c:1184 +#: wt-status.c:1180 +msgid "rebase in progress; onto " +msgstr "" + +#: wt-status.c:1187 msgid "HEAD detached at " msgstr "" -#: wt-status.c:1186 +#: wt-status.c:1189 msgid "HEAD detached from " msgstr "" -#: wt-status.c:1189 +#: wt-status.c:1192 msgid "Not currently on any branch." msgstr "" -#: wt-status.c:1206 +#: wt-status.c:1209 msgid "Initial commit" msgstr "" -#: wt-status.c:1220 +#: wt-status.c:1223 msgid "Untracked files" msgstr "" -#: wt-status.c:1222 +#: wt-status.c:1225 msgid "Ignored files" msgstr "" -#: wt-status.c:1226 +#: wt-status.c:1229 #, c-format msgid "" "It took %.2f seconds to enumerate untracked files. 'status -uno'\n" @@ -1459,82 +1519,82 @@ msgid "" "new files yourself (see 'git help status')." msgstr "" -#: wt-status.c:1232 +#: wt-status.c:1235 #, c-format msgid "Untracked files not listed%s" msgstr "" -#: wt-status.c:1234 +#: wt-status.c:1237 msgid " (use -u option to show untracked files)" msgstr "" -#: wt-status.c:1240 +#: wt-status.c:1243 msgid "No changes" msgstr "" -#: wt-status.c:1245 +#: wt-status.c:1248 #, c-format msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n" msgstr "" -#: wt-status.c:1248 +#: wt-status.c:1251 #, c-format msgid "no changes added to commit\n" msgstr "" -#: wt-status.c:1251 +#: wt-status.c:1254 #, c-format msgid "" "nothing added to commit but untracked files present (use \"git add\" to " "track)\n" msgstr "" -#: wt-status.c:1254 +#: wt-status.c:1257 #, c-format msgid "nothing added to commit but untracked files present\n" msgstr "" -#: wt-status.c:1257 +#: wt-status.c:1260 #, c-format msgid "nothing to commit (create/copy files and use \"git add\" to track)\n" msgstr "" -#: wt-status.c:1260 wt-status.c:1265 +#: wt-status.c:1263 wt-status.c:1268 #, c-format msgid "nothing to commit\n" msgstr "" -#: wt-status.c:1263 +#: wt-status.c:1266 #, c-format msgid "nothing to commit (use -u to show untracked files)\n" msgstr "" -#: wt-status.c:1267 +#: wt-status.c:1270 #, c-format msgid "nothing to commit, working directory clean\n" msgstr "" -#: wt-status.c:1375 +#: wt-status.c:1378 msgid "HEAD (no branch)" msgstr "" -#: wt-status.c:1381 +#: wt-status.c:1384 msgid "Initial commit on " msgstr "" -#: wt-status.c:1396 +#: wt-status.c:1399 msgid "behind " msgstr "" -#: wt-status.c:1399 wt-status.c:1402 +#: wt-status.c:1402 wt-status.c:1405 msgid "ahead " msgstr "" -#: wt-status.c:1404 +#: wt-status.c:1407 msgid ", behind " msgstr "" -#: compat/precompose_utf8.c:58 builtin/clone.c:352 +#: compat/precompose_utf8.c:58 builtin/clone.c:351 #, c-format msgid "failed to unlink '%s'" msgstr "" @@ -1594,7 +1654,7 @@ msgstr "" msgid "unexpected diff status %c" msgstr "" -#: builtin/add.c:149 builtin/commit.c:233 +#: builtin/add.c:149 builtin/commit.c:252 msgid "updating files failed" msgstr "" @@ -1607,7 +1667,7 @@ msgstr "" msgid "Unstaged changes after refreshing the index:" msgstr "" -#: builtin/add.c:256 builtin/add.c:572 builtin/rm.c:275 +#: builtin/add.c:256 builtin/add.c:573 builtin/rm.c:337 #, c-format msgid "pathspec '%s' did not match any files" msgstr "" @@ -1616,127 +1676,127 @@ msgstr "" msgid "Could not read the index" msgstr "" -#: builtin/add.c:349 +#: builtin/add.c:350 #, c-format msgid "Could not open '%s' for writing." msgstr "" -#: builtin/add.c:353 +#: builtin/add.c:354 msgid "Could not write patch" msgstr "" -#: builtin/add.c:358 +#: builtin/add.c:359 #, c-format msgid "Could not stat '%s'" msgstr "" -#: builtin/add.c:360 +#: builtin/add.c:361 msgid "Empty patch. Aborted." msgstr "" -#: builtin/add.c:366 +#: builtin/add.c:367 #, c-format msgid "Could not apply '%s'" msgstr "" -#: builtin/add.c:376 +#: builtin/add.c:377 msgid "The following paths are ignored by one of your .gitignore files:\n" msgstr "" -#: builtin/add.c:393 builtin/clean.c:161 builtin/fetch.c:78 builtin/mv.c:63 -#: builtin/prune-packed.c:76 builtin/push.c:425 builtin/remote.c:1253 -#: builtin/rm.c:206 +#: builtin/add.c:394 builtin/clean.c:875 builtin/fetch.c:78 builtin/mv.c:63 +#: builtin/prune-packed.c:73 builtin/push.c:451 builtin/remote.c:1253 +#: builtin/rm.c:268 msgid "dry run" msgstr "" -#: builtin/add.c:394 builtin/apply.c:4409 builtin/check-ignore.c:19 -#: builtin/commit.c:1152 builtin/count-objects.c:95 builtin/fsck.c:613 -#: builtin/log.c:1518 builtin/mv.c:62 builtin/read-tree.c:112 +#: builtin/add.c:395 builtin/apply.c:4410 builtin/check-ignore.c:19 +#: builtin/commit.c:1220 builtin/count-objects.c:95 builtin/fsck.c:613 +#: builtin/log.c:1573 builtin/mv.c:62 builtin/read-tree.c:113 msgid "be verbose" msgstr "" -#: builtin/add.c:396 +#: builtin/add.c:397 msgid "interactive picking" msgstr "" -#: builtin/add.c:397 builtin/checkout.c:1063 builtin/reset.c:258 +#: builtin/add.c:398 builtin/checkout.c:1073 builtin/reset.c:261 msgid "select hunks interactively" msgstr "" -#: builtin/add.c:398 +#: builtin/add.c:399 msgid "edit current diff and apply" msgstr "" -#: builtin/add.c:399 +#: builtin/add.c:400 msgid "allow adding otherwise ignored files" msgstr "" -#: builtin/add.c:400 +#: builtin/add.c:401 msgid "update tracked files" msgstr "" -#: builtin/add.c:401 +#: builtin/add.c:402 msgid "record only the fact that the path will be added later" msgstr "" -#: builtin/add.c:402 +#: builtin/add.c:403 msgid "add changes from all tracked and untracked files" msgstr "" #. takes no arguments -#: builtin/add.c:405 +#: builtin/add.c:406 msgid "ignore paths removed in the working tree (same as --no-all)" msgstr "" -#: builtin/add.c:407 +#: builtin/add.c:408 msgid "don't add, only refresh the index" msgstr "" -#: builtin/add.c:408 +#: builtin/add.c:409 msgid "just skip files which cannot be added because of errors" msgstr "" -#: builtin/add.c:409 +#: builtin/add.c:410 msgid "check if - even missing - files are ignored in dry run" msgstr "" -#: builtin/add.c:431 +#: builtin/add.c:432 #, c-format msgid "Use -f if you really want to add them.\n" msgstr "" -#: builtin/add.c:432 +#: builtin/add.c:433 msgid "no files added" msgstr "" -#: builtin/add.c:438 +#: builtin/add.c:439 msgid "adding files failed" msgstr "" -#: builtin/add.c:477 +#: builtin/add.c:478 msgid "-A and -u are mutually incompatible" msgstr "" -#: builtin/add.c:495 +#: builtin/add.c:496 msgid "Option --ignore-missing can only be used together with --dry-run" msgstr "" -#: builtin/add.c:525 +#: builtin/add.c:526 #, c-format msgid "Nothing specified, nothing added.\n" msgstr "" -#: builtin/add.c:526 +#: builtin/add.c:527 #, c-format msgid "Maybe you wanted to say 'git add .'?\n" msgstr "" -#: builtin/add.c:532 builtin/check-ignore.c:66 builtin/clean.c:204 -#: builtin/commit.c:293 builtin/mv.c:82 builtin/rm.c:235 +#: builtin/add.c:533 builtin/check-ignore.c:161 builtin/clean.c:919 +#: builtin/commit.c:312 builtin/mv.c:82 builtin/rm.c:297 msgid "index file corrupt" msgstr "" -#: builtin/add.c:604 builtin/apply.c:4505 builtin/mv.c:229 builtin/rm.c:370 +#: builtin/add.c:605 builtin/apply.c:4506 builtin/mv.c:229 builtin/rm.c:432 msgid "Unable to write new index file" msgstr "" @@ -1913,293 +1973,293 @@ msgstr "" msgid "cannot checkout %s" msgstr "" -#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3193 +#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3194 #, c-format msgid "read of %s failed" msgstr "" -#: builtin/apply.c:3173 builtin/apply.c:3395 +#: builtin/apply.c:3174 builtin/apply.c:3396 #, c-format msgid "path %s has been renamed/deleted" msgstr "" -#: builtin/apply.c:3254 builtin/apply.c:3409 +#: builtin/apply.c:3255 builtin/apply.c:3410 #, c-format msgid "%s: does not exist in index" msgstr "" -#: builtin/apply.c:3258 builtin/apply.c:3401 builtin/apply.c:3423 +#: builtin/apply.c:3259 builtin/apply.c:3402 builtin/apply.c:3424 #, c-format msgid "%s: %s" msgstr "" -#: builtin/apply.c:3263 builtin/apply.c:3417 +#: builtin/apply.c:3264 builtin/apply.c:3418 #, c-format msgid "%s: does not match index" msgstr "" -#: builtin/apply.c:3365 +#: builtin/apply.c:3366 msgid "removal patch leaves file contents" msgstr "" -#: builtin/apply.c:3434 +#: builtin/apply.c:3435 #, c-format msgid "%s: wrong type" msgstr "" -#: builtin/apply.c:3436 +#: builtin/apply.c:3437 #, c-format msgid "%s has type %o, expected %o" msgstr "" -#: builtin/apply.c:3537 +#: builtin/apply.c:3538 #, c-format msgid "%s: already exists in index" msgstr "" -#: builtin/apply.c:3540 +#: builtin/apply.c:3541 #, c-format msgid "%s: already exists in working directory" msgstr "" -#: builtin/apply.c:3560 +#: builtin/apply.c:3561 #, c-format msgid "new mode (%o) of %s does not match old mode (%o)" msgstr "" -#: builtin/apply.c:3565 +#: builtin/apply.c:3566 #, c-format msgid "new mode (%o) of %s does not match old mode (%o) of %s" msgstr "" -#: builtin/apply.c:3573 +#: builtin/apply.c:3574 #, c-format msgid "%s: patch does not apply" msgstr "" -#: builtin/apply.c:3586 +#: builtin/apply.c:3587 #, c-format msgid "Checking patch %s..." msgstr "" -#: builtin/apply.c:3679 builtin/checkout.c:216 builtin/reset.c:124 +#: builtin/apply.c:3680 builtin/checkout.c:216 builtin/reset.c:127 #, c-format msgid "make_cache_entry failed for path '%s'" msgstr "" -#: builtin/apply.c:3822 +#: builtin/apply.c:3823 #, c-format msgid "unable to remove %s from index" msgstr "" -#: builtin/apply.c:3850 +#: builtin/apply.c:3851 #, c-format -msgid "corrupt patch for subproject %s" +msgid "corrupt patch for submodule %s" msgstr "" -#: builtin/apply.c:3854 +#: builtin/apply.c:3855 #, c-format msgid "unable to stat newly created file '%s'" msgstr "" -#: builtin/apply.c:3859 +#: builtin/apply.c:3860 #, c-format msgid "unable to create backing store for newly created file %s" msgstr "" -#: builtin/apply.c:3862 builtin/apply.c:3970 +#: builtin/apply.c:3863 builtin/apply.c:3971 #, c-format msgid "unable to add cache entry for %s" msgstr "" -#: builtin/apply.c:3895 +#: builtin/apply.c:3896 #, c-format msgid "closing file '%s'" msgstr "" -#: builtin/apply.c:3944 +#: builtin/apply.c:3945 #, c-format msgid "unable to write file '%s' mode %o" msgstr "" -#: builtin/apply.c:4031 +#: builtin/apply.c:4032 #, c-format msgid "Applied patch %s cleanly." msgstr "" -#: builtin/apply.c:4039 +#: builtin/apply.c:4040 msgid "internal error" msgstr "" #. Say this even without --verbose -#: builtin/apply.c:4042 +#: builtin/apply.c:4043 #, c-format msgid "Applying patch %%s with %d reject..." msgid_plural "Applying patch %%s with %d rejects..." msgstr[0] "" msgstr[1] "" -#: builtin/apply.c:4052 +#: builtin/apply.c:4053 #, c-format msgid "truncating .rej filename to %.*s.rej" msgstr "" -#: builtin/apply.c:4073 +#: builtin/apply.c:4074 #, c-format msgid "Hunk #%d applied cleanly." msgstr "" -#: builtin/apply.c:4076 +#: builtin/apply.c:4077 #, c-format msgid "Rejected hunk #%d." msgstr "" -#: builtin/apply.c:4226 +#: builtin/apply.c:4227 msgid "unrecognized input" msgstr "" -#: builtin/apply.c:4237 +#: builtin/apply.c:4238 msgid "unable to read index file" msgstr "" -#: builtin/apply.c:4356 builtin/apply.c:4359 builtin/clone.c:92 +#: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:91 #: builtin/fetch.c:63 msgid "path" msgstr "" -#: builtin/apply.c:4357 +#: builtin/apply.c:4358 msgid "don't apply changes matching the given path" msgstr "" -#: builtin/apply.c:4360 +#: builtin/apply.c:4361 msgid "apply changes matching the given path" msgstr "" -#: builtin/apply.c:4362 +#: builtin/apply.c:4363 msgid "num" msgstr "" -#: builtin/apply.c:4363 +#: builtin/apply.c:4364 msgid "remove <num> leading slashes from traditional diff paths" msgstr "" -#: builtin/apply.c:4366 +#: builtin/apply.c:4367 msgid "ignore additions made by the patch" msgstr "" -#: builtin/apply.c:4368 +#: builtin/apply.c:4369 msgid "instead of applying the patch, output diffstat for the input" msgstr "" -#: builtin/apply.c:4372 +#: builtin/apply.c:4373 msgid "show number of added and deleted lines in decimal notation" msgstr "" -#: builtin/apply.c:4374 +#: builtin/apply.c:4375 msgid "instead of applying the patch, output a summary for the input" msgstr "" -#: builtin/apply.c:4376 +#: builtin/apply.c:4377 msgid "instead of applying the patch, see if the patch is applicable" msgstr "" -#: builtin/apply.c:4378 +#: builtin/apply.c:4379 msgid "make sure the patch is applicable to the current index" msgstr "" -#: builtin/apply.c:4380 +#: builtin/apply.c:4381 msgid "apply a patch without touching the working tree" msgstr "" -#: builtin/apply.c:4382 +#: builtin/apply.c:4383 msgid "also apply the patch (use with --stat/--summary/--check)" msgstr "" -#: builtin/apply.c:4384 +#: builtin/apply.c:4385 msgid "attempt three-way merge if a patch does not apply" msgstr "" -#: builtin/apply.c:4386 +#: builtin/apply.c:4387 msgid "build a temporary index based on embedded index information" msgstr "" -#: builtin/apply.c:4388 builtin/checkout-index.c:197 builtin/ls-files.c:456 +#: builtin/apply.c:4389 builtin/checkout-index.c:197 builtin/ls-files.c:462 msgid "paths are separated with NUL character" msgstr "" -#: builtin/apply.c:4391 +#: builtin/apply.c:4392 msgid "ensure at least <n> lines of context match" msgstr "" -#: builtin/apply.c:4392 +#: builtin/apply.c:4393 msgid "action" msgstr "" -#: builtin/apply.c:4393 +#: builtin/apply.c:4394 msgid "detect new or modified lines that have whitespace errors" msgstr "" -#: builtin/apply.c:4396 builtin/apply.c:4399 +#: builtin/apply.c:4397 builtin/apply.c:4400 msgid "ignore changes in whitespace when finding context" msgstr "" -#: builtin/apply.c:4402 +#: builtin/apply.c:4403 msgid "apply the patch in reverse" msgstr "" -#: builtin/apply.c:4404 +#: builtin/apply.c:4405 msgid "don't expect at least one line of context" msgstr "" -#: builtin/apply.c:4406 +#: builtin/apply.c:4407 msgid "leave the rejected hunks in corresponding *.rej files" msgstr "" -#: builtin/apply.c:4408 +#: builtin/apply.c:4409 msgid "allow overlapping hunks" msgstr "" -#: builtin/apply.c:4411 +#: builtin/apply.c:4412 msgid "tolerate incorrectly detected missing new-line at the end of file" msgstr "" -#: builtin/apply.c:4414 +#: builtin/apply.c:4415 msgid "do not trust the line counts in the hunk headers" msgstr "" -#: builtin/apply.c:4416 +#: builtin/apply.c:4417 msgid "root" msgstr "" -#: builtin/apply.c:4417 +#: builtin/apply.c:4418 msgid "prepend <root> to all filenames" msgstr "" -#: builtin/apply.c:4439 +#: builtin/apply.c:4440 msgid "--3way outside a repository" msgstr "" -#: builtin/apply.c:4447 +#: builtin/apply.c:4448 msgid "--index outside a repository" msgstr "" -#: builtin/apply.c:4450 +#: builtin/apply.c:4451 msgid "--cached outside a repository" msgstr "" -#: builtin/apply.c:4466 +#: builtin/apply.c:4467 #, c-format msgid "can't open patch '%s'" msgstr "" -#: builtin/apply.c:4480 +#: builtin/apply.c:4481 #, c-format msgid "squelched %d whitespace error" msgid_plural "squelched %d whitespace errors" msgstr[0] "" msgstr[1] "" -#: builtin/apply.c:4486 builtin/apply.c:4496 +#: builtin/apply.c:4487 builtin/apply.c:4497 #, c-format msgid "%d line adds whitespace errors." msgid_plural "%d lines add whitespace errors." @@ -2253,103 +2313,103 @@ msgstr "" msgid "update BISECT_HEAD instead of checking out the current commit" msgstr "" -#: builtin/blame.c:25 +#: builtin/blame.c:26 msgid "git blame [options] [rev-opts] [rev] [--] file" msgstr "" -#: builtin/blame.c:30 +#: builtin/blame.c:31 msgid "[rev-opts] are documented in git-rev-list(1)" msgstr "" -#: builtin/blame.c:2355 +#: builtin/blame.c:2276 msgid "Show blame entries as we find them, incrementally" msgstr "" -#: builtin/blame.c:2356 +#: builtin/blame.c:2277 msgid "Show blank SHA-1 for boundary commits (Default: off)" msgstr "" -#: builtin/blame.c:2357 +#: builtin/blame.c:2278 msgid "Do not treat root commits as boundaries (Default: off)" msgstr "" -#: builtin/blame.c:2358 +#: builtin/blame.c:2279 msgid "Show work cost statistics" msgstr "" -#: builtin/blame.c:2359 +#: builtin/blame.c:2280 msgid "Show output score for blame entries" msgstr "" -#: builtin/blame.c:2360 +#: builtin/blame.c:2281 msgid "Show original filename (Default: auto)" msgstr "" -#: builtin/blame.c:2361 +#: builtin/blame.c:2282 msgid "Show original linenumber (Default: off)" msgstr "" -#: builtin/blame.c:2362 +#: builtin/blame.c:2283 msgid "Show in a format designed for machine consumption" msgstr "" -#: builtin/blame.c:2363 +#: builtin/blame.c:2284 msgid "Show porcelain format with per-line commit information" msgstr "" -#: builtin/blame.c:2364 +#: builtin/blame.c:2285 msgid "Use the same output mode as git-annotate (Default: off)" msgstr "" -#: builtin/blame.c:2365 +#: builtin/blame.c:2286 msgid "Show raw timestamp (Default: off)" msgstr "" -#: builtin/blame.c:2366 +#: builtin/blame.c:2287 msgid "Show long commit SHA1 (Default: off)" msgstr "" -#: builtin/blame.c:2367 +#: builtin/blame.c:2288 msgid "Suppress author name and timestamp (Default: off)" msgstr "" -#: builtin/blame.c:2368 +#: builtin/blame.c:2289 msgid "Show author email instead of name (Default: off)" msgstr "" -#: builtin/blame.c:2369 +#: builtin/blame.c:2290 msgid "Ignore whitespace differences" msgstr "" -#: builtin/blame.c:2370 +#: builtin/blame.c:2291 msgid "Spend extra cycles to find better match" msgstr "" -#: builtin/blame.c:2371 +#: builtin/blame.c:2292 msgid "Use revisions from <file> instead of calling git-rev-list" msgstr "" -#: builtin/blame.c:2372 +#: builtin/blame.c:2293 msgid "Use <file>'s contents as the final image" msgstr "" -#: builtin/blame.c:2373 builtin/blame.c:2374 +#: builtin/blame.c:2294 builtin/blame.c:2295 msgid "score" msgstr "" -#: builtin/blame.c:2373 +#: builtin/blame.c:2294 msgid "Find line copies within and across files" msgstr "" -#: builtin/blame.c:2374 +#: builtin/blame.c:2295 msgid "Find line movements within and across files" msgstr "" -#: builtin/blame.c:2375 +#: builtin/blame.c:2296 msgid "n,m" msgstr "" -#: builtin/blame.c:2375 +#: builtin/blame.c:2296 msgid "Process only line range n,m, counting from 1" msgstr "" @@ -2575,8 +2635,8 @@ msgid "act on remote-tracking branches" msgstr "" #: builtin/branch.c:805 builtin/branch.c:811 builtin/branch.c:832 -#: builtin/branch.c:838 builtin/commit.c:1368 builtin/commit.c:1369 -#: builtin/commit.c:1370 builtin/commit.c:1371 builtin/tag.c:468 +#: builtin/branch.c:838 builtin/commit.c:1433 builtin/commit.c:1434 +#: builtin/commit.c:1435 builtin/commit.c:1436 builtin/tag.c:468 msgid "commit" msgstr "" @@ -2640,7 +2700,7 @@ msgstr "" msgid "Failed to resolve HEAD as a valid ref." msgstr "" -#: builtin/branch.c:860 builtin/clone.c:619 +#: builtin/branch.c:860 builtin/clone.c:630 msgid "HEAD not found below refs/heads!" msgstr "" @@ -2753,43 +2813,43 @@ msgstr "" msgid "Need a repository to unbundle." msgstr "" -#: builtin/cat-file.c:176 +#: builtin/cat-file.c:285 msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>" msgstr "" -#: builtin/cat-file.c:177 +#: builtin/cat-file.c:286 msgid "git cat-file (--batch|--batch-check) < <list_of_objects>" msgstr "" -#: builtin/cat-file.c:195 +#: builtin/cat-file.c:323 msgid "<type> can be one of: blob, tree, commit, tag" msgstr "" -#: builtin/cat-file.c:196 +#: builtin/cat-file.c:324 msgid "show object type" msgstr "" -#: builtin/cat-file.c:197 +#: builtin/cat-file.c:325 msgid "show object size" msgstr "" -#: builtin/cat-file.c:199 +#: builtin/cat-file.c:327 msgid "exit with zero when there's no error" msgstr "" -#: builtin/cat-file.c:200 +#: builtin/cat-file.c:328 msgid "pretty-print object's content" msgstr "" -#: builtin/cat-file.c:202 +#: builtin/cat-file.c:330 msgid "for blob objects, run textconv on object's content" msgstr "" -#: builtin/cat-file.c:204 +#: builtin/cat-file.c:332 msgid "show info and content of objects fed from the standard input" msgstr "" -#: builtin/cat-file.c:207 +#: builtin/cat-file.c:335 msgid "show info about objects fed from the standard input" msgstr "" @@ -2817,30 +2877,55 @@ msgstr "" msgid "input paths are terminated by a null character" msgstr "" -#: builtin/check-ignore.c:18 builtin/checkout.c:1044 builtin/gc.c:177 +#: builtin/check-ignore.c:18 builtin/checkout.c:1054 builtin/gc.c:177 msgid "suppress progress reporting" msgstr "" -#: builtin/check-ignore.c:146 +#: builtin/check-ignore.c:26 +msgid "show non-matching input paths" +msgstr "" + +#: builtin/check-ignore.c:143 msgid "cannot specify pathnames with --stdin" msgstr "" -#: builtin/check-ignore.c:149 +#: builtin/check-ignore.c:146 msgid "-z only makes sense with --stdin" msgstr "" -#: builtin/check-ignore.c:151 +#: builtin/check-ignore.c:148 msgid "no path specified" msgstr "" -#: builtin/check-ignore.c:155 +#: builtin/check-ignore.c:152 msgid "--quiet is only valid with a single pathname" msgstr "" -#: builtin/check-ignore.c:157 +#: builtin/check-ignore.c:154 msgid "cannot have both --quiet and --verbose" msgstr "" +#: builtin/check-ignore.c:157 +msgid "--non-matching is only valid with --verbose" +msgstr "" + +#: builtin/check-mailmap.c:8 +msgid "git check-mailmap [options] <contact>..." +msgstr "" + +#: builtin/check-mailmap.c:13 +msgid "also read contacts from stdin" +msgstr "" + +#: builtin/check-mailmap.c:24 +#, c-format +msgid "unable to parse contact: %s" +msgstr "" + +#: builtin/check-mailmap.c:47 +msgid "no contacts specified" +msgstr "" + #: builtin/checkout-index.c:126 msgid "git checkout-index [options] [--] [<file>...]" msgstr "" @@ -2957,42 +3042,42 @@ msgstr "" msgid "Can not do reflog for '%s'\n" msgstr "" -#: builtin/checkout.c:634 +#: builtin/checkout.c:639 msgid "HEAD is now at" msgstr "" -#: builtin/checkout.c:641 +#: builtin/checkout.c:646 #, c-format msgid "Reset branch '%s'\n" msgstr "" -#: builtin/checkout.c:644 +#: builtin/checkout.c:649 #, c-format msgid "Already on '%s'\n" msgstr "" -#: builtin/checkout.c:648 +#: builtin/checkout.c:653 #, c-format msgid "Switched to and reset branch '%s'\n" msgstr "" -#: builtin/checkout.c:650 builtin/checkout.c:987 +#: builtin/checkout.c:655 builtin/checkout.c:997 #, c-format msgid "Switched to a new branch '%s'\n" msgstr "" -#: builtin/checkout.c:652 +#: builtin/checkout.c:657 #, c-format msgid "Switched to branch '%s'\n" msgstr "" -#: builtin/checkout.c:708 +#: builtin/checkout.c:713 #, c-format msgid " ... and %d more.\n" msgstr "" #. The singular version -#: builtin/checkout.c:714 +#: builtin/checkout.c:719 #, c-format msgid "" "Warning: you are leaving %d commit behind, not connected to\n" @@ -3007,7 +3092,7 @@ msgid_plural "" msgstr[0] "" msgstr[1] "" -#: builtin/checkout.c:732 +#: builtin/checkout.c:737 #, c-format msgid "" "If you want to keep them by creating a new branch, this may be a good time\n" @@ -3017,450 +3102,547 @@ msgid "" "\n" msgstr "" -#: builtin/checkout.c:762 +#: builtin/checkout.c:767 msgid "internal error in revision walk" msgstr "" -#: builtin/checkout.c:766 +#: builtin/checkout.c:771 msgid "Previous HEAD position was" msgstr "" -#: builtin/checkout.c:793 builtin/checkout.c:982 +#: builtin/checkout.c:798 builtin/checkout.c:992 msgid "You are on a branch yet to be born" msgstr "" #. case (1) -#: builtin/checkout.c:918 +#: builtin/checkout.c:928 #, c-format msgid "invalid reference: %s" msgstr "" #. case (1): want a tree -#: builtin/checkout.c:957 +#: builtin/checkout.c:967 #, c-format msgid "reference is not a tree: %s" msgstr "" -#: builtin/checkout.c:996 +#: builtin/checkout.c:1006 msgid "paths cannot be used with switching branches" msgstr "" -#: builtin/checkout.c:999 builtin/checkout.c:1003 +#: builtin/checkout.c:1009 builtin/checkout.c:1013 #, c-format msgid "'%s' cannot be used with switching branches" msgstr "" -#: builtin/checkout.c:1007 builtin/checkout.c:1010 builtin/checkout.c:1015 -#: builtin/checkout.c:1018 +#: builtin/checkout.c:1017 builtin/checkout.c:1020 builtin/checkout.c:1025 +#: builtin/checkout.c:1028 #, c-format msgid "'%s' cannot be used with '%s'" msgstr "" -#: builtin/checkout.c:1023 +#: builtin/checkout.c:1033 #, c-format msgid "Cannot switch branch to a non-commit '%s'" msgstr "" -#: builtin/checkout.c:1045 builtin/checkout.c:1047 builtin/clone.c:90 +#: builtin/checkout.c:1055 builtin/checkout.c:1057 builtin/clone.c:89 #: builtin/remote.c:169 builtin/remote.c:171 msgid "branch" msgstr "" -#: builtin/checkout.c:1046 +#: builtin/checkout.c:1056 msgid "create and checkout a new branch" msgstr "" -#: builtin/checkout.c:1048 +#: builtin/checkout.c:1058 msgid "create/reset and checkout a branch" msgstr "" -#: builtin/checkout.c:1049 +#: builtin/checkout.c:1059 msgid "create reflog for new branch" msgstr "" -#: builtin/checkout.c:1050 +#: builtin/checkout.c:1060 msgid "detach the HEAD at named commit" msgstr "" -#: builtin/checkout.c:1051 +#: builtin/checkout.c:1061 msgid "set upstream info for new branch" msgstr "" -#: builtin/checkout.c:1053 +#: builtin/checkout.c:1063 msgid "new branch" msgstr "" -#: builtin/checkout.c:1053 +#: builtin/checkout.c:1063 msgid "new unparented branch" msgstr "" -#: builtin/checkout.c:1054 +#: builtin/checkout.c:1064 msgid "checkout our version for unmerged files" msgstr "" -#: builtin/checkout.c:1056 +#: builtin/checkout.c:1066 msgid "checkout their version for unmerged files" msgstr "" -#: builtin/checkout.c:1058 +#: builtin/checkout.c:1068 msgid "force checkout (throw away local modifications)" msgstr "" -#: builtin/checkout.c:1059 +#: builtin/checkout.c:1069 msgid "perform a 3-way merge with the new branch" msgstr "" -#: builtin/checkout.c:1060 builtin/merge.c:217 +#: builtin/checkout.c:1070 builtin/merge.c:232 msgid "update ignored files (default)" msgstr "" -#: builtin/checkout.c:1061 builtin/log.c:1158 parse-options.h:245 +#: builtin/checkout.c:1071 builtin/log.c:1208 parse-options.h:249 msgid "style" msgstr "" -#: builtin/checkout.c:1062 +#: builtin/checkout.c:1072 msgid "conflict style (merge or diff3)" msgstr "" -#: builtin/checkout.c:1065 +#: builtin/checkout.c:1075 msgid "do not limit pathspecs to sparse entries only" msgstr "" -#: builtin/checkout.c:1067 +#: builtin/checkout.c:1077 msgid "second guess 'git checkout no-such-branch'" msgstr "" -#: builtin/checkout.c:1091 +#: builtin/checkout.c:1101 msgid "-b, -B and --orphan are mutually exclusive" msgstr "" -#: builtin/checkout.c:1108 +#: builtin/checkout.c:1118 msgid "--track needs a branch name" msgstr "" -#: builtin/checkout.c:1115 +#: builtin/checkout.c:1125 msgid "Missing branch name; try -b" msgstr "" -#: builtin/checkout.c:1150 +#: builtin/checkout.c:1160 msgid "invalid path specification" msgstr "" -#: builtin/checkout.c:1157 +#: builtin/checkout.c:1167 #, c-format msgid "" "Cannot update paths and switch to branch '%s' at the same time.\n" "Did you intend to checkout '%s' which can not be resolved as commit?" msgstr "" -#: builtin/checkout.c:1162 +#: builtin/checkout.c:1172 #, c-format msgid "git checkout: --detach does not take a path argument '%s'" msgstr "" -#: builtin/checkout.c:1166 +#: builtin/checkout.c:1176 msgid "" "git checkout: --ours/--theirs, --force and --merge are incompatible when\n" "checking out of the index." msgstr "" -#: builtin/clean.c:20 -msgid "git clean [-d] [-f] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." +#: builtin/clean.c:25 +msgid "" +"git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." msgstr "" -#: builtin/clean.c:24 +#: builtin/clean.c:29 #, c-format msgid "Removing %s\n" msgstr "" -#: builtin/clean.c:25 +#: builtin/clean.c:30 #, c-format msgid "Would remove %s\n" msgstr "" -#: builtin/clean.c:26 +#: builtin/clean.c:31 #, c-format msgid "Skipping repository %s\n" msgstr "" -#: builtin/clean.c:27 +#: builtin/clean.c:32 #, c-format msgid "Would skip repository %s\n" msgstr "" -#: builtin/clean.c:28 +#: builtin/clean.c:33 #, c-format msgid "failed to remove %s" msgstr "" -#: builtin/clean.c:160 +#: builtin/clean.c:293 +msgid "" +"Prompt help:\n" +"1 - select a numbered item\n" +"foo - select item based on unique prefix\n" +" - (empty) select nothing" +msgstr "" + +#: builtin/clean.c:297 +msgid "" +"Prompt help:\n" +"1 - select a single item\n" +"3-5 - select a range of items\n" +"2-3,6-9 - select multiple ranges\n" +"foo - select item based on unique prefix\n" +"-... - unselect specified items\n" +"* - choose all items\n" +" - (empty) finish selecting" +msgstr "" + +#: builtin/clean.c:515 +#, c-format +msgid "Huh (%s)?" +msgstr "" + +#: builtin/clean.c:658 +#, c-format +msgid "Input ignore patterns>> " +msgstr "" + +#: builtin/clean.c:695 +#, c-format +msgid "WARNING: Cannot find items matched by: %s" +msgstr "" + +#: builtin/clean.c:716 +msgid "Select items to delete" +msgstr "" + +#: builtin/clean.c:756 +#, c-format +msgid "remove %s? " +msgstr "" + +#: builtin/clean.c:781 +msgid "Bye." +msgstr "" + +#: builtin/clean.c:789 +msgid "" +"clean - start cleaning\n" +"filter by pattern - exclude items from deletion\n" +"select by numbers - select items to be deleted by numbers\n" +"ask each - confirm each deletion (like \"rm -i\")\n" +"quit - stop cleaning\n" +"help - this screen\n" +"? - help for prompt selection" +msgstr "" + +#: builtin/clean.c:816 +msgid "*** Commands ***" +msgstr "" + +#: builtin/clean.c:817 +msgid "What now" +msgstr "" + +#: builtin/clean.c:825 +msgid "Would remove the following item:" +msgid_plural "Would remove the following items:" +msgstr[0] "" +msgstr[1] "" + +#: builtin/clean.c:842 +msgid "No more files to clean, exiting." +msgstr "" + +#: builtin/clean.c:874 msgid "do not print names of files removed" msgstr "" -#: builtin/clean.c:162 +#: builtin/clean.c:876 msgid "force" msgstr "" -#: builtin/clean.c:164 +#: builtin/clean.c:877 +msgid "interactive cleaning" +msgstr "" + +#: builtin/clean.c:879 msgid "remove whole directories" msgstr "" -#: builtin/clean.c:165 builtin/describe.c:412 builtin/grep.c:717 -#: builtin/ls-files.c:487 builtin/name-rev.c:231 builtin/show-ref.c:182 +#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:716 +#: builtin/ls-files.c:493 builtin/name-rev.c:315 builtin/show-ref.c:186 msgid "pattern" msgstr "" -#: builtin/clean.c:166 +#: builtin/clean.c:881 msgid "add <pattern> to ignore rules" msgstr "" -#: builtin/clean.c:167 +#: builtin/clean.c:882 msgid "remove ignored files, too" msgstr "" -#: builtin/clean.c:169 +#: builtin/clean.c:884 msgid "remove only ignored files" msgstr "" -#: builtin/clean.c:187 +#: builtin/clean.c:902 msgid "-x and -X cannot be used together" msgstr "" -#: builtin/clean.c:191 +#: builtin/clean.c:906 msgid "" -"clean.requireForce set to true and neither -n nor -f given; refusing to clean" +"clean.requireForce set to true and neither -i, -n nor -f given; refusing to " +"clean" msgstr "" -#: builtin/clean.c:194 +#: builtin/clean.c:909 msgid "" -"clean.requireForce defaults to true and neither -n nor -f given; refusing to " -"clean" +"clean.requireForce defaults to true and neither -i, -n nor -f given; " +"refusing to clean" msgstr "" -#: builtin/clone.c:37 +#: builtin/clone.c:36 msgid "git clone [options] [--] <repo> [<dir>]" msgstr "" -#: builtin/clone.c:65 builtin/fetch.c:82 builtin/merge.c:214 -#: builtin/push.c:436 +#: builtin/clone.c:64 builtin/fetch.c:82 builtin/merge.c:229 +#: builtin/push.c:462 msgid "force progress reporting" msgstr "" -#: builtin/clone.c:67 +#: builtin/clone.c:66 msgid "don't create a checkout" msgstr "" -#: builtin/clone.c:68 builtin/clone.c:70 builtin/init-db.c:488 +#: builtin/clone.c:67 builtin/clone.c:69 builtin/init-db.c:488 msgid "create a bare repository" msgstr "" -#: builtin/clone.c:73 +#: builtin/clone.c:72 msgid "create a mirror repository (implies bare)" msgstr "" -#: builtin/clone.c:75 +#: builtin/clone.c:74 msgid "to clone from a local repository" msgstr "" -#: builtin/clone.c:77 +#: builtin/clone.c:76 msgid "don't use local hardlinks, always copy" msgstr "" -#: builtin/clone.c:79 +#: builtin/clone.c:78 msgid "setup as shared repository" msgstr "" -#: builtin/clone.c:81 builtin/clone.c:83 +#: builtin/clone.c:80 builtin/clone.c:82 msgid "initialize submodules in the clone" msgstr "" -#: builtin/clone.c:84 builtin/init-db.c:485 +#: builtin/clone.c:83 builtin/init-db.c:485 msgid "template-directory" msgstr "" -#: builtin/clone.c:85 builtin/init-db.c:486 +#: builtin/clone.c:84 builtin/init-db.c:486 msgid "directory from which templates will be used" msgstr "" -#: builtin/clone.c:87 +#: builtin/clone.c:86 msgid "reference repository" msgstr "" -#: builtin/clone.c:88 builtin/column.c:26 builtin/merge-file.c:44 +#: builtin/clone.c:87 builtin/column.c:26 builtin/merge-file.c:44 msgid "name" msgstr "" -#: builtin/clone.c:89 +#: builtin/clone.c:88 msgid "use <name> instead of 'origin' to track upstream" msgstr "" -#: builtin/clone.c:91 +#: builtin/clone.c:90 msgid "checkout <branch> instead of the remote's HEAD" msgstr "" -#: builtin/clone.c:93 +#: builtin/clone.c:92 msgid "path to git-upload-pack on the remote" msgstr "" -#: builtin/clone.c:94 builtin/fetch.c:83 builtin/grep.c:662 +#: builtin/clone.c:93 builtin/fetch.c:83 builtin/grep.c:661 msgid "depth" msgstr "" -#: builtin/clone.c:95 +#: builtin/clone.c:94 msgid "create a shallow clone of that depth" msgstr "" -#: builtin/clone.c:97 +#: builtin/clone.c:96 msgid "clone only one branch, HEAD or --branch" msgstr "" -#: builtin/clone.c:98 builtin/init-db.c:494 +#: builtin/clone.c:97 builtin/init-db.c:494 msgid "gitdir" msgstr "" -#: builtin/clone.c:99 builtin/init-db.c:495 +#: builtin/clone.c:98 builtin/init-db.c:495 msgid "separate git dir from working tree" msgstr "" -#: builtin/clone.c:100 +#: builtin/clone.c:99 msgid "key=value" msgstr "" -#: builtin/clone.c:101 +#: builtin/clone.c:100 msgid "set config inside the new repository" msgstr "" -#: builtin/clone.c:254 +#: builtin/clone.c:253 #, c-format msgid "reference repository '%s' is not a local repository." msgstr "" -#: builtin/clone.c:317 +#: builtin/clone.c:316 #, c-format msgid "failed to create directory '%s'" msgstr "" -#: builtin/clone.c:319 builtin/diff.c:77 +#: builtin/clone.c:318 builtin/diff.c:77 #, c-format msgid "failed to stat '%s'" msgstr "" -#: builtin/clone.c:321 +#: builtin/clone.c:320 #, c-format msgid "%s exists and is not a directory" msgstr "" -#: builtin/clone.c:335 +#: builtin/clone.c:334 #, c-format msgid "failed to stat %s\n" msgstr "" -#: builtin/clone.c:357 +#: builtin/clone.c:356 #, c-format msgid "failed to create link '%s'" msgstr "" -#: builtin/clone.c:361 +#: builtin/clone.c:360 #, c-format msgid "failed to copy file to '%s'" msgstr "" -#: builtin/clone.c:384 +#: builtin/clone.c:383 #, c-format msgid "done.\n" msgstr "" -#: builtin/clone.c:397 +#: builtin/clone.c:396 msgid "" "Clone succeeded, but checkout failed.\n" "You can inspect what was checked out with 'git status'\n" "and retry the checkout with 'git checkout -f HEAD'\n" msgstr "" -#: builtin/clone.c:476 +#: builtin/clone.c:475 #, c-format msgid "Could not find remote branch %s to clone." msgstr "" -#: builtin/clone.c:550 +#: builtin/clone.c:555 +#, c-format +msgid "Checking connectivity... " +msgstr "" + +#: builtin/clone.c:558 msgid "remote did not send all necessary objects" msgstr "" -#: builtin/clone.c:610 +#: builtin/clone.c:560 +#, c-format +msgid "done\n" +msgstr "" + +#: builtin/clone.c:621 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" msgstr "" -#: builtin/clone.c:641 +#: builtin/clone.c:652 msgid "unable to checkout working tree" msgstr "" -#: builtin/clone.c:749 +#: builtin/clone.c:760 msgid "Too many arguments." msgstr "" -#: builtin/clone.c:753 +#: builtin/clone.c:764 msgid "You must specify a repository to clone." msgstr "" -#: builtin/clone.c:764 +#: builtin/clone.c:775 #, c-format msgid "--bare and --origin %s options are incompatible." msgstr "" -#: builtin/clone.c:767 +#: builtin/clone.c:778 msgid "--bare and --separate-git-dir are incompatible." msgstr "" -#: builtin/clone.c:780 +#: builtin/clone.c:791 #, c-format msgid "repository '%s' does not exist" msgstr "" -#: builtin/clone.c:785 +#: builtin/clone.c:796 msgid "--depth is ignored in local clones; use file:// instead." msgstr "" -#: builtin/clone.c:795 +#: builtin/clone.c:798 +msgid "--local is ignored" +msgstr "" + +#: builtin/clone.c:808 #, c-format msgid "destination path '%s' already exists and is not an empty directory." msgstr "" -#: builtin/clone.c:805 +#: builtin/clone.c:818 #, c-format msgid "working tree '%s' already exists." msgstr "" -#: builtin/clone.c:818 builtin/clone.c:830 +#: builtin/clone.c:831 builtin/clone.c:843 #, c-format msgid "could not create leading directories of '%s'" msgstr "" -#: builtin/clone.c:821 +#: builtin/clone.c:834 #, c-format msgid "could not create work tree dir '%s'." msgstr "" -#: builtin/clone.c:840 +#: builtin/clone.c:853 #, c-format msgid "Cloning into bare repository '%s'...\n" msgstr "" -#: builtin/clone.c:842 +#: builtin/clone.c:855 #, c-format msgid "Cloning into '%s'...\n" msgstr "" -#: builtin/clone.c:877 +#: builtin/clone.c:890 #, c-format msgid "Don't know how to clone %s" msgstr "" -#: builtin/clone.c:926 +#: builtin/clone.c:942 #, c-format msgid "Remote branch %s not found in upstream %s" msgstr "" -#: builtin/clone.c:933 +#: builtin/clone.c:949 msgid "You appear to have cloned an empty repository." msgstr "" @@ -3496,15 +3678,15 @@ msgstr "" msgid "--command must be the first argument" msgstr "" -#: builtin/commit.c:34 +#: builtin/commit.c:35 msgid "git commit [options] [--] <pathspec>..." msgstr "" -#: builtin/commit.c:39 +#: builtin/commit.c:40 msgid "git status [options] [--] <pathspec>..." msgstr "" -#: builtin/commit.c:44 +#: builtin/commit.c:45 msgid "" "Your name and email address were configured automatically based\n" "on your username and hostname. Please check that they are accurate.\n" @@ -3518,110 +3700,123 @@ msgid "" " git commit --amend --reset-author\n" msgstr "" -#: builtin/commit.c:56 +#: builtin/commit.c:57 msgid "" "You asked to amend the most recent commit, but doing so would make\n" "it empty. You can repeat your command with --allow-empty, or you can\n" "remove the commit entirely with \"git reset HEAD^\".\n" msgstr "" -#: builtin/commit.c:61 +#: builtin/commit.c:62 msgid "" "The previous cherry-pick is now empty, possibly due to conflict resolution.\n" "If you wish to commit it anyway, use:\n" "\n" " git commit --allow-empty\n" "\n" -"Otherwise, please use 'git reset'\n" msgstr "" -#: builtin/commit.c:260 +#: builtin/commit.c:69 +msgid "Otherwise, please use 'git reset'\n" +msgstr "" + +#: builtin/commit.c:72 +msgid "" +"If you wish to skip this commit, use:\n" +"\n" +" git reset\n" +"\n" +"Then \"git cherry-pick --continue\" will resume cherry-picking\n" +"the remaining commits.\n" +msgstr "" + +#: builtin/commit.c:279 msgid "failed to unpack HEAD tree object" msgstr "" -#: builtin/commit.c:302 +#: builtin/commit.c:321 msgid "unable to create temporary index" msgstr "" -#: builtin/commit.c:308 +#: builtin/commit.c:327 msgid "interactive add failed" msgstr "" -#: builtin/commit.c:341 builtin/commit.c:362 builtin/commit.c:412 +#: builtin/commit.c:360 builtin/commit.c:381 builtin/commit.c:431 msgid "unable to write new_index file" msgstr "" -#: builtin/commit.c:393 +#: builtin/commit.c:412 msgid "cannot do a partial commit during a merge." msgstr "" -#: builtin/commit.c:395 +#: builtin/commit.c:414 msgid "cannot do a partial commit during a cherry-pick." msgstr "" -#: builtin/commit.c:405 +#: builtin/commit.c:424 msgid "cannot read the index" msgstr "" -#: builtin/commit.c:425 +#: builtin/commit.c:444 msgid "unable to write temporary index file" msgstr "" -#: builtin/commit.c:513 builtin/commit.c:519 +#: builtin/commit.c:535 builtin/commit.c:541 #, c-format msgid "invalid commit: %s" msgstr "" -#: builtin/commit.c:542 +#: builtin/commit.c:563 msgid "malformed --author parameter" msgstr "" -#: builtin/commit.c:562 +#: builtin/commit.c:583 #, c-format msgid "Malformed ident string: '%s'" msgstr "" -#: builtin/commit.c:600 builtin/commit.c:633 builtin/commit.c:956 +#: builtin/commit.c:621 builtin/commit.c:654 builtin/commit.c:982 #, c-format msgid "could not lookup commit %s" msgstr "" -#: builtin/commit.c:612 builtin/shortlog.c:270 +#: builtin/commit.c:633 builtin/shortlog.c:271 #, c-format msgid "(reading log message from standard input)\n" msgstr "" -#: builtin/commit.c:614 +#: builtin/commit.c:635 msgid "could not read log from standard input" msgstr "" -#: builtin/commit.c:618 +#: builtin/commit.c:639 #, c-format msgid "could not read log file '%s'" msgstr "" -#: builtin/commit.c:624 +#: builtin/commit.c:645 msgid "commit has empty message" msgstr "" -#: builtin/commit.c:640 +#: builtin/commit.c:661 msgid "could not read MERGE_MSG" msgstr "" -#: builtin/commit.c:644 +#: builtin/commit.c:665 msgid "could not read SQUASH_MSG" msgstr "" -#: builtin/commit.c:648 +#: builtin/commit.c:669 #, c-format msgid "could not read '%s'" msgstr "" -#: builtin/commit.c:709 +#: builtin/commit.c:730 msgid "could not write commit template" msgstr "" -#: builtin/commit.c:720 +#: builtin/commit.c:741 #, c-format msgid "" "\n" @@ -3631,7 +3826,7 @@ msgid "" "and try again.\n" msgstr "" -#: builtin/commit.c:725 +#: builtin/commit.c:746 #, c-format msgid "" "\n" @@ -3641,14 +3836,14 @@ msgid "" "and try again.\n" msgstr "" -#: builtin/commit.c:737 +#: builtin/commit.c:758 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" "with '%c' will be ignored, and an empty message aborts the commit.\n" msgstr "" -#: builtin/commit.c:742 +#: builtin/commit.c:763 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" @@ -3656,351 +3851,351 @@ msgid "" "An empty message aborts the commit.\n" msgstr "" -#: builtin/commit.c:755 +#: builtin/commit.c:776 #, c-format msgid "%sAuthor: %s" msgstr "" -#: builtin/commit.c:762 +#: builtin/commit.c:783 #, c-format msgid "%sCommitter: %s" msgstr "" -#: builtin/commit.c:782 +#: builtin/commit.c:803 msgid "Cannot read index" msgstr "" -#: builtin/commit.c:819 +#: builtin/commit.c:845 msgid "Error building trees" msgstr "" -#: builtin/commit.c:834 builtin/tag.c:359 +#: builtin/commit.c:860 builtin/tag.c:359 #, c-format msgid "Please supply the message using either -m or -F option.\n" msgstr "" -#: builtin/commit.c:931 +#: builtin/commit.c:957 #, c-format msgid "No existing author found with '%s'" msgstr "" -#: builtin/commit.c:946 builtin/commit.c:1140 +#: builtin/commit.c:972 builtin/commit.c:1208 #, c-format msgid "Invalid untracked files mode '%s'" msgstr "" -#: builtin/commit.c:976 +#: builtin/commit.c:1009 +msgid "--long and -z are incompatible" +msgstr "" + +#: builtin/commit.c:1039 msgid "Using both --reset-author and --author does not make sense" msgstr "" -#: builtin/commit.c:987 +#: builtin/commit.c:1050 msgid "You have nothing to amend." msgstr "" -#: builtin/commit.c:990 +#: builtin/commit.c:1053 msgid "You are in the middle of a merge -- cannot amend." msgstr "" -#: builtin/commit.c:992 +#: builtin/commit.c:1055 msgid "You are in the middle of a cherry-pick -- cannot amend." msgstr "" -#: builtin/commit.c:995 +#: builtin/commit.c:1058 msgid "Options --squash and --fixup cannot be used together" msgstr "" -#: builtin/commit.c:1005 +#: builtin/commit.c:1068 msgid "Only one of -c/-C/-F/--fixup can be used." msgstr "" -#: builtin/commit.c:1007 +#: builtin/commit.c:1070 msgid "Option -m cannot be combined with -c/-C/-F/--fixup." msgstr "" -#: builtin/commit.c:1015 +#: builtin/commit.c:1078 msgid "--reset-author can be used only with -C, -c or --amend." msgstr "" -#: builtin/commit.c:1032 +#: builtin/commit.c:1095 msgid "Only one of --include/--only/--all/--interactive/--patch can be used." msgstr "" -#: builtin/commit.c:1034 +#: builtin/commit.c:1097 msgid "No paths with --include/--only does not make sense." msgstr "" -#: builtin/commit.c:1036 +#: builtin/commit.c:1099 msgid "Clever... amending the last one with dirty index." msgstr "" -#: builtin/commit.c:1038 +#: builtin/commit.c:1101 msgid "Explicit paths specified without -i nor -o; assuming --only paths..." msgstr "" -#: builtin/commit.c:1048 builtin/tag.c:575 +#: builtin/commit.c:1111 builtin/tag.c:575 #, c-format msgid "Invalid cleanup mode %s" msgstr "" -#: builtin/commit.c:1053 +#: builtin/commit.c:1116 msgid "Paths with -a does not make sense." msgstr "" -#: builtin/commit.c:1059 builtin/commit.c:1194 -msgid "--long and -z are incompatible" -msgstr "" - -#: builtin/commit.c:1154 builtin/commit.c:1390 +#: builtin/commit.c:1222 builtin/commit.c:1455 msgid "show status concisely" msgstr "" -#: builtin/commit.c:1156 builtin/commit.c:1392 +#: builtin/commit.c:1224 builtin/commit.c:1457 msgid "show branch information" msgstr "" -#: builtin/commit.c:1158 builtin/commit.c:1394 builtin/push.c:426 +#: builtin/commit.c:1226 builtin/commit.c:1459 builtin/push.c:452 msgid "machine-readable output" msgstr "" -#: builtin/commit.c:1161 builtin/commit.c:1396 +#: builtin/commit.c:1229 builtin/commit.c:1461 msgid "show status in long format (default)" msgstr "" -#: builtin/commit.c:1164 builtin/commit.c:1399 +#: builtin/commit.c:1232 builtin/commit.c:1464 msgid "terminate entries with NUL" msgstr "" -#: builtin/commit.c:1166 builtin/commit.c:1402 builtin/fast-export.c:659 -#: builtin/fast-export.c:662 builtin/tag.c:459 +#: builtin/commit.c:1234 builtin/commit.c:1467 builtin/fast-export.c:667 +#: builtin/fast-export.c:670 builtin/tag.c:459 msgid "mode" msgstr "" -#: builtin/commit.c:1167 builtin/commit.c:1402 +#: builtin/commit.c:1235 builtin/commit.c:1467 msgid "show untracked files, optional modes: all, normal, no. (Default: all)" msgstr "" -#: builtin/commit.c:1170 +#: builtin/commit.c:1238 msgid "show ignored files" msgstr "" -#: builtin/commit.c:1171 parse-options.h:151 +#: builtin/commit.c:1239 parse-options.h:154 msgid "when" msgstr "" -#: builtin/commit.c:1172 +#: builtin/commit.c:1240 msgid "" "ignore changes to submodules, optional when: all, dirty, untracked. " "(Default: all)" msgstr "" -#: builtin/commit.c:1174 +#: builtin/commit.c:1242 msgid "list untracked files in columns" msgstr "" -#: builtin/commit.c:1248 +#: builtin/commit.c:1313 msgid "couldn't look up newly created commit" msgstr "" -#: builtin/commit.c:1250 +#: builtin/commit.c:1315 msgid "could not parse newly created commit" msgstr "" -#: builtin/commit.c:1291 +#: builtin/commit.c:1356 msgid "detached HEAD" msgstr "" -#: builtin/commit.c:1293 +#: builtin/commit.c:1358 msgid " (root-commit)" msgstr "" -#: builtin/commit.c:1360 +#: builtin/commit.c:1425 msgid "suppress summary after successful commit" msgstr "" -#: builtin/commit.c:1361 +#: builtin/commit.c:1426 msgid "show diff in commit message template" msgstr "" -#: builtin/commit.c:1363 +#: builtin/commit.c:1428 msgid "Commit message options" msgstr "" -#: builtin/commit.c:1364 builtin/tag.c:457 +#: builtin/commit.c:1429 builtin/tag.c:457 msgid "read message from file" msgstr "" -#: builtin/commit.c:1365 +#: builtin/commit.c:1430 msgid "author" msgstr "" -#: builtin/commit.c:1365 +#: builtin/commit.c:1430 msgid "override author for commit" msgstr "" -#: builtin/commit.c:1366 builtin/gc.c:178 +#: builtin/commit.c:1431 builtin/gc.c:178 msgid "date" msgstr "" -#: builtin/commit.c:1366 +#: builtin/commit.c:1431 msgid "override date for commit" msgstr "" -#: builtin/commit.c:1367 builtin/merge.c:208 builtin/notes.c:533 -#: builtin/notes.c:690 builtin/tag.c:455 +#: builtin/commit.c:1432 builtin/merge.c:223 builtin/notes.c:405 +#: builtin/notes.c:562 builtin/tag.c:455 msgid "message" msgstr "" -#: builtin/commit.c:1367 +#: builtin/commit.c:1432 msgid "commit message" msgstr "" -#: builtin/commit.c:1368 +#: builtin/commit.c:1433 msgid "reuse and edit message from specified commit" msgstr "" -#: builtin/commit.c:1369 +#: builtin/commit.c:1434 msgid "reuse message from specified commit" msgstr "" -#: builtin/commit.c:1370 +#: builtin/commit.c:1435 msgid "use autosquash formatted message to fixup specified commit" msgstr "" -#: builtin/commit.c:1371 +#: builtin/commit.c:1436 msgid "use autosquash formatted message to squash specified commit" msgstr "" -#: builtin/commit.c:1372 +#: builtin/commit.c:1437 msgid "the commit is authored by me now (used with -C/-c/--amend)" msgstr "" -#: builtin/commit.c:1373 builtin/log.c:1113 builtin/revert.c:109 +#: builtin/commit.c:1438 builtin/log.c:1160 builtin/revert.c:111 msgid "add Signed-off-by:" msgstr "" -#: builtin/commit.c:1374 +#: builtin/commit.c:1439 msgid "use specified template file" msgstr "" -#: builtin/commit.c:1375 +#: builtin/commit.c:1440 msgid "force edit of commit" msgstr "" -#: builtin/commit.c:1376 +#: builtin/commit.c:1441 msgid "default" msgstr "" -#: builtin/commit.c:1376 builtin/tag.c:460 +#: builtin/commit.c:1441 builtin/tag.c:460 msgid "how to strip spaces and #comments from message" msgstr "" -#: builtin/commit.c:1377 +#: builtin/commit.c:1442 msgid "include status in commit message template" msgstr "" -#: builtin/commit.c:1378 builtin/merge.c:215 builtin/tag.c:461 +#: builtin/commit.c:1443 builtin/merge.c:230 builtin/tag.c:461 msgid "key id" msgstr "" -#: builtin/commit.c:1379 builtin/merge.c:216 +#: builtin/commit.c:1444 builtin/merge.c:231 msgid "GPG sign commit" msgstr "" #. end commit message options -#: builtin/commit.c:1382 +#: builtin/commit.c:1447 msgid "Commit contents options" msgstr "" -#: builtin/commit.c:1383 +#: builtin/commit.c:1448 msgid "commit all changed files" msgstr "" -#: builtin/commit.c:1384 +#: builtin/commit.c:1449 msgid "add specified files to index for commit" msgstr "" -#: builtin/commit.c:1385 +#: builtin/commit.c:1450 msgid "interactively add files" msgstr "" -#: builtin/commit.c:1386 +#: builtin/commit.c:1451 msgid "interactively add changes" msgstr "" -#: builtin/commit.c:1387 +#: builtin/commit.c:1452 msgid "commit only specified files" msgstr "" -#: builtin/commit.c:1388 +#: builtin/commit.c:1453 msgid "bypass pre-commit hook" msgstr "" -#: builtin/commit.c:1389 +#: builtin/commit.c:1454 msgid "show what would be committed" msgstr "" -#: builtin/commit.c:1400 +#: builtin/commit.c:1465 msgid "amend previous commit" msgstr "" -#: builtin/commit.c:1401 +#: builtin/commit.c:1466 msgid "bypass post-rewrite hook" msgstr "" -#: builtin/commit.c:1406 +#: builtin/commit.c:1471 msgid "ok to record an empty change" msgstr "" -#: builtin/commit.c:1409 +#: builtin/commit.c:1474 msgid "ok to record a change with an empty message" msgstr "" -#: builtin/commit.c:1441 +#: builtin/commit.c:1507 msgid "could not parse HEAD commit" msgstr "" -#: builtin/commit.c:1479 builtin/merge.c:510 +#: builtin/commit.c:1545 builtin/merge.c:525 #, c-format msgid "could not open '%s' for reading" msgstr "" -#: builtin/commit.c:1486 +#: builtin/commit.c:1552 #, c-format msgid "Corrupt MERGE_HEAD file (%s)" msgstr "" -#: builtin/commit.c:1493 +#: builtin/commit.c:1559 msgid "could not read MERGE_MODE" msgstr "" -#: builtin/commit.c:1512 +#: builtin/commit.c:1578 #, c-format msgid "could not read commit message: %s" msgstr "" -#: builtin/commit.c:1526 +#: builtin/commit.c:1592 #, c-format msgid "Aborting commit; you did not edit the message.\n" msgstr "" -#: builtin/commit.c:1531 +#: builtin/commit.c:1597 #, c-format msgid "Aborting commit due to empty commit message.\n" msgstr "" -#: builtin/commit.c:1546 builtin/merge.c:847 builtin/merge.c:872 +#: builtin/commit.c:1612 builtin/merge.c:861 builtin/merge.c:886 msgid "failed to write commit object" msgstr "" -#: builtin/commit.c:1567 +#: builtin/commit.c:1633 msgid "cannot lock HEAD ref" msgstr "" -#: builtin/commit.c:1571 +#: builtin/commit.c:1637 msgid "cannot update HEAD ref" msgstr "" -#: builtin/commit.c:1582 +#: builtin/commit.c:1648 msgid "" "Repository has been updated, but unable to write\n" "new_index file. Check that disk is not full or quota is\n" @@ -4011,115 +4206,123 @@ msgstr "" msgid "git config [options]" msgstr "" -#: builtin/config.c:51 +#: builtin/config.c:52 msgid "Config file location" msgstr "" -#: builtin/config.c:52 +#: builtin/config.c:53 msgid "use global config file" msgstr "" -#: builtin/config.c:53 +#: builtin/config.c:54 msgid "use system config file" msgstr "" -#: builtin/config.c:54 +#: builtin/config.c:55 msgid "use repository config file" msgstr "" -#: builtin/config.c:55 +#: builtin/config.c:56 msgid "use given config file" msgstr "" -#: builtin/config.c:56 -msgid "Action" +#: builtin/config.c:57 +msgid "blob-id" msgstr "" #: builtin/config.c:57 -msgid "get value: name [value-regex]" +msgid "read config from given blob object" msgstr "" #: builtin/config.c:58 -msgid "get all values: key [value-regex]" +msgid "Action" msgstr "" #: builtin/config.c:59 -msgid "get values for regexp: name-regex [value-regex]" +msgid "get value: name [value-regex]" msgstr "" #: builtin/config.c:60 -msgid "replace all matching variables: name value [value_regex]" +msgid "get all values: key [value-regex]" msgstr "" #: builtin/config.c:61 -msgid "add a new variable: name value" +msgid "get values for regexp: name-regex [value-regex]" msgstr "" #: builtin/config.c:62 -msgid "remove a variable: name [value-regex]" +msgid "replace all matching variables: name value [value_regex]" msgstr "" #: builtin/config.c:63 -msgid "remove all matches: name [value-regex]" +msgid "add a new variable: name value" msgstr "" #: builtin/config.c:64 -msgid "rename section: old-name new-name" +msgid "remove a variable: name [value-regex]" msgstr "" #: builtin/config.c:65 -msgid "remove a section: name" +msgid "remove all matches: name [value-regex]" msgstr "" #: builtin/config.c:66 -msgid "list all" +msgid "rename section: old-name new-name" msgstr "" #: builtin/config.c:67 +msgid "remove a section: name" +msgstr "" + +#: builtin/config.c:68 +msgid "list all" +msgstr "" + +#: builtin/config.c:69 msgid "open an editor" msgstr "" -#: builtin/config.c:68 builtin/config.c:69 +#: builtin/config.c:70 builtin/config.c:71 msgid "slot" msgstr "" -#: builtin/config.c:68 +#: builtin/config.c:70 msgid "find the color configured: [default]" msgstr "" -#: builtin/config.c:69 +#: builtin/config.c:71 msgid "find the color setting: [stdout-is-tty]" msgstr "" -#: builtin/config.c:70 +#: builtin/config.c:72 msgid "Type" msgstr "" -#: builtin/config.c:71 +#: builtin/config.c:73 msgid "value is \"true\" or \"false\"" msgstr "" -#: builtin/config.c:72 +#: builtin/config.c:74 msgid "value is decimal number" msgstr "" -#: builtin/config.c:73 +#: builtin/config.c:75 msgid "value is --bool or --int" msgstr "" -#: builtin/config.c:74 +#: builtin/config.c:76 msgid "value is a path (file or directory name)" msgstr "" -#: builtin/config.c:75 +#: builtin/config.c:77 msgid "Other" msgstr "" -#: builtin/config.c:76 +#: builtin/config.c:78 msgid "terminate values with NUL byte" msgstr "" -#: builtin/config.c:77 +#: builtin/config.c:79 msgid "respect include directives on lookup" msgstr "" @@ -4131,133 +4334,137 @@ msgstr "" msgid "print sizes in human readable format" msgstr "" -#: builtin/describe.c:15 +#: builtin/describe.c:16 msgid "git describe [options] <committish>*" msgstr "" -#: builtin/describe.c:16 +#: builtin/describe.c:17 msgid "git describe [options] --dirty" msgstr "" -#: builtin/describe.c:233 +#: builtin/describe.c:237 #, c-format msgid "annotated tag %s not available" msgstr "" -#: builtin/describe.c:237 +#: builtin/describe.c:241 #, c-format msgid "annotated tag %s has no embedded name" msgstr "" -#: builtin/describe.c:239 +#: builtin/describe.c:243 #, c-format msgid "tag '%s' is really '%s' here" msgstr "" -#: builtin/describe.c:266 +#: builtin/describe.c:270 #, c-format msgid "Not a valid object name %s" msgstr "" -#: builtin/describe.c:269 +#: builtin/describe.c:273 #, c-format msgid "%s is not a valid '%s' object" msgstr "" -#: builtin/describe.c:286 +#: builtin/describe.c:290 #, c-format msgid "no tag exactly matches '%s'" msgstr "" -#: builtin/describe.c:288 +#: builtin/describe.c:292 #, c-format msgid "searching to describe %s\n" msgstr "" -#: builtin/describe.c:328 +#: builtin/describe.c:332 #, c-format msgid "finished search at %s\n" msgstr "" -#: builtin/describe.c:352 +#: builtin/describe.c:359 #, c-format msgid "" "No annotated tags can describe '%s'.\n" "However, there were unannotated tags: try --tags." msgstr "" -#: builtin/describe.c:356 +#: builtin/describe.c:363 #, c-format msgid "" "No tags can describe '%s'.\n" "Try --always, or create some tags." msgstr "" -#: builtin/describe.c:377 +#: builtin/describe.c:384 #, c-format msgid "traversed %lu commits\n" msgstr "" -#: builtin/describe.c:380 +#: builtin/describe.c:387 #, c-format msgid "" "more than %i tags found; listed %i most recent\n" "gave up search at %s\n" msgstr "" -#: builtin/describe.c:402 +#: builtin/describe.c:409 msgid "find the tag that comes after the commit" msgstr "" -#: builtin/describe.c:403 +#: builtin/describe.c:410 msgid "debug search strategy on stderr" msgstr "" -#: builtin/describe.c:404 +#: builtin/describe.c:411 msgid "use any ref" msgstr "" -#: builtin/describe.c:405 +#: builtin/describe.c:412 msgid "use any tag, even unannotated" msgstr "" -#: builtin/describe.c:406 +#: builtin/describe.c:413 msgid "always use long format" msgstr "" -#: builtin/describe.c:409 +#: builtin/describe.c:414 +msgid "only follow first parent" +msgstr "" + +#: builtin/describe.c:417 msgid "only output exact matches" msgstr "" -#: builtin/describe.c:411 +#: builtin/describe.c:419 msgid "consider <n> most recent tags (default: 10)" msgstr "" -#: builtin/describe.c:413 +#: builtin/describe.c:421 msgid "only consider tags matching <pattern>" msgstr "" -#: builtin/describe.c:415 builtin/name-rev.c:238 +#: builtin/describe.c:423 builtin/name-rev.c:322 msgid "show abbreviated commit object as fallback" msgstr "" -#: builtin/describe.c:416 +#: builtin/describe.c:424 msgid "mark" msgstr "" -#: builtin/describe.c:417 +#: builtin/describe.c:425 msgid "append <mark> on dirty working tree (default: \"-dirty\")" msgstr "" -#: builtin/describe.c:435 +#: builtin/describe.c:443 msgid "--long is incompatible with --abbrev=0" msgstr "" -#: builtin/describe.c:461 +#: builtin/describe.c:469 msgid "No names found, cannot describe anything." msgstr "" -#: builtin/describe.c:481 +#: builtin/describe.c:489 msgid "--dirty is incompatible with committishes" msgstr "" @@ -4266,31 +4473,26 @@ msgstr "" msgid "'%s': not a regular file or symlink" msgstr "" -#: builtin/diff.c:228 +#: builtin/diff.c:230 #, c-format msgid "invalid option: %s" msgstr "" -#: builtin/diff.c:305 +#: builtin/diff.c:307 msgid "Not a git repository" msgstr "" -#: builtin/diff.c:348 +#: builtin/diff.c:350 #, c-format msgid "invalid object '%s' given." msgstr "" -#: builtin/diff.c:353 -#, c-format -msgid "more than %d trees given: '%s'" -msgstr "" - -#: builtin/diff.c:363 +#: builtin/diff.c:359 #, c-format msgid "more than two blobs given: '%s'" msgstr "" -#: builtin/diff.c:371 +#: builtin/diff.c:366 #, c-format msgid "unhandled object '%s' given." msgstr "" @@ -4299,39 +4501,39 @@ msgstr "" msgid "git fast-export [rev-list-opts]" msgstr "" -#: builtin/fast-export.c:658 +#: builtin/fast-export.c:666 msgid "show progress after <n> objects" msgstr "" -#: builtin/fast-export.c:660 +#: builtin/fast-export.c:668 msgid "select handling of signed tags" msgstr "" -#: builtin/fast-export.c:663 +#: builtin/fast-export.c:671 msgid "select handling of tags that tag filtered objects" msgstr "" -#: builtin/fast-export.c:666 +#: builtin/fast-export.c:674 msgid "Dump marks to this file" msgstr "" -#: builtin/fast-export.c:668 +#: builtin/fast-export.c:676 msgid "Import marks from this file" msgstr "" -#: builtin/fast-export.c:670 +#: builtin/fast-export.c:678 msgid "Fake a tagger when tags lack one" msgstr "" -#: builtin/fast-export.c:672 +#: builtin/fast-export.c:680 msgid "Output full tree for each commit" msgstr "" -#: builtin/fast-export.c:674 +#: builtin/fast-export.c:682 msgid "Use the done feature to terminate the stream" msgstr "" -#: builtin/fast-export.c:675 +#: builtin/fast-export.c:683 msgid "Skip output of blob data" msgstr "" @@ -4407,7 +4609,7 @@ msgstr "" msgid "convert to a complete repository" msgstr "" -#: builtin/fetch.c:88 builtin/log.c:1130 +#: builtin/fetch.c:88 builtin/log.c:1177 msgid "dir" msgstr "" @@ -4419,162 +4621,162 @@ msgstr "" msgid "default mode for recursion" msgstr "" -#: builtin/fetch.c:204 +#: builtin/fetch.c:220 msgid "Couldn't find remote ref HEAD" msgstr "" -#: builtin/fetch.c:257 +#: builtin/fetch.c:273 #, c-format msgid "object %s not found" msgstr "" -#: builtin/fetch.c:262 +#: builtin/fetch.c:278 msgid "[up to date]" msgstr "" -#: builtin/fetch.c:276 +#: builtin/fetch.c:292 #, c-format msgid "! %-*s %-*s -> %s (can't fetch in current branch)" msgstr "" -#: builtin/fetch.c:277 builtin/fetch.c:363 +#: builtin/fetch.c:293 builtin/fetch.c:379 msgid "[rejected]" msgstr "" -#: builtin/fetch.c:288 +#: builtin/fetch.c:304 msgid "[tag update]" msgstr "" -#: builtin/fetch.c:290 builtin/fetch.c:325 builtin/fetch.c:343 +#: builtin/fetch.c:306 builtin/fetch.c:341 builtin/fetch.c:359 msgid " (unable to update local ref)" msgstr "" -#: builtin/fetch.c:308 +#: builtin/fetch.c:324 msgid "[new tag]" msgstr "" -#: builtin/fetch.c:311 +#: builtin/fetch.c:327 msgid "[new branch]" msgstr "" -#: builtin/fetch.c:314 +#: builtin/fetch.c:330 msgid "[new ref]" msgstr "" -#: builtin/fetch.c:359 +#: builtin/fetch.c:375 msgid "unable to update local ref" msgstr "" -#: builtin/fetch.c:359 +#: builtin/fetch.c:375 msgid "forced update" msgstr "" -#: builtin/fetch.c:365 +#: builtin/fetch.c:381 msgid "(non-fast-forward)" msgstr "" -#: builtin/fetch.c:396 builtin/fetch.c:688 +#: builtin/fetch.c:412 builtin/fetch.c:718 #, c-format msgid "cannot open %s: %s\n" msgstr "" -#: builtin/fetch.c:405 +#: builtin/fetch.c:421 #, c-format msgid "%s did not send all necessary objects\n" msgstr "" -#: builtin/fetch.c:491 +#: builtin/fetch.c:520 #, c-format msgid "From %.*s\n" msgstr "" -#: builtin/fetch.c:502 +#: builtin/fetch.c:531 #, c-format msgid "" "some local refs could not be updated; try running\n" " 'git remote prune %s' to remove any old, conflicting branches" msgstr "" -#: builtin/fetch.c:552 +#: builtin/fetch.c:581 #, c-format msgid " (%s will become dangling)" msgstr "" -#: builtin/fetch.c:553 +#: builtin/fetch.c:582 #, c-format msgid " (%s has become dangling)" msgstr "" -#: builtin/fetch.c:560 +#: builtin/fetch.c:589 msgid "[deleted]" msgstr "" -#: builtin/fetch.c:561 builtin/remote.c:1055 +#: builtin/fetch.c:590 builtin/remote.c:1055 msgid "(none)" msgstr "" -#: builtin/fetch.c:678 +#: builtin/fetch.c:708 #, c-format msgid "Refusing to fetch into current branch %s of non-bare repository" msgstr "" -#: builtin/fetch.c:712 +#: builtin/fetch.c:742 #, c-format msgid "Don't know how to fetch from %s" msgstr "" -#: builtin/fetch.c:789 +#: builtin/fetch.c:823 #, c-format msgid "Option \"%s\" value \"%s\" is not valid for %s" msgstr "" -#: builtin/fetch.c:792 +#: builtin/fetch.c:826 #, c-format msgid "Option \"%s\" is ignored for %s\n" msgstr "" -#: builtin/fetch.c:894 +#: builtin/fetch.c:928 #, c-format msgid "Fetching %s\n" msgstr "" -#: builtin/fetch.c:896 builtin/remote.c:100 +#: builtin/fetch.c:930 builtin/remote.c:100 #, c-format msgid "Could not fetch %s" msgstr "" -#: builtin/fetch.c:915 +#: builtin/fetch.c:949 msgid "" "No remote repository specified. Please, specify either a URL or a\n" "remote name from which new revisions should be fetched." msgstr "" -#: builtin/fetch.c:935 +#: builtin/fetch.c:969 msgid "You need to specify a tag name." msgstr "" -#: builtin/fetch.c:981 +#: builtin/fetch.c:1015 msgid "--depth and --unshallow cannot be used together" msgstr "" -#: builtin/fetch.c:983 +#: builtin/fetch.c:1017 msgid "--unshallow on a complete repository does not make sense" msgstr "" -#: builtin/fetch.c:1002 +#: builtin/fetch.c:1036 msgid "fetch --all does not take a repository argument" msgstr "" -#: builtin/fetch.c:1004 +#: builtin/fetch.c:1038 msgid "fetch --all does not make sense with refspecs" msgstr "" -#: builtin/fetch.c:1015 +#: builtin/fetch.c:1049 #, c-format msgid "No such remote or remote group: %s" msgstr "" -#: builtin/fetch.c:1023 +#: builtin/fetch.c:1057 msgid "Fetching a group and specifying refspecs does not make sense" msgstr "" @@ -4582,9 +4784,9 @@ msgstr "" msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]" msgstr "" -#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:701 -#: builtin/merge.c:188 builtin/show-branch.c:655 builtin/show-ref.c:175 -#: builtin/tag.c:446 parse-options.h:133 parse-options.h:239 +#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:700 +#: builtin/merge.c:203 builtin/show-branch.c:655 builtin/show-ref.c:179 +#: builtin/tag.c:446 parse-options.h:133 parse-options.h:243 msgid "n" msgstr "" @@ -4739,220 +4941,220 @@ msgstr "" msgid "grep: failed to create thread: %s" msgstr "" -#: builtin/grep.c:365 +#: builtin/grep.c:364 #, c-format msgid "Failed to chdir: %s" msgstr "" -#: builtin/grep.c:443 builtin/grep.c:478 +#: builtin/grep.c:442 builtin/grep.c:477 #, c-format msgid "unable to read tree (%s)" msgstr "" -#: builtin/grep.c:493 +#: builtin/grep.c:492 #, c-format msgid "unable to grep from object of type %s" msgstr "" -#: builtin/grep.c:551 +#: builtin/grep.c:550 #, c-format msgid "switch `%c' expects a numerical value" msgstr "" -#: builtin/grep.c:568 +#: builtin/grep.c:567 #, c-format msgid "cannot open '%s'" msgstr "" -#: builtin/grep.c:643 +#: builtin/grep.c:642 msgid "search in index instead of in the work tree" msgstr "" -#: builtin/grep.c:645 +#: builtin/grep.c:644 msgid "find in contents not managed by git" msgstr "" -#: builtin/grep.c:647 +#: builtin/grep.c:646 msgid "search in both tracked and untracked files" msgstr "" -#: builtin/grep.c:649 +#: builtin/grep.c:648 msgid "search also in ignored files" msgstr "" -#: builtin/grep.c:652 +#: builtin/grep.c:651 msgid "show non-matching lines" msgstr "" -#: builtin/grep.c:654 +#: builtin/grep.c:653 msgid "case insensitive matching" msgstr "" -#: builtin/grep.c:656 +#: builtin/grep.c:655 msgid "match patterns only at word boundaries" msgstr "" -#: builtin/grep.c:658 +#: builtin/grep.c:657 msgid "process binary files as text" msgstr "" -#: builtin/grep.c:660 +#: builtin/grep.c:659 msgid "don't match patterns in binary files" msgstr "" -#: builtin/grep.c:663 +#: builtin/grep.c:662 msgid "descend at most <depth> levels" msgstr "" -#: builtin/grep.c:667 +#: builtin/grep.c:666 msgid "use extended POSIX regular expressions" msgstr "" -#: builtin/grep.c:670 +#: builtin/grep.c:669 msgid "use basic POSIX regular expressions (default)" msgstr "" -#: builtin/grep.c:673 +#: builtin/grep.c:672 msgid "interpret patterns as fixed strings" msgstr "" -#: builtin/grep.c:676 +#: builtin/grep.c:675 msgid "use Perl-compatible regular expressions" msgstr "" -#: builtin/grep.c:679 +#: builtin/grep.c:678 msgid "show line numbers" msgstr "" -#: builtin/grep.c:680 +#: builtin/grep.c:679 msgid "don't show filenames" msgstr "" -#: builtin/grep.c:681 +#: builtin/grep.c:680 msgid "show filenames" msgstr "" -#: builtin/grep.c:683 +#: builtin/grep.c:682 msgid "show filenames relative to top directory" msgstr "" -#: builtin/grep.c:685 +#: builtin/grep.c:684 msgid "show only filenames instead of matching lines" msgstr "" -#: builtin/grep.c:687 +#: builtin/grep.c:686 msgid "synonym for --files-with-matches" msgstr "" -#: builtin/grep.c:690 +#: builtin/grep.c:689 msgid "show only the names of files without match" msgstr "" -#: builtin/grep.c:692 +#: builtin/grep.c:691 msgid "print NUL after filenames" msgstr "" -#: builtin/grep.c:694 +#: builtin/grep.c:693 msgid "show the number of matches instead of matching lines" msgstr "" -#: builtin/grep.c:695 +#: builtin/grep.c:694 msgid "highlight matches" msgstr "" -#: builtin/grep.c:697 +#: builtin/grep.c:696 msgid "print empty line between matches from different files" msgstr "" -#: builtin/grep.c:699 +#: builtin/grep.c:698 msgid "show filename only once above matches from same file" msgstr "" -#: builtin/grep.c:702 +#: builtin/grep.c:701 msgid "show <n> context lines before and after matches" msgstr "" -#: builtin/grep.c:705 +#: builtin/grep.c:704 msgid "show <n> context lines before matches" msgstr "" -#: builtin/grep.c:707 +#: builtin/grep.c:706 msgid "show <n> context lines after matches" msgstr "" -#: builtin/grep.c:708 +#: builtin/grep.c:707 msgid "shortcut for -C NUM" msgstr "" -#: builtin/grep.c:711 +#: builtin/grep.c:710 msgid "show a line with the function name before matches" msgstr "" -#: builtin/grep.c:713 +#: builtin/grep.c:712 msgid "show the surrounding function" msgstr "" -#: builtin/grep.c:716 +#: builtin/grep.c:715 msgid "read patterns from file" msgstr "" -#: builtin/grep.c:718 +#: builtin/grep.c:717 msgid "match <pattern>" msgstr "" -#: builtin/grep.c:720 +#: builtin/grep.c:719 msgid "combine patterns specified with -e" msgstr "" -#: builtin/grep.c:732 +#: builtin/grep.c:731 msgid "indicate hit with exit status without output" msgstr "" -#: builtin/grep.c:734 +#: builtin/grep.c:733 msgid "show only matches from files that match all patterns" msgstr "" -#: builtin/grep.c:736 +#: builtin/grep.c:735 msgid "show parse tree for grep expression" msgstr "" -#: builtin/grep.c:740 +#: builtin/grep.c:739 msgid "pager" msgstr "" -#: builtin/grep.c:740 +#: builtin/grep.c:739 msgid "show matching files in the pager" msgstr "" -#: builtin/grep.c:743 +#: builtin/grep.c:742 msgid "allow calling of grep(1) (ignored by this build)" msgstr "" -#: builtin/grep.c:744 builtin/show-ref.c:184 +#: builtin/grep.c:743 builtin/show-ref.c:188 msgid "show usage" msgstr "" -#: builtin/grep.c:811 +#: builtin/grep.c:810 msgid "no pattern given." msgstr "" -#: builtin/grep.c:866 +#: builtin/grep.c:865 msgid "--open-files-in-pager only works on the worktree" msgstr "" -#: builtin/grep.c:889 +#: builtin/grep.c:888 msgid "--cached or --untracked cannot be used with --no-index." msgstr "" -#: builtin/grep.c:894 +#: builtin/grep.c:893 msgid "--no-index or --untracked cannot be used with revs." msgstr "" -#: builtin/grep.c:897 +#: builtin/grep.c:896 msgid "--[no-]exclude-standard cannot be used for tracked contents." msgstr "" -#: builtin/grep.c:905 +#: builtin/grep.c:904 msgid "both --cached and trees are given." msgstr "" @@ -4990,396 +5192,396 @@ msgstr "" msgid "process file as it were from this path" msgstr "" -#: builtin/help.c:43 +#: builtin/help.c:41 msgid "print all available commands" msgstr "" -#: builtin/help.c:44 +#: builtin/help.c:42 msgid "print list of useful guides" msgstr "" -#: builtin/help.c:45 +#: builtin/help.c:43 msgid "show man page" msgstr "" -#: builtin/help.c:46 +#: builtin/help.c:44 msgid "show manual in web browser" msgstr "" -#: builtin/help.c:48 +#: builtin/help.c:46 msgid "show info page" msgstr "" -#: builtin/help.c:54 +#: builtin/help.c:52 msgid "git help [--all] [--guides] [--man|--web|--info] [command]" msgstr "" -#: builtin/help.c:66 +#: builtin/help.c:64 #, c-format msgid "unrecognized help format '%s'" msgstr "" -#: builtin/help.c:94 +#: builtin/help.c:92 msgid "Failed to start emacsclient." msgstr "" -#: builtin/help.c:107 +#: builtin/help.c:105 msgid "Failed to parse emacsclient version." msgstr "" -#: builtin/help.c:115 +#: builtin/help.c:113 #, c-format msgid "emacsclient version '%d' too old (< 22)." msgstr "" -#: builtin/help.c:133 builtin/help.c:161 builtin/help.c:170 builtin/help.c:178 +#: builtin/help.c:131 builtin/help.c:159 builtin/help.c:168 builtin/help.c:176 #, c-format msgid "failed to exec '%s': %s" msgstr "" -#: builtin/help.c:218 +#: builtin/help.c:216 #, c-format msgid "" "'%s': path for unsupported man viewer.\n" "Please consider using 'man.<tool>.cmd' instead." msgstr "" -#: builtin/help.c:230 +#: builtin/help.c:228 #, c-format msgid "" "'%s': cmd for supported man viewer.\n" "Please consider using 'man.<tool>.path' instead." msgstr "" -#: builtin/help.c:351 +#: builtin/help.c:349 #, c-format msgid "'%s': unknown man viewer." msgstr "" -#: builtin/help.c:368 +#: builtin/help.c:366 msgid "no man viewer handled the request" msgstr "" -#: builtin/help.c:376 +#: builtin/help.c:374 msgid "no info viewer handled the request" msgstr "" -#: builtin/help.c:422 +#: builtin/help.c:420 msgid "Defining attributes per path" msgstr "" -#: builtin/help.c:423 +#: builtin/help.c:421 msgid "A Git glossary" msgstr "" -#: builtin/help.c:424 +#: builtin/help.c:422 msgid "Specifies intentionally untracked files to ignore" msgstr "" -#: builtin/help.c:425 +#: builtin/help.c:423 msgid "Defining submodule properties" msgstr "" -#: builtin/help.c:426 +#: builtin/help.c:424 msgid "Specifying revisions and ranges for Git" msgstr "" -#: builtin/help.c:427 +#: builtin/help.c:425 msgid "A tutorial introduction to Git (for version 1.5.1 or newer)" msgstr "" -#: builtin/help.c:428 +#: builtin/help.c:426 msgid "An overview of recommended workflows with Git" msgstr "" -#: builtin/help.c:440 +#: builtin/help.c:438 msgid "The common Git guides are:\n" msgstr "" -#: builtin/help.c:462 builtin/help.c:478 +#: builtin/help.c:460 builtin/help.c:476 #, c-format msgid "usage: %s%s" msgstr "" -#: builtin/help.c:494 +#: builtin/help.c:492 #, c-format msgid "`git %s' is aliased to `%s'" msgstr "" -#: builtin/index-pack.c:182 +#: builtin/index-pack.c:184 #, c-format msgid "object type mismatch at %s" msgstr "" -#: builtin/index-pack.c:202 +#: builtin/index-pack.c:204 msgid "object of unexpected type" msgstr "" -#: builtin/index-pack.c:239 +#: builtin/index-pack.c:244 #, c-format msgid "cannot fill %d byte" msgid_plural "cannot fill %d bytes" msgstr[0] "" msgstr[1] "" -#: builtin/index-pack.c:249 +#: builtin/index-pack.c:254 msgid "early EOF" msgstr "" -#: builtin/index-pack.c:250 +#: builtin/index-pack.c:255 msgid "read error on input" msgstr "" -#: builtin/index-pack.c:262 +#: builtin/index-pack.c:267 msgid "used more bytes than were available" msgstr "" -#: builtin/index-pack.c:269 +#: builtin/index-pack.c:274 msgid "pack too large for current definition of off_t" msgstr "" -#: builtin/index-pack.c:285 +#: builtin/index-pack.c:290 #, c-format msgid "unable to create '%s'" msgstr "" -#: builtin/index-pack.c:290 +#: builtin/index-pack.c:295 #, c-format msgid "cannot open packfile '%s'" msgstr "" -#: builtin/index-pack.c:304 +#: builtin/index-pack.c:309 msgid "pack signature mismatch" msgstr "" -#: builtin/index-pack.c:306 +#: builtin/index-pack.c:311 #, c-format msgid "pack version %<PRIu32> unsupported" msgstr "" -#: builtin/index-pack.c:324 +#: builtin/index-pack.c:329 #, c-format msgid "pack has bad object at offset %lu: %s" msgstr "" -#: builtin/index-pack.c:446 +#: builtin/index-pack.c:451 #, c-format msgid "inflate returned %d" msgstr "" -#: builtin/index-pack.c:495 +#: builtin/index-pack.c:500 msgid "offset value overflow for delta base object" msgstr "" -#: builtin/index-pack.c:503 +#: builtin/index-pack.c:508 msgid "delta base offset is out of bound" msgstr "" -#: builtin/index-pack.c:511 +#: builtin/index-pack.c:516 #, c-format msgid "unknown object type %d" msgstr "" -#: builtin/index-pack.c:542 +#: builtin/index-pack.c:547 msgid "cannot pread pack file" msgstr "" -#: builtin/index-pack.c:544 +#: builtin/index-pack.c:549 #, c-format msgid "premature end of pack file, %lu byte missing" msgid_plural "premature end of pack file, %lu bytes missing" msgstr[0] "" msgstr[1] "" -#: builtin/index-pack.c:570 +#: builtin/index-pack.c:575 msgid "serious inflate inconsistency" msgstr "" -#: builtin/index-pack.c:661 builtin/index-pack.c:667 builtin/index-pack.c:690 -#: builtin/index-pack.c:724 builtin/index-pack.c:733 +#: builtin/index-pack.c:666 builtin/index-pack.c:672 builtin/index-pack.c:695 +#: builtin/index-pack.c:729 builtin/index-pack.c:738 #, c-format msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "" -#: builtin/index-pack.c:664 builtin/pack-objects.c:170 +#: builtin/index-pack.c:669 builtin/pack-objects.c:170 #: builtin/pack-objects.c:262 #, c-format msgid "unable to read %s" msgstr "" -#: builtin/index-pack.c:730 +#: builtin/index-pack.c:735 #, c-format msgid "cannot read existing object %s" msgstr "" -#: builtin/index-pack.c:744 +#: builtin/index-pack.c:749 #, c-format msgid "invalid blob object %s" msgstr "" -#: builtin/index-pack.c:759 +#: builtin/index-pack.c:763 #, c-format msgid "invalid %s" msgstr "" -#: builtin/index-pack.c:761 +#: builtin/index-pack.c:766 msgid "Error in object" msgstr "" -#: builtin/index-pack.c:763 +#: builtin/index-pack.c:768 #, c-format msgid "Not all child objects of %s are reachable" msgstr "" -#: builtin/index-pack.c:833 builtin/index-pack.c:863 +#: builtin/index-pack.c:838 builtin/index-pack.c:868 msgid "failed to apply delta" msgstr "" -#: builtin/index-pack.c:1004 +#: builtin/index-pack.c:1009 msgid "Receiving objects" msgstr "" -#: builtin/index-pack.c:1004 +#: builtin/index-pack.c:1009 msgid "Indexing objects" msgstr "" -#: builtin/index-pack.c:1030 +#: builtin/index-pack.c:1035 msgid "pack is corrupted (SHA1 mismatch)" msgstr "" -#: builtin/index-pack.c:1035 +#: builtin/index-pack.c:1040 msgid "cannot fstat packfile" msgstr "" -#: builtin/index-pack.c:1038 +#: builtin/index-pack.c:1043 msgid "pack has junk at the end" msgstr "" -#: builtin/index-pack.c:1049 +#: builtin/index-pack.c:1054 msgid "confusion beyond insanity in parse_pack_objects()" msgstr "" -#: builtin/index-pack.c:1072 +#: builtin/index-pack.c:1077 msgid "Resolving deltas" msgstr "" -#: builtin/index-pack.c:1082 +#: builtin/index-pack.c:1087 #, c-format msgid "unable to create thread: %s" msgstr "" -#: builtin/index-pack.c:1124 +#: builtin/index-pack.c:1129 msgid "confusion beyond insanity" msgstr "" -#: builtin/index-pack.c:1132 +#: builtin/index-pack.c:1137 #, c-format msgid "completed with %d local objects" msgstr "" -#: builtin/index-pack.c:1142 +#: builtin/index-pack.c:1147 #, c-format msgid "Unexpected tail checksum for %s (disk corruption?)" msgstr "" -#: builtin/index-pack.c:1146 +#: builtin/index-pack.c:1151 #, c-format msgid "pack has %d unresolved delta" msgid_plural "pack has %d unresolved deltas" msgstr[0] "" msgstr[1] "" -#: builtin/index-pack.c:1171 +#: builtin/index-pack.c:1176 #, c-format msgid "unable to deflate appended object (%d)" msgstr "" -#: builtin/index-pack.c:1250 +#: builtin/index-pack.c:1255 #, c-format msgid "local object %s is corrupt" msgstr "" -#: builtin/index-pack.c:1274 +#: builtin/index-pack.c:1279 msgid "error while closing pack file" msgstr "" -#: builtin/index-pack.c:1287 +#: builtin/index-pack.c:1292 #, c-format msgid "cannot write keep file '%s'" msgstr "" -#: builtin/index-pack.c:1295 +#: builtin/index-pack.c:1300 #, c-format msgid "cannot close written keep file '%s'" msgstr "" -#: builtin/index-pack.c:1308 +#: builtin/index-pack.c:1313 msgid "cannot store pack file" msgstr "" -#: builtin/index-pack.c:1319 +#: builtin/index-pack.c:1324 msgid "cannot store index file" msgstr "" -#: builtin/index-pack.c:1352 +#: builtin/index-pack.c:1357 #, c-format msgid "bad pack.indexversion=%<PRIu32>" msgstr "" -#: builtin/index-pack.c:1358 +#: builtin/index-pack.c:1363 #, c-format msgid "invalid number of threads specified (%d)" msgstr "" -#: builtin/index-pack.c:1362 builtin/index-pack.c:1535 +#: builtin/index-pack.c:1367 builtin/index-pack.c:1545 #, c-format msgid "no threads support, ignoring %s" msgstr "" -#: builtin/index-pack.c:1420 +#: builtin/index-pack.c:1425 #, c-format msgid "Cannot open existing pack file '%s'" msgstr "" -#: builtin/index-pack.c:1422 +#: builtin/index-pack.c:1427 #, c-format msgid "Cannot open existing pack idx file for '%s'" msgstr "" -#: builtin/index-pack.c:1469 +#: builtin/index-pack.c:1474 #, c-format msgid "non delta: %d object" msgid_plural "non delta: %d objects" msgstr[0] "" msgstr[1] "" -#: builtin/index-pack.c:1476 +#: builtin/index-pack.c:1481 #, c-format msgid "chain length = %d: %lu object" msgid_plural "chain length = %d: %lu objects" msgstr[0] "" msgstr[1] "" -#: builtin/index-pack.c:1503 +#: builtin/index-pack.c:1509 msgid "Cannot come back to cwd" msgstr "" -#: builtin/index-pack.c:1547 builtin/index-pack.c:1550 -#: builtin/index-pack.c:1562 builtin/index-pack.c:1566 +#: builtin/index-pack.c:1557 builtin/index-pack.c:1560 +#: builtin/index-pack.c:1572 builtin/index-pack.c:1576 #, c-format msgid "bad %s" msgstr "" -#: builtin/index-pack.c:1580 +#: builtin/index-pack.c:1590 msgid "--fix-thin cannot be used without --stdin" msgstr "" -#: builtin/index-pack.c:1584 builtin/index-pack.c:1594 +#: builtin/index-pack.c:1594 builtin/index-pack.c:1604 #, c-format msgid "packfile name '%s' does not end with '.pack'" msgstr "" -#: builtin/index-pack.c:1603 +#: builtin/index-pack.c:1613 msgid "--verify with no packfile name given" msgstr "" @@ -5513,7 +5715,7 @@ msgstr "" msgid "specify that the git repository is to be shared amongst several users" msgstr "" -#: builtin/init-db.c:493 builtin/prune-packed.c:77 +#: builtin/init-db.c:493 builtin/prune-packed.c:75 msgid "be quiet" msgstr "" @@ -5543,340 +5745,353 @@ msgstr "" msgid "Cannot access work tree '%s'" msgstr "" -#: builtin/log.c:40 +#: builtin/log.c:41 msgid "git log [<options>] [<revision range>] [[--] <path>...]\n" msgstr "" -#: builtin/log.c:41 +#: builtin/log.c:42 msgid " or: git show [options] <object>..." msgstr "" -#: builtin/log.c:103 +#: builtin/log.c:124 msgid "suppress diff output" msgstr "" -#: builtin/log.c:104 +#: builtin/log.c:125 msgid "show source" msgstr "" -#: builtin/log.c:105 +#: builtin/log.c:126 msgid "Use mail map file" msgstr "" -#: builtin/log.c:106 +#: builtin/log.c:127 msgid "decorate options" msgstr "" -#: builtin/log.c:199 +#: builtin/log.c:230 #, c-format msgid "Final output: %d %s\n" msgstr "" -#: builtin/log.c:422 builtin/log.c:514 +#: builtin/log.c:453 builtin/log.c:545 #, c-format msgid "Could not read object %s" msgstr "" -#: builtin/log.c:538 +#: builtin/log.c:569 #, c-format msgid "Unknown type: %d" msgstr "" -#: builtin/log.c:638 +#: builtin/log.c:669 msgid "format.headers without value" msgstr "" -#: builtin/log.c:720 +#: builtin/log.c:751 msgid "name of output directory is too long" msgstr "" -#: builtin/log.c:736 +#: builtin/log.c:767 #, c-format msgid "Cannot open patch file %s" msgstr "" -#: builtin/log.c:750 +#: builtin/log.c:781 msgid "Need exactly one range." msgstr "" -#: builtin/log.c:758 +#: builtin/log.c:789 msgid "Not a range." msgstr "" -#: builtin/log.c:860 +#: builtin/log.c:891 msgid "Cover letter needs email format" msgstr "" -#: builtin/log.c:936 +#: builtin/log.c:967 #, c-format msgid "insane in-reply-to: %s" msgstr "" -#: builtin/log.c:964 +#: builtin/log.c:995 msgid "git format-patch [options] [<since> | <revision range>]" msgstr "" -#: builtin/log.c:1009 +#: builtin/log.c:1040 msgid "Two output directories?" msgstr "" -#: builtin/log.c:1108 +#: builtin/log.c:1155 msgid "use [PATCH n/m] even with a single patch" msgstr "" -#: builtin/log.c:1111 +#: builtin/log.c:1158 msgid "use [PATCH] even with multiple patches" msgstr "" -#: builtin/log.c:1115 +#: builtin/log.c:1162 msgid "print patches to standard out" msgstr "" -#: builtin/log.c:1117 +#: builtin/log.c:1164 msgid "generate a cover letter" msgstr "" -#: builtin/log.c:1119 +#: builtin/log.c:1166 msgid "use simple number sequence for output file names" msgstr "" -#: builtin/log.c:1120 +#: builtin/log.c:1167 msgid "sfx" msgstr "" -#: builtin/log.c:1121 +#: builtin/log.c:1168 msgid "use <sfx> instead of '.patch'" msgstr "" -#: builtin/log.c:1123 +#: builtin/log.c:1170 msgid "start numbering patches at <n> instead of 1" msgstr "" -#: builtin/log.c:1125 +#: builtin/log.c:1172 msgid "mark the series as Nth re-roll" msgstr "" -#: builtin/log.c:1127 +#: builtin/log.c:1174 msgid "Use [<prefix>] instead of [PATCH]" msgstr "" -#: builtin/log.c:1130 +#: builtin/log.c:1177 msgid "store resulting files in <dir>" msgstr "" -#: builtin/log.c:1133 +#: builtin/log.c:1180 msgid "don't strip/add [PATCH]" msgstr "" -#: builtin/log.c:1136 +#: builtin/log.c:1183 msgid "don't output binary diffs" msgstr "" -#: builtin/log.c:1138 +#: builtin/log.c:1185 msgid "don't include a patch matching a commit upstream" msgstr "" -#: builtin/log.c:1140 +#: builtin/log.c:1187 msgid "show patch format instead of default (patch + stat)" msgstr "" -#: builtin/log.c:1142 +#: builtin/log.c:1189 msgid "Messaging" msgstr "" -#: builtin/log.c:1143 +#: builtin/log.c:1190 msgid "header" msgstr "" -#: builtin/log.c:1144 +#: builtin/log.c:1191 msgid "add email header" msgstr "" -#: builtin/log.c:1145 builtin/log.c:1147 +#: builtin/log.c:1192 builtin/log.c:1194 msgid "email" msgstr "" -#: builtin/log.c:1145 +#: builtin/log.c:1192 msgid "add To: header" msgstr "" -#: builtin/log.c:1147 +#: builtin/log.c:1194 msgid "add Cc: header" msgstr "" -#: builtin/log.c:1149 +#: builtin/log.c:1196 +msgid "ident" +msgstr "" + +#: builtin/log.c:1197 +msgid "set From address to <ident> (or committer ident if absent)" +msgstr "" + +#: builtin/log.c:1199 msgid "message-id" msgstr "" -#: builtin/log.c:1150 +#: builtin/log.c:1200 msgid "make first mail a reply to <message-id>" msgstr "" -#: builtin/log.c:1151 builtin/log.c:1154 +#: builtin/log.c:1201 builtin/log.c:1204 msgid "boundary" msgstr "" -#: builtin/log.c:1152 +#: builtin/log.c:1202 msgid "attach the patch" msgstr "" -#: builtin/log.c:1155 +#: builtin/log.c:1205 msgid "inline the patch" msgstr "" -#: builtin/log.c:1159 +#: builtin/log.c:1209 msgid "enable message threading, styles: shallow, deep" msgstr "" -#: builtin/log.c:1161 +#: builtin/log.c:1211 msgid "signature" msgstr "" -#: builtin/log.c:1162 +#: builtin/log.c:1212 msgid "add a signature" msgstr "" -#: builtin/log.c:1164 +#: builtin/log.c:1214 msgid "don't print the patch filenames" msgstr "" -#: builtin/log.c:1248 +#: builtin/log.c:1288 +#, c-format +msgid "invalid ident line: %s" +msgstr "" + +#: builtin/log.c:1303 msgid "-n and -k are mutually exclusive." msgstr "" -#: builtin/log.c:1250 +#: builtin/log.c:1305 msgid "--subject-prefix and -k are mutually exclusive." msgstr "" -#: builtin/log.c:1258 +#: builtin/log.c:1313 msgid "--name-only does not make sense" msgstr "" -#: builtin/log.c:1260 +#: builtin/log.c:1315 msgid "--name-status does not make sense" msgstr "" -#: builtin/log.c:1262 +#: builtin/log.c:1317 msgid "--check does not make sense" msgstr "" -#: builtin/log.c:1285 +#: builtin/log.c:1340 msgid "standard output, or directory, which one?" msgstr "" -#: builtin/log.c:1287 +#: builtin/log.c:1342 #, c-format msgid "Could not create directory '%s'" msgstr "" -#: builtin/log.c:1435 +#: builtin/log.c:1490 msgid "Failed to create output files" msgstr "" -#: builtin/log.c:1484 +#: builtin/log.c:1539 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]" msgstr "" -#: builtin/log.c:1539 +#: builtin/log.c:1594 #, c-format msgid "" "Could not find a tracked remote branch, please specify <upstream> manually.\n" msgstr "" -#: builtin/log.c:1552 builtin/log.c:1554 builtin/log.c:1566 +#: builtin/log.c:1607 builtin/log.c:1609 builtin/log.c:1621 #, c-format msgid "Unknown commit %s" msgstr "" -#: builtin/ls-files.c:402 +#: builtin/ls-files.c:408 msgid "git ls-files [options] [<file>...]" msgstr "" -#: builtin/ls-files.c:459 +#: builtin/ls-files.c:465 msgid "identify the file status with tags" msgstr "" -#: builtin/ls-files.c:461 +#: builtin/ls-files.c:467 msgid "use lowercase letters for 'assume unchanged' files" msgstr "" -#: builtin/ls-files.c:463 +#: builtin/ls-files.c:469 msgid "show cached files in the output (default)" msgstr "" -#: builtin/ls-files.c:465 +#: builtin/ls-files.c:471 msgid "show deleted files in the output" msgstr "" -#: builtin/ls-files.c:467 +#: builtin/ls-files.c:473 msgid "show modified files in the output" msgstr "" -#: builtin/ls-files.c:469 +#: builtin/ls-files.c:475 msgid "show other files in the output" msgstr "" -#: builtin/ls-files.c:471 +#: builtin/ls-files.c:477 msgid "show ignored files in the output" msgstr "" -#: builtin/ls-files.c:474 +#: builtin/ls-files.c:480 msgid "show staged contents' object name in the output" msgstr "" -#: builtin/ls-files.c:476 +#: builtin/ls-files.c:482 msgid "show files on the filesystem that need to be removed" msgstr "" -#: builtin/ls-files.c:478 +#: builtin/ls-files.c:484 msgid "show 'other' directories' name only" msgstr "" -#: builtin/ls-files.c:481 +#: builtin/ls-files.c:487 msgid "don't show empty directories" msgstr "" -#: builtin/ls-files.c:484 +#: builtin/ls-files.c:490 msgid "show unmerged files in the output" msgstr "" -#: builtin/ls-files.c:486 +#: builtin/ls-files.c:492 msgid "show resolve-undo information" msgstr "" -#: builtin/ls-files.c:488 +#: builtin/ls-files.c:494 msgid "skip files matching pattern" msgstr "" -#: builtin/ls-files.c:491 +#: builtin/ls-files.c:497 msgid "exclude patterns are read from <file>" msgstr "" -#: builtin/ls-files.c:494 +#: builtin/ls-files.c:500 msgid "read additional per-directory exclude patterns in <file>" msgstr "" -#: builtin/ls-files.c:496 +#: builtin/ls-files.c:502 msgid "add the standard git exclusions" msgstr "" -#: builtin/ls-files.c:499 +#: builtin/ls-files.c:505 msgid "make the output relative to the project top directory" msgstr "" -#: builtin/ls-files.c:502 +#: builtin/ls-files.c:508 msgid "if any <file> is not in the index, treat this as an error" msgstr "" -#: builtin/ls-files.c:503 +#: builtin/ls-files.c:509 msgid "tree-ish" msgstr "" -#: builtin/ls-files.c:504 +#: builtin/ls-files.c:510 msgid "pretend that paths removed since <tree-ish> are still present" msgstr "" -#: builtin/ls-files.c:506 +#: builtin/ls-files.c:512 msgid "show debugging data" msgstr "" @@ -5928,167 +6143,167 @@ msgstr "" msgid "git merge --abort" msgstr "" -#: builtin/merge.c:90 +#: builtin/merge.c:98 msgid "switch `m' requires a value" msgstr "" -#: builtin/merge.c:127 +#: builtin/merge.c:135 #, c-format msgid "Could not find merge strategy '%s'.\n" msgstr "" -#: builtin/merge.c:128 +#: builtin/merge.c:136 #, c-format msgid "Available strategies are:" msgstr "" -#: builtin/merge.c:133 +#: builtin/merge.c:141 #, c-format msgid "Available custom strategies are:" msgstr "" -#: builtin/merge.c:183 +#: builtin/merge.c:198 msgid "do not show a diffstat at the end of the merge" msgstr "" -#: builtin/merge.c:186 +#: builtin/merge.c:201 msgid "show a diffstat at the end of the merge" msgstr "" -#: builtin/merge.c:187 +#: builtin/merge.c:202 msgid "(synonym to --stat)" msgstr "" -#: builtin/merge.c:189 +#: builtin/merge.c:204 msgid "add (at most <n>) entries from shortlog to merge commit message" msgstr "" -#: builtin/merge.c:192 +#: builtin/merge.c:207 msgid "create a single commit instead of doing a merge" msgstr "" -#: builtin/merge.c:194 +#: builtin/merge.c:209 msgid "perform a commit if the merge succeeds (default)" msgstr "" -#: builtin/merge.c:196 +#: builtin/merge.c:211 msgid "edit message before committing" msgstr "" -#: builtin/merge.c:198 +#: builtin/merge.c:212 msgid "allow fast-forward (default)" msgstr "" -#: builtin/merge.c:200 +#: builtin/merge.c:214 msgid "abort if fast-forward is not possible" msgstr "" -#: builtin/merge.c:203 +#: builtin/merge.c:218 msgid "Verify that the named commit has a valid GPG signature" msgstr "" -#: builtin/merge.c:204 builtin/notes.c:866 builtin/revert.c:112 +#: builtin/merge.c:219 builtin/notes.c:738 builtin/revert.c:114 msgid "strategy" msgstr "" -#: builtin/merge.c:205 +#: builtin/merge.c:220 msgid "merge strategy to use" msgstr "" -#: builtin/merge.c:206 +#: builtin/merge.c:221 msgid "option=value" msgstr "" -#: builtin/merge.c:207 +#: builtin/merge.c:222 msgid "option for selected merge strategy" msgstr "" -#: builtin/merge.c:209 +#: builtin/merge.c:224 msgid "merge commit message (for a non-fast-forward merge)" msgstr "" -#: builtin/merge.c:213 +#: builtin/merge.c:228 msgid "abort the current in-progress merge" msgstr "" -#: builtin/merge.c:242 +#: builtin/merge.c:257 msgid "could not run stash." msgstr "" -#: builtin/merge.c:247 +#: builtin/merge.c:262 msgid "stash failed" msgstr "" -#: builtin/merge.c:252 +#: builtin/merge.c:267 #, c-format msgid "not a valid object: %s" msgstr "" -#: builtin/merge.c:271 builtin/merge.c:288 +#: builtin/merge.c:286 builtin/merge.c:303 msgid "read-tree failed" msgstr "" -#: builtin/merge.c:318 +#: builtin/merge.c:333 msgid " (nothing to squash)" msgstr "" -#: builtin/merge.c:331 +#: builtin/merge.c:346 #, c-format msgid "Squash commit -- not updating HEAD\n" msgstr "" -#: builtin/merge.c:363 +#: builtin/merge.c:378 msgid "Writing SQUASH_MSG" msgstr "" -#: builtin/merge.c:365 +#: builtin/merge.c:380 msgid "Finishing SQUASH_MSG" msgstr "" -#: builtin/merge.c:388 +#: builtin/merge.c:403 #, c-format msgid "No merge message -- not updating HEAD\n" msgstr "" -#: builtin/merge.c:438 +#: builtin/merge.c:453 #, c-format msgid "'%s' does not point to a commit" msgstr "" -#: builtin/merge.c:550 +#: builtin/merge.c:565 #, c-format msgid "Bad branch.%s.mergeoptions string: %s" msgstr "" -#: builtin/merge.c:643 +#: builtin/merge.c:657 msgid "git write-tree failed to write a tree" msgstr "" -#: builtin/merge.c:671 +#: builtin/merge.c:685 msgid "Not handling anything other than two heads merge." msgstr "" -#: builtin/merge.c:685 +#: builtin/merge.c:699 #, c-format msgid "Unknown option for merge-recursive: -X%s" msgstr "" -#: builtin/merge.c:699 +#: builtin/merge.c:713 #, c-format msgid "unable to write %s" msgstr "" -#: builtin/merge.c:788 +#: builtin/merge.c:802 #, c-format msgid "Could not read from '%s'" msgstr "" -#: builtin/merge.c:797 +#: builtin/merge.c:811 #, c-format msgid "Not committing merge; use 'git commit' to complete the merge.\n" msgstr "" -#: builtin/merge.c:803 +#: builtin/merge.c:817 #, c-format msgid "" "Please enter a commit message to explain why this merge is necessary,\n" @@ -6098,161 +6313,157 @@ msgid "" "the commit.\n" msgstr "" -#: builtin/merge.c:827 +#: builtin/merge.c:841 msgid "Empty commit message." msgstr "" -#: builtin/merge.c:839 +#: builtin/merge.c:853 #, c-format msgid "Wonderful.\n" msgstr "" -#: builtin/merge.c:904 +#: builtin/merge.c:918 #, c-format msgid "Automatic merge failed; fix conflicts and then commit the result.\n" msgstr "" -#: builtin/merge.c:920 +#: builtin/merge.c:934 #, c-format msgid "'%s' is not a commit" msgstr "" -#: builtin/merge.c:961 +#: builtin/merge.c:975 msgid "No current branch." msgstr "" -#: builtin/merge.c:963 +#: builtin/merge.c:977 msgid "No remote for the current branch." msgstr "" -#: builtin/merge.c:965 +#: builtin/merge.c:979 msgid "No default upstream defined for the current branch." msgstr "" -#: builtin/merge.c:970 +#: builtin/merge.c:984 #, c-format -msgid "No remote tracking branch for %s from %s" +msgid "No remote-tracking branch for %s from %s" msgstr "" -#: builtin/merge.c:1057 builtin/merge.c:1214 -#, c-format -msgid "%s - not something we can merge" -msgstr "" - -#: builtin/merge.c:1125 +#: builtin/merge.c:1140 msgid "There is no merge to abort (MERGE_HEAD missing)." msgstr "" -#: builtin/merge.c:1141 git-pull.sh:31 +#: builtin/merge.c:1156 git-pull.sh:31 msgid "" "You have not concluded your merge (MERGE_HEAD exists).\n" "Please, commit your changes before you can merge." msgstr "" -#: builtin/merge.c:1144 git-pull.sh:34 +#: builtin/merge.c:1159 git-pull.sh:34 msgid "You have not concluded your merge (MERGE_HEAD exists)." msgstr "" -#: builtin/merge.c:1148 +#: builtin/merge.c:1163 msgid "" "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" "Please, commit your changes before you can merge." msgstr "" -#: builtin/merge.c:1151 +#: builtin/merge.c:1166 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." msgstr "" -#: builtin/merge.c:1160 +#: builtin/merge.c:1175 msgid "You cannot combine --squash with --no-ff." msgstr "" -#: builtin/merge.c:1165 -msgid "You cannot combine --no-ff with --ff-only." -msgstr "" - -#: builtin/merge.c:1172 +#: builtin/merge.c:1184 msgid "No commit specified and merge.defaultToUpstream not set." msgstr "" -#: builtin/merge.c:1204 +#: builtin/merge.c:1216 msgid "Can merge only exactly one commit into empty head" msgstr "" -#: builtin/merge.c:1207 +#: builtin/merge.c:1219 msgid "Squash commit into empty head not supported yet" msgstr "" -#: builtin/merge.c:1209 +#: builtin/merge.c:1221 msgid "Non-fast-forward commit does not make sense into an empty head" msgstr "" -#: builtin/merge.c:1265 +#: builtin/merge.c:1226 +#, c-format +msgid "%s - not something we can merge" +msgstr "" + +#: builtin/merge.c:1277 #, c-format msgid "Commit %s has an untrusted GPG signature, allegedly by %s." msgstr "" -#: builtin/merge.c:1268 +#: builtin/merge.c:1280 #, c-format msgid "Commit %s has a bad GPG signature allegedly by %s." msgstr "" #. 'N' -#: builtin/merge.c:1271 +#: builtin/merge.c:1283 #, c-format msgid "Commit %s does not have a GPG signature." msgstr "" -#: builtin/merge.c:1274 +#: builtin/merge.c:1286 #, c-format msgid "Commit %s has a good GPG signature by %s\n" msgstr "" -#: builtin/merge.c:1358 +#: builtin/merge.c:1370 #, c-format msgid "Updating %s..%s\n" msgstr "" -#: builtin/merge.c:1397 +#: builtin/merge.c:1409 #, c-format msgid "Trying really trivial in-index merge...\n" msgstr "" -#: builtin/merge.c:1404 +#: builtin/merge.c:1416 #, c-format msgid "Nope.\n" msgstr "" -#: builtin/merge.c:1436 +#: builtin/merge.c:1448 msgid "Not possible to fast-forward, aborting." msgstr "" -#: builtin/merge.c:1459 builtin/merge.c:1538 +#: builtin/merge.c:1471 builtin/merge.c:1550 #, c-format msgid "Rewinding the tree to pristine...\n" msgstr "" -#: builtin/merge.c:1463 +#: builtin/merge.c:1475 #, c-format msgid "Trying merge strategy %s...\n" msgstr "" -#: builtin/merge.c:1529 +#: builtin/merge.c:1541 #, c-format msgid "No merge strategy handled the merge.\n" msgstr "" -#: builtin/merge.c:1531 +#: builtin/merge.c:1543 #, c-format msgid "Merge with strategy %s failed.\n" msgstr "" -#: builtin/merge.c:1540 +#: builtin/merge.c:1552 #, c-format msgid "Using the %s to prepare resolving by hand.\n" msgstr "" -#: builtin/merge.c:1552 +#: builtin/merge.c:1564 #, c-format msgid "Automatic merge went well; stopped before committing as requested\n" msgstr "" @@ -6417,369 +6628,352 @@ msgstr "" msgid "renaming '%s' failed" msgstr "" -#: builtin/name-rev.c:175 +#: builtin/name-rev.c:259 msgid "git name-rev [options] <commit>..." msgstr "" -#: builtin/name-rev.c:176 +#: builtin/name-rev.c:260 msgid "git name-rev [options] --all" msgstr "" -#: builtin/name-rev.c:177 +#: builtin/name-rev.c:261 msgid "git name-rev [options] --stdin" msgstr "" -#: builtin/name-rev.c:229 +#: builtin/name-rev.c:313 msgid "print only names (no SHA-1)" msgstr "" -#: builtin/name-rev.c:230 +#: builtin/name-rev.c:314 msgid "only use tags to name the commits" msgstr "" -#: builtin/name-rev.c:232 +#: builtin/name-rev.c:316 msgid "only use refs matching <pattern>" msgstr "" -#: builtin/name-rev.c:234 +#: builtin/name-rev.c:318 msgid "list all commits reachable from all refs" msgstr "" -#: builtin/name-rev.c:235 +#: builtin/name-rev.c:319 msgid "read from stdin" msgstr "" -#: builtin/name-rev.c:236 +#: builtin/name-rev.c:320 msgid "allow to print `undefined` names" msgstr "" -#: builtin/notes.c:26 +#: builtin/name-rev.c:326 +msgid "dereference tags in the input (internal use)" +msgstr "" + +#: builtin/notes.c:24 msgid "git notes [--ref <notes_ref>] [list [<object>]]" msgstr "" -#: builtin/notes.c:27 +#: builtin/notes.c:25 msgid "" "git notes [--ref <notes_ref>] add [-f] [-m <msg> | -F <file> | (-c | -C) " "<object>] [<object>]" msgstr "" -#: builtin/notes.c:28 +#: builtin/notes.c:26 msgid "git notes [--ref <notes_ref>] copy [-f] <from-object> <to-object>" msgstr "" -#: builtin/notes.c:29 +#: builtin/notes.c:27 msgid "" "git notes [--ref <notes_ref>] append [-m <msg> | -F <file> | (-c | -C) " "<object>] [<object>]" msgstr "" -#: builtin/notes.c:30 +#: builtin/notes.c:28 msgid "git notes [--ref <notes_ref>] edit [<object>]" msgstr "" -#: builtin/notes.c:31 +#: builtin/notes.c:29 msgid "git notes [--ref <notes_ref>] show [<object>]" msgstr "" -#: builtin/notes.c:32 +#: builtin/notes.c:30 msgid "" "git notes [--ref <notes_ref>] merge [-v | -q] [-s <strategy> ] <notes_ref>" msgstr "" -#: builtin/notes.c:33 +#: builtin/notes.c:31 msgid "git notes merge --commit [-v | -q]" msgstr "" -#: builtin/notes.c:34 +#: builtin/notes.c:32 msgid "git notes merge --abort [-v | -q]" msgstr "" -#: builtin/notes.c:35 +#: builtin/notes.c:33 msgid "git notes [--ref <notes_ref>] remove [<object>...]" msgstr "" -#: builtin/notes.c:36 +#: builtin/notes.c:34 msgid "git notes [--ref <notes_ref>] prune [-n | -v]" msgstr "" -#: builtin/notes.c:37 +#: builtin/notes.c:35 msgid "git notes [--ref <notes_ref>] get-ref" msgstr "" -#: builtin/notes.c:42 +#: builtin/notes.c:40 msgid "git notes [list [<object>]]" msgstr "" -#: builtin/notes.c:47 +#: builtin/notes.c:45 msgid "git notes add [<options>] [<object>]" msgstr "" -#: builtin/notes.c:52 +#: builtin/notes.c:50 msgid "git notes copy [<options>] <from-object> <to-object>" msgstr "" -#: builtin/notes.c:53 +#: builtin/notes.c:51 msgid "git notes copy --stdin [<from-object> <to-object>]..." msgstr "" -#: builtin/notes.c:58 +#: builtin/notes.c:56 msgid "git notes append [<options>] [<object>]" msgstr "" -#: builtin/notes.c:63 +#: builtin/notes.c:61 msgid "git notes edit [<object>]" msgstr "" -#: builtin/notes.c:68 +#: builtin/notes.c:66 msgid "git notes show [<object>]" msgstr "" -#: builtin/notes.c:73 +#: builtin/notes.c:71 msgid "git notes merge [<options>] <notes_ref>" msgstr "" -#: builtin/notes.c:74 +#: builtin/notes.c:72 msgid "git notes merge --commit [<options>]" msgstr "" -#: builtin/notes.c:75 +#: builtin/notes.c:73 msgid "git notes merge --abort [<options>]" msgstr "" -#: builtin/notes.c:80 +#: builtin/notes.c:78 msgid "git notes remove [<object>]" msgstr "" -#: builtin/notes.c:85 +#: builtin/notes.c:83 msgid "git notes prune [<options>]" msgstr "" -#: builtin/notes.c:90 +#: builtin/notes.c:88 msgid "git notes get-ref" msgstr "" -#: builtin/notes.c:139 +#: builtin/notes.c:137 #, c-format msgid "unable to start 'show' for object '%s'" msgstr "" -#: builtin/notes.c:143 +#: builtin/notes.c:141 msgid "could not read 'show' output" msgstr "" -#: builtin/notes.c:151 +#: builtin/notes.c:149 #, c-format msgid "failed to finish 'show' for object '%s'" msgstr "" -#: builtin/notes.c:169 builtin/tag.c:341 +#: builtin/notes.c:167 builtin/tag.c:341 #, c-format msgid "could not create file '%s'" msgstr "" -#: builtin/notes.c:188 +#: builtin/notes.c:186 msgid "Please supply the note contents using either -m or -F option" msgstr "" -#: builtin/notes.c:209 builtin/notes.c:972 +#: builtin/notes.c:207 builtin/notes.c:844 #, c-format msgid "Removing note for object %s\n" msgstr "" -#: builtin/notes.c:214 +#: builtin/notes.c:212 msgid "unable to write note object" msgstr "" -#: builtin/notes.c:216 +#: builtin/notes.c:214 #, c-format msgid "The note contents has been left in %s" msgstr "" -#: builtin/notes.c:250 builtin/tag.c:540 +#: builtin/notes.c:248 builtin/tag.c:540 #, c-format msgid "cannot read '%s'" msgstr "" -#: builtin/notes.c:252 builtin/tag.c:543 +#: builtin/notes.c:250 builtin/tag.c:543 #, c-format msgid "could not open or read '%s'" msgstr "" -#: builtin/notes.c:271 builtin/notes.c:444 builtin/notes.c:446 -#: builtin/notes.c:506 builtin/notes.c:560 builtin/notes.c:643 -#: builtin/notes.c:648 builtin/notes.c:723 builtin/notes.c:765 -#: builtin/notes.c:967 builtin/tag.c:556 +#: builtin/notes.c:269 builtin/notes.c:316 builtin/notes.c:318 +#: builtin/notes.c:378 builtin/notes.c:432 builtin/notes.c:515 +#: builtin/notes.c:520 builtin/notes.c:595 builtin/notes.c:637 +#: builtin/notes.c:839 builtin/tag.c:556 #, c-format msgid "Failed to resolve '%s' as a valid ref." msgstr "" -#: builtin/notes.c:274 +#: builtin/notes.c:272 #, c-format msgid "Failed to read object '%s'." msgstr "" -#: builtin/notes.c:298 -msgid "Cannot commit uninitialized/unreferenced notes tree" -msgstr "" - -#: builtin/notes.c:339 -#, c-format -msgid "Bad notes.rewriteMode value: '%s'" -msgstr "" - -#: builtin/notes.c:349 -#, c-format -msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" -msgstr "" - -#. TRANSLATORS: The first %s is the name of the -#. environment variable, the second %s is its value -#: builtin/notes.c:376 -#, c-format -msgid "Bad %s value: '%s'" -msgstr "" - -#: builtin/notes.c:440 +#: builtin/notes.c:312 #, c-format msgid "Malformed input line: '%s'." msgstr "" -#: builtin/notes.c:455 +#: builtin/notes.c:327 #, c-format msgid "Failed to copy notes from '%s' to '%s'" msgstr "" -#: builtin/notes.c:499 builtin/notes.c:553 builtin/notes.c:626 -#: builtin/notes.c:638 builtin/notes.c:711 builtin/notes.c:758 -#: builtin/notes.c:1032 +#: builtin/notes.c:371 builtin/notes.c:425 builtin/notes.c:498 +#: builtin/notes.c:510 builtin/notes.c:583 builtin/notes.c:630 +#: builtin/notes.c:904 msgid "too many parameters" msgstr "" -#: builtin/notes.c:512 builtin/notes.c:771 +#: builtin/notes.c:384 builtin/notes.c:643 #, c-format msgid "No note found for object %s." msgstr "" -#: builtin/notes.c:534 builtin/notes.c:691 +#: builtin/notes.c:406 builtin/notes.c:563 msgid "note contents as a string" msgstr "" -#: builtin/notes.c:537 builtin/notes.c:694 +#: builtin/notes.c:409 builtin/notes.c:566 msgid "note contents in a file" msgstr "" -#: builtin/notes.c:539 builtin/notes.c:542 builtin/notes.c:696 -#: builtin/notes.c:699 builtin/tag.c:474 +#: builtin/notes.c:411 builtin/notes.c:414 builtin/notes.c:568 +#: builtin/notes.c:571 builtin/tag.c:474 msgid "object" msgstr "" -#: builtin/notes.c:540 builtin/notes.c:697 +#: builtin/notes.c:412 builtin/notes.c:569 msgid "reuse and edit specified note object" msgstr "" -#: builtin/notes.c:543 builtin/notes.c:700 +#: builtin/notes.c:415 builtin/notes.c:572 msgid "reuse specified note object" msgstr "" -#: builtin/notes.c:545 builtin/notes.c:613 +#: builtin/notes.c:417 builtin/notes.c:485 msgid "replace existing notes" msgstr "" -#: builtin/notes.c:579 +#: builtin/notes.c:451 #, c-format msgid "" "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite " "existing notes" msgstr "" -#: builtin/notes.c:584 builtin/notes.c:661 +#: builtin/notes.c:456 builtin/notes.c:533 #, c-format msgid "Overwriting existing notes for object %s\n" msgstr "" -#: builtin/notes.c:614 +#: builtin/notes.c:486 msgid "read objects from stdin" msgstr "" -#: builtin/notes.c:616 +#: builtin/notes.c:488 msgid "load rewriting config for <command> (implies --stdin)" msgstr "" -#: builtin/notes.c:634 +#: builtin/notes.c:506 msgid "too few parameters" msgstr "" -#: builtin/notes.c:655 +#: builtin/notes.c:527 #, c-format msgid "" "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite " "existing notes" msgstr "" -#: builtin/notes.c:667 +#: builtin/notes.c:539 #, c-format msgid "Missing notes on source object %s. Cannot copy." msgstr "" -#: builtin/notes.c:716 +#: builtin/notes.c:588 #, c-format msgid "" "The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n" "Please use 'git notes add -f -m/-F/-c/-C' instead.\n" msgstr "" -#: builtin/notes.c:863 +#: builtin/notes.c:735 msgid "General options" msgstr "" -#: builtin/notes.c:865 +#: builtin/notes.c:737 msgid "Merge options" msgstr "" -#: builtin/notes.c:867 +#: builtin/notes.c:739 msgid "" "resolve notes conflicts using the given strategy (manual/ours/theirs/union/" "cat_sort_uniq)" msgstr "" -#: builtin/notes.c:869 +#: builtin/notes.c:741 msgid "Committing unmerged notes" msgstr "" -#: builtin/notes.c:871 +#: builtin/notes.c:743 msgid "finalize notes merge by committing unmerged notes" msgstr "" -#: builtin/notes.c:873 +#: builtin/notes.c:745 msgid "Aborting notes merge resolution" msgstr "" -#: builtin/notes.c:875 +#: builtin/notes.c:747 msgid "abort notes merge" msgstr "" -#: builtin/notes.c:970 +#: builtin/notes.c:842 #, c-format msgid "Object %s has no note\n" msgstr "" -#: builtin/notes.c:982 +#: builtin/notes.c:854 msgid "attempt to remove non-existent note is not an error" msgstr "" -#: builtin/notes.c:985 +#: builtin/notes.c:857 msgid "read object names from the standard input" msgstr "" -#: builtin/notes.c:1066 +#: builtin/notes.c:938 msgid "notes_ref" msgstr "" -#: builtin/notes.c:1067 +#: builtin/notes.c:939 msgid "use notes from <notes_ref>" msgstr "" -#: builtin/notes.c:1102 builtin/remote.c:1598 +#: builtin/notes.c:974 builtin/remote.c:1598 #, c-format msgid "Unknown subcommand: %s" msgstr "" @@ -7002,7 +7196,7 @@ msgid "" "%s" msgstr "" -#: builtin/push.c:121 +#: builtin/push.c:117 #, c-format msgid "" "You are not currently on a branch.\n" @@ -7012,7 +7206,7 @@ msgid "" " git push %s HEAD:<name-of-remote-branch>\n" msgstr "" -#: builtin/push.c:128 +#: builtin/push.c:131 #, c-format msgid "" "The current branch %s has no upstream branch.\n" @@ -7021,12 +7215,12 @@ msgid "" " git push --set-upstream %s %s\n" msgstr "" -#: builtin/push.c:136 +#: builtin/push.c:139 #, c-format msgid "The current branch %s has multiple upstream branches, refusing to push." msgstr "" -#: builtin/push.c:139 +#: builtin/push.c:142 #, c-format msgid "" "You are pushing to remote '%s', which is not the upstream of\n" @@ -7034,7 +7228,7 @@ msgid "" "to update which remote branch." msgstr "" -#: builtin/push.c:151 +#: builtin/push.c:165 msgid "" "push.default is unset; its implicit value is changing in\n" "Git 2.0 from 'matching' to 'simple'. To squelch this message\n" @@ -7052,20 +7246,20 @@ msgid "" "'current' instead of 'simple' if you sometimes use older versions of Git)" msgstr "" -#: builtin/push.c:199 +#: builtin/push.c:225 msgid "" "You didn't specify any refspecs to push, and push.default is \"nothing\"." msgstr "" -#: builtin/push.c:206 +#: builtin/push.c:232 msgid "" "Updates were rejected because the tip of your current branch is behind\n" -"its remote counterpart. Merge the remote changes (e.g. 'git pull')\n" -"before pushing again.\n" +"its remote counterpart. Integrate the remote changes (e.g.\n" +"'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" -#: builtin/push.c:212 +#: builtin/push.c:238 msgid "" "Updates were rejected because a pushed branch tip is behind its remote\n" "counterpart. If you did not intend to push that branch, you may want to\n" @@ -7073,50 +7267,50 @@ msgid "" "to 'simple', 'current' or 'upstream' to push only the current branch." msgstr "" -#: builtin/push.c:218 +#: builtin/push.c:244 msgid "" "Updates were rejected because a pushed branch tip is behind its remote\n" -"counterpart. Check out this branch and merge the remote changes\n" -"(e.g. 'git pull') before pushing again.\n" +"counterpart. Check out this branch and integrate the remote changes\n" +"(e.g. 'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" -#: builtin/push.c:224 +#: builtin/push.c:250 msgid "" "Updates were rejected because the remote contains work that you do\n" "not have locally. This is usually caused by another repository pushing\n" -"to the same ref. You may want to first merge the remote changes (e.g.,\n" -"'git pull') before pushing again.\n" +"to the same ref. You may want to first integrate the remote changes\n" +"(e.g., 'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" -#: builtin/push.c:231 +#: builtin/push.c:257 msgid "Updates were rejected because the tag already exists in the remote." msgstr "" -#: builtin/push.c:234 +#: builtin/push.c:260 msgid "" "You cannot update a remote ref that points at a non-commit object,\n" "or update a remote ref to make it point at a non-commit object,\n" "without using the '--force' option.\n" msgstr "" -#: builtin/push.c:294 +#: builtin/push.c:320 #, c-format msgid "Pushing to %s\n" msgstr "" -#: builtin/push.c:298 +#: builtin/push.c:324 #, c-format msgid "failed to push some refs to '%s'" msgstr "" -#: builtin/push.c:331 +#: builtin/push.c:357 #, c-format msgid "bad repository '%s'" msgstr "" -#: builtin/push.c:332 +#: builtin/push.c:358 msgid "" "No configured push destination.\n" "Either specify the URL from the command-line or configure a remote " @@ -7129,87 +7323,87 @@ msgid "" " git push <name>\n" msgstr "" -#: builtin/push.c:347 +#: builtin/push.c:373 msgid "--all and --tags are incompatible" msgstr "" -#: builtin/push.c:348 +#: builtin/push.c:374 msgid "--all can't be combined with refspecs" msgstr "" -#: builtin/push.c:353 +#: builtin/push.c:379 msgid "--mirror and --tags are incompatible" msgstr "" -#: builtin/push.c:354 +#: builtin/push.c:380 msgid "--mirror can't be combined with refspecs" msgstr "" -#: builtin/push.c:359 +#: builtin/push.c:385 msgid "--all and --mirror are incompatible" msgstr "" -#: builtin/push.c:419 +#: builtin/push.c:445 msgid "repository" msgstr "" -#: builtin/push.c:420 +#: builtin/push.c:446 msgid "push all refs" msgstr "" -#: builtin/push.c:421 +#: builtin/push.c:447 msgid "mirror all refs" msgstr "" -#: builtin/push.c:423 +#: builtin/push.c:449 msgid "delete refs" msgstr "" -#: builtin/push.c:424 +#: builtin/push.c:450 msgid "push tags (can't be used with --all or --mirror)" msgstr "" -#: builtin/push.c:427 +#: builtin/push.c:453 msgid "force updates" msgstr "" -#: builtin/push.c:428 +#: builtin/push.c:454 msgid "check" msgstr "" -#: builtin/push.c:429 +#: builtin/push.c:455 msgid "control recursive pushing of submodules" msgstr "" -#: builtin/push.c:431 +#: builtin/push.c:457 msgid "use thin pack" msgstr "" -#: builtin/push.c:432 builtin/push.c:433 +#: builtin/push.c:458 builtin/push.c:459 msgid "receive pack program" msgstr "" -#: builtin/push.c:434 +#: builtin/push.c:460 msgid "set upstream for git pull/status" msgstr "" -#: builtin/push.c:437 +#: builtin/push.c:463 msgid "prune locally removed refs" msgstr "" -#: builtin/push.c:439 +#: builtin/push.c:465 msgid "bypass pre-push hook" msgstr "" -#: builtin/push.c:440 +#: builtin/push.c:466 msgid "push missing but relevant tags" msgstr "" -#: builtin/push.c:450 +#: builtin/push.c:476 msgid "--delete is incompatible with --all, --mirror and --tags" msgstr "" -#: builtin/push.c:452 +#: builtin/push.c:478 msgid "--delete doesn't make sense without any refs" msgstr "" @@ -7220,70 +7414,80 @@ msgid "" "index-output=<file>] (--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])" msgstr "" -#: builtin/read-tree.c:108 +#: builtin/read-tree.c:109 msgid "write resulting index to <file>" msgstr "" -#: builtin/read-tree.c:111 +#: builtin/read-tree.c:112 msgid "only empty the index" msgstr "" -#: builtin/read-tree.c:113 +#: builtin/read-tree.c:114 msgid "Merging" msgstr "" -#: builtin/read-tree.c:115 +#: builtin/read-tree.c:116 msgid "perform a merge in addition to a read" msgstr "" -#: builtin/read-tree.c:117 +#: builtin/read-tree.c:118 msgid "3-way merge if no file level merging required" msgstr "" -#: builtin/read-tree.c:119 +#: builtin/read-tree.c:120 msgid "3-way merge in presence of adds and removes" msgstr "" -#: builtin/read-tree.c:121 +#: builtin/read-tree.c:122 msgid "same as -m, but discard unmerged entries" msgstr "" -#: builtin/read-tree.c:122 +#: builtin/read-tree.c:123 msgid "<subdirectory>/" msgstr "" -#: builtin/read-tree.c:123 +#: builtin/read-tree.c:124 msgid "read the tree into the index under <subdirectory>/" msgstr "" -#: builtin/read-tree.c:126 +#: builtin/read-tree.c:127 msgid "update working tree with merge result" msgstr "" -#: builtin/read-tree.c:128 +#: builtin/read-tree.c:129 msgid "gitignore" msgstr "" -#: builtin/read-tree.c:129 +#: builtin/read-tree.c:130 msgid "allow explicitly ignored files to be overwritten" msgstr "" -#: builtin/read-tree.c:132 +#: builtin/read-tree.c:133 msgid "don't check the working tree after merging" msgstr "" -#: builtin/read-tree.c:133 +#: builtin/read-tree.c:134 msgid "don't update the index or the work tree" msgstr "" -#: builtin/read-tree.c:135 +#: builtin/read-tree.c:136 msgid "skip applying sparse checkout filter" msgstr "" -#: builtin/read-tree.c:137 +#: builtin/read-tree.c:138 msgid "debug unpack-trees" msgstr "" +#: builtin/reflog.c:500 +#, c-format +msgid "%s' for '%s' is not a valid timestamp" +msgstr "" + +#: builtin/reflog.c:616 builtin/reflog.c:621 +#, c-format +msgid "'%s' is not a valid timestamp" +msgstr "" + #: builtin/remote.c:11 msgid "git remote [-v | --verbose]" msgstr "" @@ -7844,95 +8048,95 @@ msgstr "" msgid "Failed to find tree of %s." msgstr "" -#: builtin/reset.c:98 +#: builtin/reset.c:99 #, c-format msgid "HEAD is now at %s" msgstr "" -#: builtin/reset.c:169 +#: builtin/reset.c:172 #, c-format msgid "Cannot do a %s reset in the middle of a merge." msgstr "" -#: builtin/reset.c:248 +#: builtin/reset.c:251 msgid "be quiet, only report errors" msgstr "" -#: builtin/reset.c:250 +#: builtin/reset.c:253 msgid "reset HEAD and index" msgstr "" -#: builtin/reset.c:251 +#: builtin/reset.c:254 msgid "reset only HEAD" msgstr "" -#: builtin/reset.c:253 builtin/reset.c:255 +#: builtin/reset.c:256 builtin/reset.c:258 msgid "reset HEAD, index and working tree" msgstr "" -#: builtin/reset.c:257 +#: builtin/reset.c:260 msgid "reset HEAD but keep local changes" msgstr "" -#: builtin/reset.c:275 +#: builtin/reset.c:278 #, c-format msgid "Failed to resolve '%s' as a valid revision." msgstr "" -#: builtin/reset.c:278 builtin/reset.c:286 +#: builtin/reset.c:281 builtin/reset.c:289 #, c-format msgid "Could not parse object '%s'." msgstr "" -#: builtin/reset.c:283 +#: builtin/reset.c:286 #, c-format msgid "Failed to resolve '%s' as a valid tree." msgstr "" -#: builtin/reset.c:292 +#: builtin/reset.c:295 msgid "--patch is incompatible with --{hard,mixed,soft}" msgstr "" -#: builtin/reset.c:301 +#: builtin/reset.c:304 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead." msgstr "" -#: builtin/reset.c:303 +#: builtin/reset.c:306 #, c-format msgid "Cannot do %s reset with paths." msgstr "" -#: builtin/reset.c:313 +#: builtin/reset.c:316 #, c-format msgid "%s reset is not allowed in a bare repository" msgstr "" -#: builtin/reset.c:333 +#: builtin/reset.c:336 #, c-format msgid "Could not reset index file to revision '%s'." msgstr "" -#: builtin/reset.c:339 +#: builtin/reset.c:342 msgid "Unstaged changes after reset:" msgstr "" -#: builtin/reset.c:344 +#: builtin/reset.c:347 msgid "Could not write new index file." msgstr "" -#: builtin/rev-parse.c:339 +#: builtin/rev-parse.c:345 msgid "git rev-parse --parseopt [options] -- [<args>...]" msgstr "" -#: builtin/rev-parse.c:344 +#: builtin/rev-parse.c:350 msgid "keep the `--` passed as an arg" msgstr "" -#: builtin/rev-parse.c:346 +#: builtin/rev-parse.c:352 msgid "stop parsing after the first non-option argument" msgstr "" -#: builtin/rev-parse.c:464 +#: builtin/rev-parse.c:470 msgid "" "git rev-parse --parseopt [options] -- [<args>...]\n" " or: git rev-parse --sq-quote [<arg>...]\n" @@ -7957,137 +8161,159 @@ msgstr "" msgid "git cherry-pick <subcommand>" msgstr "" -#: builtin/revert.c:70 builtin/revert.c:92 +#: builtin/revert.c:71 builtin/revert.c:94 #, c-format msgid "%s: %s cannot be used with %s" msgstr "" -#: builtin/revert.c:103 +#: builtin/revert.c:105 msgid "end revert or cherry-pick sequence" msgstr "" -#: builtin/revert.c:104 +#: builtin/revert.c:106 msgid "resume revert or cherry-pick sequence" msgstr "" -#: builtin/revert.c:105 +#: builtin/revert.c:107 msgid "cancel revert or cherry-pick sequence" msgstr "" -#: builtin/revert.c:106 +#: builtin/revert.c:108 msgid "don't automatically commit" msgstr "" -#: builtin/revert.c:107 +#: builtin/revert.c:109 msgid "edit the commit message" msgstr "" -#: builtin/revert.c:110 +#: builtin/revert.c:112 msgid "parent number" msgstr "" -#: builtin/revert.c:112 +#: builtin/revert.c:114 msgid "merge strategy" msgstr "" -#: builtin/revert.c:113 +#: builtin/revert.c:115 msgid "option" msgstr "" -#: builtin/revert.c:114 +#: builtin/revert.c:116 msgid "option for merge strategy" msgstr "" -#: builtin/revert.c:125 +#: builtin/revert.c:127 msgid "append commit name" msgstr "" -#: builtin/revert.c:126 +#: builtin/revert.c:128 msgid "allow fast-forward" msgstr "" -#: builtin/revert.c:127 +#: builtin/revert.c:129 msgid "preserve initially empty commits" msgstr "" -#: builtin/revert.c:128 +#: builtin/revert.c:130 msgid "allow commits with empty messages" msgstr "" -#: builtin/revert.c:129 +#: builtin/revert.c:131 msgid "keep redundant, empty commits" msgstr "" -#: builtin/revert.c:133 +#: builtin/revert.c:135 msgid "program error" msgstr "" -#: builtin/revert.c:223 +#: builtin/revert.c:225 msgid "revert failed" msgstr "" -#: builtin/revert.c:238 +#: builtin/revert.c:240 msgid "cherry-pick failed" msgstr "" -#: builtin/rm.c:15 +#: builtin/rm.c:16 msgid "git rm [options] [--] <file>..." msgstr "" -#: builtin/rm.c:64 builtin/rm.c:186 -#, c-format +#: builtin/rm.c:64 msgid "" -"submodule '%s' (or one of its nested submodules) uses a .git directory\n" +"the following submodule (or one of its nested submodules)\n" +"uses a .git directory:" +msgid_plural "" +"the following submodules (or one of its nested submodules)\n" +"use a .git directory:" +msgstr[0] "" +msgstr[1] "" + +#: builtin/rm.c:70 +msgid "" +"\n" "(use 'rm -rf' if you really want to remove it including all of its history)" msgstr "" -#: builtin/rm.c:174 -#, c-format +#: builtin/rm.c:230 msgid "" -"'%s' has staged content different from both the file and the HEAD\n" -"(use -f to force removal)" -msgstr "" +"the following file has staged content different from both the\n" +"file and the HEAD:" +msgid_plural "" +"the following files have staged content different from both the\n" +"file and the HEAD:" +msgstr[0] "" +msgstr[1] "" -#: builtin/rm.c:180 -#, c-format +#: builtin/rm.c:235 msgid "" -"'%s' has changes staged in the index\n" -"(use --cached to keep the file, or -f to force removal)" +"\n" +"(use -f to force removal)" msgstr "" -#: builtin/rm.c:191 -#, c-format +#: builtin/rm.c:239 +msgid "the following file has changes staged in the index:" +msgid_plural "the following files have changes staged in the index:" +msgstr[0] "" +msgstr[1] "" + +#: builtin/rm.c:243 builtin/rm.c:254 msgid "" -"'%s' has local modifications\n" +"\n" "(use --cached to keep the file, or -f to force removal)" msgstr "" -#: builtin/rm.c:207 +#: builtin/rm.c:251 +msgid "the following file has local modifications:" +msgid_plural "the following files have local modifications:" +msgstr[0] "" +msgstr[1] "" + +#: builtin/rm.c:269 msgid "do not list removed files" msgstr "" -#: builtin/rm.c:208 +#: builtin/rm.c:270 msgid "only remove from the index" msgstr "" -#: builtin/rm.c:209 +#: builtin/rm.c:271 msgid "override the up-to-date check" msgstr "" -#: builtin/rm.c:210 +#: builtin/rm.c:272 msgid "allow recursive removal" msgstr "" -#: builtin/rm.c:212 +#: builtin/rm.c:274 msgid "exit with a zero status even if nothing matched" msgstr "" -#: builtin/rm.c:283 +#: builtin/rm.c:345 #, c-format msgid "not removing '%s' recursively without -r" msgstr "" -#: builtin/rm.c:322 +#: builtin/rm.c:384 #, c-format msgid "git rm: unable to remove %s" msgstr "" @@ -8101,23 +8327,23 @@ msgstr "" msgid "Missing author: %s" msgstr "" -#: builtin/shortlog.c:227 +#: builtin/shortlog.c:228 msgid "sort output according to the number of commits per author" msgstr "" -#: builtin/shortlog.c:229 +#: builtin/shortlog.c:230 msgid "Suppress commit descriptions, only provides commit count" msgstr "" -#: builtin/shortlog.c:231 +#: builtin/shortlog.c:232 msgid "Show the email address of each author" msgstr "" -#: builtin/shortlog.c:232 +#: builtin/shortlog.c:233 msgid "w[,i1[,i2]]" msgstr "" -#: builtin/shortlog.c:233 +#: builtin/shortlog.c:234 msgid "Linewrap output" msgstr "" @@ -8177,23 +8403,23 @@ msgstr "" msgid "show commits in topological order" msgstr "" -#: builtin/show-branch.c:671 +#: builtin/show-branch.c:672 msgid "show only commits not on the first branch" msgstr "" -#: builtin/show-branch.c:673 +#: builtin/show-branch.c:674 msgid "show merges reachable from only one tip" msgstr "" -#: builtin/show-branch.c:675 -msgid "show commits where no parent comes before its children" +#: builtin/show-branch.c:676 +msgid "topologically sort, maintaining date order where possible" msgstr "" -#: builtin/show-branch.c:677 +#: builtin/show-branch.c:679 msgid "<n>[,<base>]" msgstr "" -#: builtin/show-branch.c:678 +#: builtin/show-branch.c:680 msgid "show <n> most recent ref-log entries starting at base" msgstr "" @@ -8207,35 +8433,35 @@ msgstr "" msgid "git show-ref --exclude-existing[=pattern] < ref-list" msgstr "" -#: builtin/show-ref.c:165 +#: builtin/show-ref.c:168 msgid "only show tags (can be combined with heads)" msgstr "" -#: builtin/show-ref.c:166 +#: builtin/show-ref.c:169 msgid "only show heads (can be combined with tags)" msgstr "" -#: builtin/show-ref.c:167 +#: builtin/show-ref.c:170 msgid "stricter reference checking, requires exact ref path" msgstr "" -#: builtin/show-ref.c:170 builtin/show-ref.c:172 -msgid "show the HEAD reference" +#: builtin/show-ref.c:173 builtin/show-ref.c:176 +msgid "show the HEAD reference, even if it would be filtered out" msgstr "" -#: builtin/show-ref.c:174 +#: builtin/show-ref.c:178 msgid "dereference tags into object IDs" msgstr "" -#: builtin/show-ref.c:176 +#: builtin/show-ref.c:180 msgid "only show SHA1 hash using <n> digits" msgstr "" -#: builtin/show-ref.c:180 +#: builtin/show-ref.c:184 msgid "do not print results to stdout (useful with --verify)" msgstr "" -#: builtin/show-ref.c:182 +#: builtin/show-ref.c:186 msgid "show refs from stdin that aren't in local repository" msgstr "" @@ -8639,26 +8865,30 @@ msgstr "" msgid "only useful for debugging" msgstr "" -#: git.c:16 +#: git.c:17 msgid "" "'git help -a' and 'git help -g' lists available subcommands and some\n" "concept guides. See 'git help <command>' or 'git help <concept>'\n" "to read about a specific subcommand or concept." msgstr "" -#: parse-options.h:156 +#: parse-options.h:144 +msgid "expiry date" +msgstr "" + +#: parse-options.h:159 msgid "no-op (backward compatibility)" msgstr "" -#: parse-options.h:232 +#: parse-options.h:236 msgid "be more verbose" msgstr "" -#: parse-options.h:234 +#: parse-options.h:238 msgid "be more quiet" msgstr "" -#: parse-options.h:240 +#: parse-options.h:244 msgid "use <n> digits to display SHA-1s" msgstr "" @@ -8715,7 +8945,7 @@ msgid "Move or rename a file, a directory, or a symlink" msgstr "" #: common-cmds.h:21 -msgid "Fetch from and merge with another repository or a local branch" +msgid "Fetch from and integrate with another repository or a local branch" msgstr "" #: common-cmds.h:22 @@ -8759,7 +8989,7 @@ msgstr "" #: git-am.sh:105 #, sh-format msgid "" -"When you have resolved this problem, run \"$cmdline --resolved\".\n" +"When you have resolved this problem, run \"$cmdline --continue\".\n" "If you prefer to skip this patch, run \"$cmdline --skip\" instead.\n" "To restore the original branch and stop patching, run \"$cmdline --abort\"." msgstr "" @@ -8809,25 +9039,32 @@ msgid "" "it will be removed. Please do not use it anymore." msgstr "" -#: git-am.sh:477 +#: git-am.sh:479 #, sh-format msgid "previous rebase directory $dotest still exists but mbox given." msgstr "" -#: git-am.sh:482 +#: git-am.sh:484 msgid "Please make up your mind. --skip or --abort?" msgstr "" -#: git-am.sh:509 +#: git-am.sh:520 +#, sh-format +msgid "" +"Stray $dotest directory found.\n" +"Use \"git am --abort\" to remove it." +msgstr "" + +#: git-am.sh:528 msgid "Resolve operation not in progress, we are not resuming." msgstr "" -#: git-am.sh:575 +#: git-am.sh:594 #, sh-format msgid "Dirty index: cannot apply patches (dirty: $files)" msgstr "" -#: git-am.sh:679 +#: git-am.sh:698 #, sh-format msgid "" "Patch is empty. Was it split wrong?\n" @@ -8835,60 +9072,60 @@ msgid "" "To restore the original branch and stop patching run \"$cmdline --abort\"." msgstr "" -#: git-am.sh:706 +#: git-am.sh:725 msgid "Patch does not have a valid e-mail address." msgstr "" -#: git-am.sh:753 +#: git-am.sh:772 msgid "cannot be interactive without stdin connected to a terminal." msgstr "" -#: git-am.sh:757 +#: git-am.sh:776 msgid "Commit Body is:" msgstr "" #. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a] #. in your translation. The program will only accept English #. input at this point. -#: git-am.sh:764 +#: git-am.sh:783 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " msgstr "" -#: git-am.sh:800 +#: git-am.sh:819 #, sh-format msgid "Applying: $FIRSTLINE" msgstr "" -#: git-am.sh:821 +#: git-am.sh:840 msgid "" "No changes - did you forget to use 'git add'?\n" "If there is nothing left to stage, chances are that something else\n" "already introduced the same changes; you might want to skip this patch." msgstr "" -#: git-am.sh:829 +#: git-am.sh:848 msgid "" "You still have unmerged paths in your index\n" "did you forget to use 'git add'?" msgstr "" -#: git-am.sh:845 +#: git-am.sh:864 msgid "No changes -- Patch already applied." msgstr "" -#: git-am.sh:855 +#: git-am.sh:874 #, sh-format msgid "Patch failed at $msgnum $FIRSTLINE" msgstr "" -#: git-am.sh:858 +#: git-am.sh:877 #, sh-format msgid "" "The copy of the patch that failed is found in:\n" " $dotest/patch" msgstr "" -#: git-am.sh:876 +#: git-am.sh:895 msgid "applying to an empty history" msgstr "" @@ -9071,7 +9308,7 @@ msgstr "" msgid "Cannot rebase onto multiple branches" msgstr "" -#: git-rebase.sh:53 +#: git-rebase.sh:54 msgid "" "When you have resolved this problem, run \"git rebase --continue\".\n" "If you prefer to skip this patch, run \"git rebase --skip\" instead.\n" @@ -9079,42 +9316,58 @@ msgid "" "\"." msgstr "" +#: git-rebase.sh:156 +msgid "Applied autostash." +msgstr "" + +#: git-rebase.sh:159 +#, sh-format +msgid "Cannot store $stash_sha1" +msgstr "" + #: git-rebase.sh:160 +msgid "" +"Applying autostash resulted in conflicts.\n" +"Your changes are safe in the stash.\n" +"You can run \"git stash pop\" or \"git stash drop\" at any time.\n" +msgstr "" + +#: git-rebase.sh:190 msgid "The pre-rebase hook refused to rebase." msgstr "" -#: git-rebase.sh:165 +#: git-rebase.sh:195 msgid "It looks like git-am is in progress. Cannot rebase." msgstr "" -#: git-rebase.sh:296 +#: git-rebase.sh:329 msgid "The --exec option must be used with the --interactive option" msgstr "" -#: git-rebase.sh:301 +#: git-rebase.sh:334 msgid "No rebase in progress?" msgstr "" -#: git-rebase.sh:312 +#: git-rebase.sh:345 msgid "The --edit-todo action can only be used during interactive rebase." msgstr "" -#: git-rebase.sh:319 +#: git-rebase.sh:352 msgid "Cannot read HEAD" msgstr "" -#: git-rebase.sh:322 +#: git-rebase.sh:355 msgid "" "You must edit all merge conflicts and then\n" "mark them as resolved using git add" msgstr "" -#: git-rebase.sh:340 +#: git-rebase.sh:373 #, sh-format msgid "Could not move back to $head_name" msgstr "" -#: git-rebase.sh:359 +#: git-rebase.sh:392 #, sh-format msgid "" "It seems that there is already a $state_dir_base directory, and\n" @@ -9127,56 +9380,65 @@ msgid "" "valuable there." msgstr "" -#: git-rebase.sh:404 +#: git-rebase.sh:437 #, sh-format msgid "invalid upstream $upstream_name" msgstr "" -#: git-rebase.sh:428 +#: git-rebase.sh:461 #, sh-format msgid "$onto_name: there are more than one merge bases" msgstr "" -#: git-rebase.sh:431 git-rebase.sh:435 +#: git-rebase.sh:464 git-rebase.sh:468 #, sh-format msgid "$onto_name: there is no merge base" msgstr "" -#: git-rebase.sh:440 +#: git-rebase.sh:473 #, sh-format msgid "Does not point to a valid commit: $onto_name" msgstr "" -#: git-rebase.sh:463 +#: git-rebase.sh:496 #, sh-format msgid "fatal: no such branch: $branch_name" msgstr "" -#: git-rebase.sh:483 +#: git-rebase.sh:519 +msgid "Cannot autostash" +msgstr "" + +#: git-rebase.sh:524 +#, sh-format +msgid "Created autostash: $stash_abbrev" +msgstr "" + +#: git-rebase.sh:528 msgid "Please commit or stash them." msgstr "" -#: git-rebase.sh:501 +#: git-rebase.sh:548 #, sh-format msgid "Current branch $branch_name is up to date." msgstr "" -#: git-rebase.sh:504 +#: git-rebase.sh:552 #, sh-format msgid "Current branch $branch_name is up to date, rebase forced." msgstr "" -#: git-rebase.sh:515 +#: git-rebase.sh:563 #, sh-format msgid "Changes from $mb to $onto:" msgstr "" #. Detach HEAD and reset the tree -#: git-rebase.sh:524 +#: git-rebase.sh:572 msgid "First, rewinding head to replay your work on top of it..." msgstr "" -#: git-rebase.sh:532 +#: git-rebase.sh:582 #, sh-format msgid "Fast-forwarded $branch_name to $onto_name." msgstr "" @@ -9209,6 +9471,11 @@ msgstr "" msgid "Cannot record working tree state" msgstr "" +#: git-stash.sh:190 +#, sh-format +msgid "Cannot update $ref_stash with $w_commit" +msgstr "" + #. TRANSLATORS: $option is an invalid option, like #. `--blah-blah'. The 7 spaces at the beginning of the #. second line correspond to "error: ". So you should line @@ -9219,126 +9486,141 @@ msgstr "" #. $ git stash save --blah-blah 2>&1 | head -n 2 #. error: unknown option for 'stash save': --blah-blah #. To provide a message, use git stash save -- '--blah-blah' -#: git-stash.sh:202 +#: git-stash.sh:241 #, sh-format msgid "" "error: unknown option for 'stash save': $option\n" " To provide a message, use git stash save -- '$option'" msgstr "" -#: git-stash.sh:223 +#: git-stash.sh:262 msgid "No local changes to save" msgstr "" -#: git-stash.sh:227 +#: git-stash.sh:268 +msgid "" +"The following untracked files would NOT be saved but need to be removed by " +"stash save:" +msgstr "" + +#: git-stash.sh:270 +msgid "" +"Aborting. Consider using either the --force or --include-untracked option." +msgstr "" + +#: git-stash.sh:274 msgid "Cannot initialize stash" msgstr "" -#: git-stash.sh:235 +#: git-stash.sh:278 msgid "Cannot save the current status" msgstr "" -#: git-stash.sh:253 +#: git-stash.sh:296 msgid "Cannot remove worktree changes" msgstr "" -#: git-stash.sh:352 +#: git-stash.sh:395 msgid "No stash found." msgstr "" -#: git-stash.sh:359 +#: git-stash.sh:402 #, sh-format msgid "Too many revisions specified: $REV" msgstr "" -#: git-stash.sh:365 +#: git-stash.sh:408 #, sh-format msgid "$reference is not valid reference" msgstr "" -#: git-stash.sh:393 +#: git-stash.sh:436 #, sh-format msgid "'$args' is not a stash-like commit" msgstr "" -#: git-stash.sh:404 +#: git-stash.sh:447 #, sh-format msgid "'$args' is not a stash reference" msgstr "" -#: git-stash.sh:412 +#: git-stash.sh:455 msgid "unable to refresh index" msgstr "" -#: git-stash.sh:416 +#: git-stash.sh:459 msgid "Cannot apply a stash in the middle of a merge" msgstr "" -#: git-stash.sh:424 +#: git-stash.sh:467 msgid "Conflicts in index. Try without --index." msgstr "" -#: git-stash.sh:426 +#: git-stash.sh:469 msgid "Could not save index tree" msgstr "" -#: git-stash.sh:460 +#: git-stash.sh:503 msgid "Cannot unstage modified files" msgstr "" -#: git-stash.sh:475 +#: git-stash.sh:518 msgid "Index was not unstashed." msgstr "" -#: git-stash.sh:492 +#: git-stash.sh:535 #, sh-format msgid "Dropped ${REV} ($s)" msgstr "" -#: git-stash.sh:493 +#: git-stash.sh:536 #, sh-format msgid "${REV}: Could not drop stash entry" msgstr "" -#: git-stash.sh:500 +#: git-stash.sh:543 msgid "No branch name specified" msgstr "" -#: git-stash.sh:571 +#: git-stash.sh:615 msgid "(To restore them type \"git stash apply\")" msgstr "" -#: git-submodule.sh:91 +#: git-submodule.sh:95 #, sh-format msgid "cannot strip one component off url '$remoteurl'" msgstr "" -#: git-submodule.sh:196 +#: git-submodule.sh:237 #, sh-format msgid "No submodule mapping found in .gitmodules for path '$sm_path'" msgstr "" -#: git-submodule.sh:239 +#: git-submodule.sh:281 #, sh-format msgid "Clone of '$url' into submodule path '$sm_path' failed" msgstr "" -#: git-submodule.sh:251 +#: git-submodule.sh:293 #, sh-format msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa" msgstr "" -#: git-submodule.sh:349 +#: git-submodule.sh:403 +msgid "Relative path can only be used from the toplevel of the working tree" +msgstr "" + +#: git-submodule.sh:413 #, sh-format msgid "repo URL: '$repo' must be absolute or begin with ./|../" msgstr "" -#: git-submodule.sh:366 +#: git-submodule.sh:430 #, sh-format msgid "'$sm_path' already exists in the index" msgstr "" -#: git-submodule.sh:370 +#: git-submodule.sh:434 #, sh-format msgid "" "The following path is ignored by one of your .gitignore files:\n" @@ -9346,233 +9628,244 @@ msgid "" "Use -f if you really want to add it." msgstr "" -#: git-submodule.sh:388 +#: git-submodule.sh:452 #, sh-format msgid "Adding existing repo at '$sm_path' to the index" msgstr "" -#: git-submodule.sh:390 +#: git-submodule.sh:454 #, sh-format msgid "'$sm_path' already exists and is not a valid git repo" msgstr "" -#: git-submodule.sh:398 +#: git-submodule.sh:462 #, sh-format msgid "A git directory for '$sm_name' is found locally with remote(s):" msgstr "" -#: git-submodule.sh:400 +#: git-submodule.sh:464 #, sh-format msgid "" "If you want to reuse this local git directory instead of cloning again from" msgstr "" -#: git-submodule.sh:402 +#: git-submodule.sh:466 #, sh-format msgid "" "use the '--force' option. If the local git directory is not the correct repo" msgstr "" -#: git-submodule.sh:403 +#: git-submodule.sh:467 #, sh-format msgid "" "or you are unsure what this means choose another name with the '--name' " "option." msgstr "" -#: git-submodule.sh:405 +#: git-submodule.sh:469 #, sh-format msgid "Reactivating local git directory for submodule '$sm_name'." msgstr "" -#: git-submodule.sh:417 +#: git-submodule.sh:481 #, sh-format msgid "Unable to checkout submodule '$sm_path'" msgstr "" -#: git-submodule.sh:422 +#: git-submodule.sh:486 #, sh-format msgid "Failed to add submodule '$sm_path'" msgstr "" -#: git-submodule.sh:431 +#: git-submodule.sh:495 #, sh-format msgid "Failed to register submodule '$sm_path'" msgstr "" -#: git-submodule.sh:474 +#: git-submodule.sh:539 #, sh-format -msgid "Entering '$prefix$sm_path'" +msgid "Entering '$prefix$displaypath'" msgstr "" -#: git-submodule.sh:488 +#: git-submodule.sh:554 #, sh-format -msgid "Stopping at '$sm_path'; script returned non-zero status." +msgid "Stopping at '$prefix$displaypath'; script returned non-zero status." msgstr "" -#: git-submodule.sh:532 +#: git-submodule.sh:600 #, sh-format -msgid "No url found for submodule path '$sm_path' in .gitmodules" +msgid "No url found for submodule path '$displaypath' in .gitmodules" msgstr "" -#: git-submodule.sh:541 +#: git-submodule.sh:609 #, sh-format -msgid "Failed to register url for submodule path '$sm_path'" +msgid "Failed to register url for submodule path '$displaypath'" msgstr "" -#: git-submodule.sh:543 +#: git-submodule.sh:611 #, sh-format -msgid "Submodule '$name' ($url) registered for path '$sm_path'" +msgid "Submodule '$name' ($url) registered for path '$displaypath'" msgstr "" -#: git-submodule.sh:551 +#: git-submodule.sh:619 #, sh-format -msgid "Failed to register update mode for submodule path '$sm_path'" +msgid "Failed to register update mode for submodule path '$displaypath'" msgstr "" -#: git-submodule.sh:588 +#: git-submodule.sh:656 #, sh-format msgid "Use '.' if you really want to deinitialize all submodules" msgstr "" -#: git-submodule.sh:603 +#: git-submodule.sh:673 #, sh-format -msgid "Submodule work tree '$sm_path' contains a .git directory" +msgid "Submodule work tree '$displaypath' contains a .git directory" msgstr "" -#: git-submodule.sh:604 +#: git-submodule.sh:674 #, sh-format msgid "" "(use 'rm -rf' if you really want to remove it including all of its history)" msgstr "" -#: git-submodule.sh:610 +#: git-submodule.sh:680 #, sh-format msgid "" -"Submodule work tree '$sm_path' contains local modifications; use '-f' to " +"Submodule work tree '$displaypath' contains local modifications; use '-f' to " "discard them" msgstr "" -#: git-submodule.sh:613 +#: git-submodule.sh:683 #, sh-format -msgid "Cleared directory '$sm_path'" +msgid "Cleared directory '$displaypath'" msgstr "" -#: git-submodule.sh:614 +#: git-submodule.sh:684 #, sh-format -msgid "Could not remove submodule work tree '$sm_path'" +msgid "Could not remove submodule work tree '$displaypath'" msgstr "" -#: git-submodule.sh:617 +#: git-submodule.sh:687 #, sh-format -msgid "Could not create empty submodule directory '$sm_path'" +msgid "Could not create empty submodule directory '$displaypath'" msgstr "" -#: git-submodule.sh:626 +#: git-submodule.sh:696 #, sh-format -msgid "Submodule '$name' ($url) unregistered for path '$sm_path'" +msgid "Submodule '$name' ($url) unregistered for path '$displaypath'" msgstr "" -#: git-submodule.sh:731 +#: git-submodule.sh:811 #, sh-format msgid "" -"Submodule path '$prefix$sm_path' not initialized\n" +"Submodule path '$displaypath' not initialized\n" "Maybe you want to use 'update --init'?" msgstr "" -#: git-submodule.sh:744 +#: git-submodule.sh:824 #, sh-format -msgid "Unable to find current revision in submodule path '$prefix$sm_path'" +msgid "Unable to find current revision in submodule path '$displaypath'" msgstr "" -#: git-submodule.sh:753 +#: git-submodule.sh:833 #, sh-format msgid "Unable to fetch in submodule path '$sm_path'" msgstr "" -#: git-submodule.sh:777 +#: git-submodule.sh:857 #, sh-format -msgid "Unable to fetch in submodule path '$prefix$sm_path'" +msgid "Unable to fetch in submodule path '$displaypath'" msgstr "" -#: git-submodule.sh:791 +#: git-submodule.sh:871 #, sh-format -msgid "Unable to rebase '$sha1' in submodule path '$prefix$sm_path'" +msgid "Unable to rebase '$sha1' in submodule path '$displaypath'" msgstr "" -#: git-submodule.sh:792 +#: git-submodule.sh:872 #, sh-format -msgid "Submodule path '$prefix$sm_path': rebased into '$sha1'" +msgid "Submodule path '$displaypath': rebased into '$sha1'" msgstr "" -#: git-submodule.sh:797 +#: git-submodule.sh:877 #, sh-format -msgid "Unable to merge '$sha1' in submodule path '$prefix$sm_path'" +msgid "Unable to merge '$sha1' in submodule path '$displaypath'" msgstr "" -#: git-submodule.sh:798 +#: git-submodule.sh:878 #, sh-format -msgid "Submodule path '$prefix$sm_path': merged in '$sha1'" +msgid "Submodule path '$displaypath': merged in '$sha1'" msgstr "" -#: git-submodule.sh:803 +#: git-submodule.sh:883 #, sh-format -msgid "Unable to checkout '$sha1' in submodule path '$prefix$sm_path'" +msgid "" +"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'" msgstr "" -#: git-submodule.sh:804 +#: git-submodule.sh:884 #, sh-format -msgid "Submodule path '$prefix$sm_path': checked out '$sha1'" +msgid "Submodule path '$prefix$sm_path': '$command $sha1'" msgstr "" -#: git-submodule.sh:831 +#: git-submodule.sh:889 #, sh-format -msgid "Failed to recurse into submodule path '$prefix$sm_path'" +msgid "Unable to checkout '$sha1' in submodule path '$displaypath'" msgstr "" -#: git-submodule.sh:939 +#: git-submodule.sh:890 +#, sh-format +msgid "Submodule path '$displaypath': checked out '$sha1'" +msgstr "" + +#: git-submodule.sh:917 +#, sh-format +msgid "Failed to recurse into submodule path '$displaypath'" +msgstr "" + +#: git-submodule.sh:1025 msgid "The --cached option cannot be used with the --files option" msgstr "" #. unexpected type -#: git-submodule.sh:979 +#: git-submodule.sh:1066 #, sh-format msgid "unexpected mode $mod_dst" msgstr "" -#: git-submodule.sh:997 +#: git-submodule.sh:1086 #, sh-format -msgid " Warn: $name doesn't contain commit $sha1_src" +msgid " Warn: $display_name doesn't contain commit $sha1_src" msgstr "" -#: git-submodule.sh:1000 +#: git-submodule.sh:1089 #, sh-format -msgid " Warn: $name doesn't contain commit $sha1_dst" +msgid " Warn: $display_name doesn't contain commit $sha1_dst" msgstr "" -#: git-submodule.sh:1003 +#: git-submodule.sh:1092 #, sh-format -msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst" +msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst" msgstr "" -#: git-submodule.sh:1028 +#: git-submodule.sh:1117 msgid "blob" msgstr "" -#: git-submodule.sh:1066 +#: git-submodule.sh:1155 msgid "Submodules changed but not updated:" msgstr "" -#: git-submodule.sh:1068 +#: git-submodule.sh:1157 msgid "Submodule changes to be committed:" msgstr "" -#: git-submodule.sh:1153 +#: git-submodule.sh:1242 #, sh-format msgid "Failed to recurse into submodule path '$sm_path'" msgstr "" -#: git-submodule.sh:1216 +#: git-submodule.sh:1306 #, sh-format -msgid "Synchronizing submodule url for '$prefix$sm_path'" +msgid "Synchronizing submodule url for '$displaypath'" msgstr "" @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: git 1.8.3\n" +"Project-Id-Version: git 1.8.4\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2013-04-30 08:25+0800\n" -"PO-Revision-Date: 2013-04-30 12:22+0100\n" +"POT-Creation-Date: 2013-08-06 14:10+0800\n" +"PO-Revision-Date: 2013-08-06 12:37+0100\n" "Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: advice.c:53 +#: advice.c:57 #, c-format msgid "hint: %.*s\n" msgstr "tips: %.*s\n" @@ -26,7 +26,7 @@ msgstr "tips: %.*s\n" #. * Message used both when 'git commit' fails and when #. * other commands doing a merge do. #. -#: advice.c:83 +#: advice.c:87 msgid "" "Fix them up in the work tree,\n" "and then use 'git add/rm <file>' as\n" @@ -65,7 +65,7 @@ msgstr "fmt" msgid "archive format" msgstr "arkivformat" -#: archive.c:324 builtin/log.c:1126 +#: archive.c:324 builtin/log.c:1173 msgid "prefix" msgstr "prefix" @@ -73,11 +73,11 @@ msgstr "prefix" msgid "prepend prefix to each pathname in the archive" msgstr "lägg till prefix till varje sökväg i arkivet" -#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2371 -#: builtin/blame.c:2372 builtin/config.c:55 builtin/fast-export.c:665 -#: builtin/fast-export.c:667 builtin/grep.c:715 builtin/hash-object.c:77 -#: builtin/ls-files.c:490 builtin/ls-files.c:493 builtin/notes.c:536 -#: builtin/notes.c:693 builtin/read-tree.c:107 parse-options.h:149 +#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2292 +#: builtin/blame.c:2293 builtin/config.c:56 builtin/fast-export.c:673 +#: builtin/fast-export.c:675 builtin/grep.c:714 builtin/hash-object.c:77 +#: builtin/ls-files.c:496 builtin/ls-files.c:499 builtin/notes.c:408 +#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:152 msgid "file" msgstr "fil" @@ -109,7 +109,7 @@ msgstr "komprimera bättre" msgid "list supported archive formats" msgstr "visa understödda arkivformat" -#: archive.c:345 builtin/archive.c:90 builtin/clone.c:86 +#: archive.c:345 builtin/archive.c:90 builtin/clone.c:85 msgid "repo" msgstr "arkiv" @@ -117,7 +117,7 @@ msgstr "arkiv" msgid "retrieve the archive from remote repository <repo>" msgstr "hämta arkivet frÃ¥n fjärrarkivet <arkiv>" -#: archive.c:347 builtin/archive.c:92 builtin/notes.c:615 +#: archive.c:347 builtin/archive.c:92 builtin/notes.c:487 msgid "command" msgstr "kommando" @@ -204,17 +204,17 @@ msgstr "Det finns redan en gren som heter \"%s\"" msgid "Cannot force update the current branch." msgstr "Kan inte tvinga uppdatering av aktuell gren." -#: branch.c:201 +#: branch.c:216 #, c-format msgid "Cannot setup tracking information; starting point '%s' is not a branch." msgstr "Kan inte ställa in spÃ¥rning; startpunkten \"%s\" är inte en gren." -#: branch.c:203 +#: branch.c:218 #, c-format msgid "the requested upstream branch '%s' does not exist" msgstr "den efterfrÃ¥gade uppströmsgrenen \"%s\" finns inte" -#: branch.c:205 +#: branch.c:220 msgid "" "\n" "If you are planning on basing your work on an upstream\n" @@ -234,26 +234,26 @@ msgstr "" "spÃ¥ra dess fjärrmotsvarighet kan du använda \"git push -u\"\n" "för att ställa in uppströmskonfigurationen när du sänder in." -#: branch.c:250 +#: branch.c:265 #, c-format msgid "Not a valid object name: '%s'." msgstr "Objektnamnet är inte giltigt: \"%s\"." -#: branch.c:270 +#: branch.c:285 #, c-format msgid "Ambiguous object name: '%s'." msgstr "Objektnamnet är tvetydigt: \"%s\"." -#: branch.c:275 +#: branch.c:290 #, c-format msgid "Not a valid branch point: '%s'." msgstr "Avgreningspunkten är inte giltig: \"%s\"" -#: branch.c:281 +#: branch.c:296 msgid "Failed to lock ref for update" msgstr "Misslyckades lÃ¥sa referens för uppdatering" -#: branch.c:299 +#: branch.c:314 msgid "Failed to write ref" msgstr "Misslyckades skriva referens" @@ -267,7 +267,7 @@ msgstr "'%s' ser inte ut som en v2-bundle-fil" msgid "unrecognized header: %s%s (%d)" msgstr "okänt huvud: %s%s (%d)" -#: bundle.c:89 builtin/commit.c:676 +#: bundle.c:89 builtin/commit.c:697 #, c-format msgid "could not open '%s'" msgstr "kunde inte öppna \"%s\"" @@ -276,9 +276,9 @@ msgstr "kunde inte öppna \"%s\"" msgid "Repository lacks these prerequisite commits:" msgstr "Arkivet saknar dessa nödvändiga incheckningar:" -#: bundle.c:164 sequencer.c:651 sequencer.c:1101 builtin/log.c:300 -#: builtin/log.c:770 builtin/log.c:1344 builtin/log.c:1570 builtin/merge.c:349 -#: builtin/shortlog.c:155 +#: bundle.c:164 sequencer.c:661 sequencer.c:1111 builtin/log.c:331 +#: builtin/log.c:801 builtin/log.c:1399 builtin/log.c:1625 builtin/merge.c:364 +#: builtin/shortlog.c:156 msgid "revision walk setup failed" msgstr "misslyckades skapa revisionstraversering" @@ -304,7 +304,7 @@ msgstr[1] "Paketet (bundlen) kräver dessa %d referenser:" msgid "rev-list died" msgstr "rev-list dog" -#: bundle.c:300 builtin/log.c:1255 builtin/shortlog.c:258 +#: bundle.c:300 builtin/log.c:1310 builtin/shortlog.c:259 #, c-format msgid "unrecognized argument: %s" msgstr "okänt argument: %s" @@ -335,12 +335,12 @@ msgstr "kan inte skapa \"%s\"" msgid "index-pack died" msgstr "index-pack dog" -#: commit.c:50 +#: commit.c:53 #, c-format msgid "could not parse %s" msgstr "kunde inte tolka %s" -#: commit.c:52 +#: commit.c:55 #, c-format msgid "%s %s is not a commit!" msgstr "%s %s är inte en incheckning!" @@ -349,16 +349,16 @@ msgstr "%s %s är inte en incheckning!" msgid "memory exhausted" msgstr "minnet slut" -#: connected.c:39 +#: connected.c:60 msgid "Could not run 'git rev-list'" msgstr "Kunde inte köra \"git rev-list\"" -#: connected.c:48 +#: connected.c:80 #, c-format msgid "failed write to rev-list: %s" msgstr "kunde inte skriva till rev-list: %s" -#: connected.c:56 +#: connected.c:88 #, c-format msgid "failed to close rev-list's stdin: %s" msgstr "kunde inte stänga rev-list:s standard in: %s" @@ -454,7 +454,7 @@ msgstr "" "Hittade fel i konfigurationsvariabeln \"diff.dirstat\":\n" "%s" -#: diff.c:3481 +#: diff.c:3487 #, c-format msgid "" "Failed to parse --dirstat/-X option parameter:\n" @@ -463,7 +463,7 @@ msgstr "" "Misslyckades tolka argument till flaggan --dirstat/-X;\n" "%s" -#: diff.c:3495 +#: diff.c:3501 #, c-format msgid "Failed to parse --submodule option parameter: '%s'" msgstr "Misslyckades tolka argument till flaggan --submodule: \"%s\"" @@ -505,20 +505,20 @@ msgstr "\"%s\": %s" msgid "'%s': short read %s" msgstr "\"%s\": kort läsning %s" -#: help.c:212 +#: help.c:210 #, c-format msgid "available git commands in '%s'" msgstr "git-kommandon tillgängliga i \"%s\"" -#: help.c:219 +#: help.c:217 msgid "git commands available from elsewhere on your $PATH" msgstr "git-kommandon frÃ¥n andra platser i din $PATH" -#: help.c:235 +#: help.c:233 msgid "The most commonly used git commands are:" msgstr "De mest använda git-kommandona är:" -#: help.c:292 +#: help.c:290 #, c-format msgid "" "'%s' appears to be a git command, but we were not\n" @@ -527,11 +527,11 @@ msgstr "" "\"%s\" verkar vara ett git-kommando, men vi kan inte\n" "köra det. Kanske git-%s är trasigt?" -#: help.c:349 +#: help.c:347 msgid "Uh oh. Your system reports no Git commands at all." msgstr "Oj dÃ¥. Ditt system rapporterar inga Git-kommandon alls." -#: help.c:371 +#: help.c:369 #, c-format msgid "" "WARNING: You called a Git command named '%s', which does not exist.\n" @@ -540,17 +540,17 @@ msgstr "" "VARNING: Du anropade ett Git-kommando vid namn \"%s\", som inte finns.\n" "Fortsätter under förutsättningen att du menade \"%s\"" -#: help.c:376 +#: help.c:374 #, c-format msgid "in %0.1f seconds automatically..." msgstr "automatiskt om %0.1f sekunder..." -#: help.c:383 +#: help.c:381 #, c-format msgid "git: '%s' is not a git command. See 'git --help'." msgstr "git: \"%s\" är inte ett git-kommando. Se \"git --help\"." -#: help.c:387 +#: help.c:385 help.c:444 msgid "" "\n" "Did you mean this?" @@ -564,12 +564,17 @@ msgstr[1] "" "\n" "Menade du ett av dessa?" +#: help.c:440 +#, c-format +msgid "%s: %s - %s" +msgstr "%s: %s - %s" + #: merge.c:56 msgid "failed to read the cache" msgstr "misslyckads läsa cachen" #: merge.c:110 builtin/checkout.c:365 builtin/checkout.c:566 -#: builtin/clone.c:645 +#: builtin/clone.c:656 msgid "unable to write new index file" msgstr "kunde inte skriva ny indexfil" @@ -583,70 +588,70 @@ msgstr "(felaktig incheckning)\n" msgid "addinfo_cache failed for path '%s'" msgstr "addinfo_cache misslyckades för sökvägen \"%s\"" -#: merge-recursive.c:268 +#: merge-recursive.c:269 msgid "error building trees" msgstr "fel vid byggande av träd" -#: merge-recursive.c:672 +#: merge-recursive.c:673 #, c-format msgid "failed to create path '%s'%s" msgstr "misslyckades skapa sökvägen \"%s\"%s" -#: merge-recursive.c:683 +#: merge-recursive.c:684 #, c-format msgid "Removing %s to make room for subdirectory\n" msgstr "Tar bort %s för att göra plats för underkatalog\n" #. something else exists #. .. but not some other error (who really cares what?) -#: merge-recursive.c:697 merge-recursive.c:718 +#: merge-recursive.c:698 merge-recursive.c:719 msgid ": perhaps a D/F conflict?" msgstr ": kanske en K/F-konflikt?" -#: merge-recursive.c:708 +#: merge-recursive.c:709 #, c-format msgid "refusing to lose untracked file at '%s'" msgstr "vägrar förlora ospÃ¥rad fil vid \"%s\"" -#: merge-recursive.c:748 +#: merge-recursive.c:749 #, c-format msgid "cannot read object %s '%s'" msgstr "kan inte läsa objektet %s: \"%s\"" -#: merge-recursive.c:750 +#: merge-recursive.c:751 #, c-format msgid "blob expected for %s '%s'" msgstr "blob förväntades för %s \"%s\"" -#: merge-recursive.c:773 builtin/clone.c:313 +#: merge-recursive.c:774 builtin/clone.c:312 #, c-format msgid "failed to open '%s'" msgstr "misslyckades öppna \"%s\"" -#: merge-recursive.c:781 +#: merge-recursive.c:782 #, c-format msgid "failed to symlink '%s'" msgstr "misslyckades ta skapa symboliska länken \"%s\"" -#: merge-recursive.c:784 +#: merge-recursive.c:785 #, c-format msgid "do not know what to do with %06o %s '%s'" msgstr "vet inte hur %06o %s \"%s\" skall hanteras" -#: merge-recursive.c:922 +#: merge-recursive.c:923 msgid "Failed to execute internal merge" msgstr "Misslyckades exekvera intern sammanslagning" -#: merge-recursive.c:926 +#: merge-recursive.c:927 #, c-format msgid "Unable to add %s to database" msgstr "Kunde inte lägga till %s till databasen" -#: merge-recursive.c:942 +#: merge-recursive.c:943 msgid "unsupported object type in the tree" msgstr "objekttyp som ej stöds upptäcktes i trädet" -#: merge-recursive.c:1021 merge-recursive.c:1035 +#: merge-recursive.c:1022 merge-recursive.c:1036 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " @@ -655,7 +660,7 @@ msgstr "" "KONFLIKT (%s/radera): %s raderad i %s och %s i %s. Versionen %s av %s lämnad " "i trädet." -#: merge-recursive.c:1027 merge-recursive.c:1040 +#: merge-recursive.c:1028 merge-recursive.c:1041 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " @@ -664,20 +669,20 @@ msgstr "" "KONFLIKT (%s/radera): %s raderad i %s och %s i %s. Versionen %s av %s lämnad " "i trädet vid %s." -#: merge-recursive.c:1081 +#: merge-recursive.c:1082 msgid "rename" msgstr "namnbyte" -#: merge-recursive.c:1081 +#: merge-recursive.c:1082 msgid "renamed" msgstr "namnbytt" -#: merge-recursive.c:1137 +#: merge-recursive.c:1138 #, c-format msgid "%s is a directory in %s adding as %s instead" msgstr "%s är en katalog i %s lägger till som %s istället" -#: merge-recursive.c:1159 +#: merge-recursive.c:1160 #, c-format msgid "" "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s" @@ -686,148 +691,169 @@ msgstr "" "KONFLIKT (namnbyte/namnbyte): Namnbyte \"%s\"->\"%s\" pÃ¥ grenen \"%s\" " "namnbyte \"%s\"->\"%s\" i \"%s\"%s" -#: merge-recursive.c:1164 +#: merge-recursive.c:1165 msgid " (left unresolved)" msgstr " (lämnad olöst)" -#: merge-recursive.c:1218 +#: merge-recursive.c:1219 #, c-format msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s" msgstr "" "KONFLIKT (namnbyte/namnbyte): Namnbyte %s->%s i %s. Namnbyte %s->%s i %s" -#: merge-recursive.c:1248 +#: merge-recursive.c:1249 #, c-format msgid "Renaming %s to %s and %s to %s instead" msgstr "Byter namn pÃ¥ %s till %s och %s till %s istället" -#: merge-recursive.c:1447 +#: merge-recursive.c:1448 #, c-format msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s" msgstr "KONFLIKT (namnbyte/tillägg): Namnbyte %s->%s i %s. %s tillagd i %s" -#: merge-recursive.c:1457 +#: merge-recursive.c:1458 #, c-format msgid "Adding merged %s" msgstr "Lägger till sammanslagen %s" -#: merge-recursive.c:1462 merge-recursive.c:1660 +#: merge-recursive.c:1463 merge-recursive.c:1661 #, c-format msgid "Adding as %s instead" msgstr "Lägger till som %s iställer" -#: merge-recursive.c:1513 +#: merge-recursive.c:1514 #, c-format msgid "cannot read object %s" msgstr "kan inte läsa objektet %s" -#: merge-recursive.c:1516 +#: merge-recursive.c:1517 #, c-format msgid "object %s is not a blob" msgstr "objektet %s är inte en blob" -#: merge-recursive.c:1564 +#: merge-recursive.c:1565 msgid "modify" msgstr "ändra" -#: merge-recursive.c:1564 +#: merge-recursive.c:1565 msgid "modified" msgstr "ändrad" -#: merge-recursive.c:1574 +#: merge-recursive.c:1575 msgid "content" msgstr "innehÃ¥ll" -#: merge-recursive.c:1581 +#: merge-recursive.c:1582 msgid "add/add" msgstr "tillägg/tillägg" -#: merge-recursive.c:1615 +#: merge-recursive.c:1616 #, c-format msgid "Skipped %s (merged same as existing)" msgstr "Hoppade över %s (sammanslagen samma som befintlig)" -#: merge-recursive.c:1629 +#: merge-recursive.c:1630 #, c-format msgid "Auto-merging %s" msgstr "SlÃ¥r ihop %s automatiskt" -#: merge-recursive.c:1633 git-submodule.sh:1029 +#: merge-recursive.c:1634 git-submodule.sh:1118 msgid "submodule" msgstr "undermodul" -#: merge-recursive.c:1634 +#: merge-recursive.c:1635 #, c-format msgid "CONFLICT (%s): Merge conflict in %s" msgstr "KONFLIKT (%s): Sammanslagningskonflikt i %s" -#: merge-recursive.c:1724 +#: merge-recursive.c:1725 #, c-format msgid "Removing %s" msgstr "Tar bort %s" -#: merge-recursive.c:1749 +#: merge-recursive.c:1750 msgid "file/directory" msgstr "fil/katalog" -#: merge-recursive.c:1755 +#: merge-recursive.c:1756 msgid "directory/file" msgstr "katalog/fil" -#: merge-recursive.c:1760 +#: merge-recursive.c:1761 #, c-format msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s" msgstr "" "KONFLIKT (%s): Det finns en katalog med namnet %s i %s. Lägger till %s som %s" -#: merge-recursive.c:1770 +#: merge-recursive.c:1771 #, c-format msgid "Adding %s" msgstr "Lägger till %s" -#: merge-recursive.c:1787 +#: merge-recursive.c:1788 msgid "Fatal merge failure, shouldn't happen." msgstr "Ödesdigert sammanslagningsfel, borde inte inträffa." -#: merge-recursive.c:1806 +#: merge-recursive.c:1807 msgid "Already up-to-date!" msgstr "Redan à jour!" -#: merge-recursive.c:1815 +#: merge-recursive.c:1816 #, c-format msgid "merging of trees %s and %s failed" msgstr "sammanslagning av träden %s och %s misslyckades" -#: merge-recursive.c:1845 +#: merge-recursive.c:1846 #, c-format msgid "Unprocessed path??? %s" msgstr "Obehandlad sökväg??? %s" -#: merge-recursive.c:1890 +#: merge-recursive.c:1891 msgid "Merging:" msgstr "SlÃ¥r ihop:" -#: merge-recursive.c:1903 +#: merge-recursive.c:1904 #, c-format msgid "found %u common ancestor:" msgid_plural "found %u common ancestors:" msgstr[0] "hittade %u gemensam förfader:" msgstr[1] "hittade %u gemensamma förfäder:" -#: merge-recursive.c:1940 +#: merge-recursive.c:1941 msgid "merge returned no commit" msgstr "sammanslagningen returnerade ingen incheckning" -#: merge-recursive.c:1997 +#: merge-recursive.c:1998 #, c-format msgid "Could not parse object '%s'" msgstr "Kunde inte tolka objektet \"%s\"" -#: merge-recursive.c:2009 builtin/merge.c:658 +#: merge-recursive.c:2010 builtin/merge.c:672 msgid "Unable to write index." msgstr "Kunde inte skriva indexet." -#: object.c:195 +#: notes-utils.c:40 +msgid "Cannot commit uninitialized/unreferenced notes tree" +msgstr "Kan inte checka in oinitierat/orefererat anteckningsträd" + +#: notes-utils.c:81 +#, c-format +msgid "Bad notes.rewriteMode value: '%s'" +msgstr "Felaktigt värde för notes.rewriteMode: '%s'" + +#: notes-utils.c:91 +#, c-format +msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" +msgstr "Vägrar skriva över anteckningar i %s (utanför refs/notes/)" + +#. TRANSLATORS: The first %s is the name of the +#. environment variable, the second %s is its value +#: notes-utils.c:118 +#, c-format +msgid "Bad %s value: '%s'" +msgstr "Felaktigt värde pÃ¥ %s: \"%s\"" + +#: object.c:204 #, c-format msgid "unable to parse object: %s" msgstr "kunde inte tolka objektet: %s" @@ -867,18 +893,18 @@ msgstr "Sökvägen \"%s\" är i undermodulen \"%.*s\"" msgid "'%s' is beyond a symbolic link" msgstr "\"%s\" är pÃ¥ andra sidan av en symbolisk länk" -#: remote.c:1781 +#: remote.c:1788 #, c-format msgid "Your branch is ahead of '%s' by %d commit.\n" msgid_plural "Your branch is ahead of '%s' by %d commits.\n" msgstr[0] "Din gren ligger före \"%s\" med %d incheckning.\n" msgstr[1] "Din gren ligger före \"%s\" med %d incheckningar.\n" -#: remote.c:1787 +#: remote.c:1794 msgid " (use \"git push\" to publish your local commits)\n" msgstr " (använd \"git push\" för att publicera dina lokala incheckningar)\n" -#: remote.c:1790 +#: remote.c:1797 #, c-format msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n" msgid_plural "" @@ -888,11 +914,11 @@ msgstr[0] "" msgstr[1] "" "Din gren ligger efter \"%s\" med %d incheckningar, och kan snabbspolas.\n" -#: remote.c:1798 +#: remote.c:1805 msgid " (use \"git pull\" to update your local branch)\n" msgstr " (använd \"git pull\" för att uppdatera din lokala gren)\n" -#: remote.c:1801 +#: remote.c:1808 #, c-format msgid "" "Your branch and '%s' have diverged,\n" @@ -907,18 +933,27 @@ msgstr[1] "" "Din gren och \"%s\" har divergerat,\n" "och har %d respektive %d olika incheckningar.\n" -#: remote.c:1811 +#: remote.c:1818 msgid " (use \"git pull\" to merge the remote branch into yours)\n" msgstr " (använd \"git pull\" för att slÃ¥ ihop fjärrgrenen med din egen)\n" -#: sequencer.c:206 builtin/merge.c:776 builtin/merge.c:889 builtin/merge.c:999 -#: builtin/merge.c:1009 +#: run-command.c:80 +msgid "open /dev/null failed" +msgstr "misslyckades öppna /dev/null" + +#: run-command.c:82 +#, c-format +msgid "dup2(%d,%d) failed" +msgstr "dup2(%d,%d) misslyckades" + +#: sequencer.c:206 builtin/merge.c:790 builtin/merge.c:903 +#: builtin/merge.c:1013 builtin/merge.c:1023 #, c-format msgid "Could not open '%s' for writing" msgstr "Kunde inte öppna \"%s\" för skrivning" -#: sequencer.c:208 builtin/merge.c:335 builtin/merge.c:779 -#: builtin/merge.c:1001 builtin/merge.c:1014 +#: sequencer.c:208 builtin/merge.c:350 builtin/merge.c:793 +#: builtin/merge.c:1015 builtin/merge.c:1028 #, c-format msgid "Could not write to '%s'" msgstr "Kunde inte skriva till \"%s\"" @@ -941,7 +976,7 @@ msgstr "" "med \"git add <sökvägar>\" eller \"git rm <sökvägar>\"\n" "och checka in resultatet med \"git commit\"" -#: sequencer.c:245 sequencer.c:859 sequencer.c:942 +#: sequencer.c:245 sequencer.c:869 sequencer.c:952 #, c-format msgid "Could not write to %s" msgstr "Kunde inte skriva till %s" @@ -964,215 +999,237 @@ msgid "Commit your changes or stash them to proceed." msgstr "Checka in dina ändringar eller använd \"stash\" för att fortsätta." #. TRANSLATORS: %s will be "revert" or "cherry-pick" -#: sequencer.c:319 +#: sequencer.c:324 #, c-format msgid "%s: Unable to write new index file" msgstr "%s: Kunde inte skriva ny indexfil" -#: sequencer.c:350 +#: sequencer.c:355 msgid "Could not resolve HEAD commit\n" msgstr "Kunde inte bestämma HEAD:s incheckning\n" -#: sequencer.c:371 +#: sequencer.c:377 msgid "Unable to update cache tree\n" msgstr "Kan inte uppdatera cacheträd\n" -#: sequencer.c:416 +#: sequencer.c:422 #, c-format msgid "Could not parse commit %s\n" msgstr "Kunde inte tolka incheckningen %s\n" -#: sequencer.c:421 +#: sequencer.c:427 #, c-format msgid "Could not parse parent commit %s\n" msgstr "Kunde inte tolka föräldraincheckningen %s\n" -#: sequencer.c:487 +#: sequencer.c:493 msgid "Your index file is unmerged." msgstr "Din indexfil har inte slagits ihop." -#: sequencer.c:506 +#: sequencer.c:512 #, c-format msgid "Commit %s is a merge but no -m option was given." msgstr "Incheckning %s är en sammanslagning, men flaggan -m angavs inte." -#: sequencer.c:514 +#: sequencer.c:520 #, c-format msgid "Commit %s does not have parent %d" msgstr "Incheckning %s har inte förälder %d" -#: sequencer.c:518 +#: sequencer.c:524 #, c-format msgid "Mainline was specified but commit %s is not a merge." msgstr "Huvudlinje angavs, men incheckningen %s är inte en sammanslagning" #. TRANSLATORS: The first %s will be "revert" or #. "cherry-pick", the second %s a SHA1 -#: sequencer.c:531 +#: sequencer.c:537 #, c-format msgid "%s: cannot parse parent commit %s" msgstr "%s: kan inte tolka föräldraincheckningen %s" -#: sequencer.c:535 +#: sequencer.c:541 #, c-format msgid "Cannot get commit message for %s" msgstr "Kan inte hämta incheckningsmeddelande för %s" -#: sequencer.c:621 +#: sequencer.c:627 #, c-format msgid "could not revert %s... %s" msgstr "kunde inte Ã¥ngra %s... %s" -#: sequencer.c:622 +#: sequencer.c:628 #, c-format msgid "could not apply %s... %s" msgstr "kunde inte tillämpa %s... %s" -#: sequencer.c:654 +#: sequencer.c:664 msgid "empty commit set passed" msgstr "den angivna uppsättningen incheckningar är tom" -#: sequencer.c:662 +#: sequencer.c:672 #, c-format msgid "git %s: failed to read the index" msgstr "git %s: misslyckades läsa indexet" -#: sequencer.c:667 +#: sequencer.c:677 #, c-format msgid "git %s: failed to refresh the index" msgstr "git %s: misslyckades uppdatera indexet" -#: sequencer.c:725 +#: sequencer.c:735 #, c-format msgid "Cannot %s during a %s" msgstr "kan inte %s under en %s" -#: sequencer.c:747 +#: sequencer.c:757 #, c-format msgid "Could not parse line %d." msgstr "Kan inte tolka rad %d." -#: sequencer.c:752 +#: sequencer.c:762 msgid "No commits parsed." msgstr "Inga incheckningar lästes." -#: sequencer.c:765 +#: sequencer.c:775 #, c-format msgid "Could not open %s" msgstr "Kunde inte öppna %s" -#: sequencer.c:769 +#: sequencer.c:779 #, c-format msgid "Could not read %s." msgstr "kunde inte läsa %s." -#: sequencer.c:776 +#: sequencer.c:786 #, c-format msgid "Unusable instruction sheet: %s" msgstr "Oanvändbart manus: %s" -#: sequencer.c:804 +#: sequencer.c:814 #, c-format msgid "Invalid key: %s" msgstr "Felaktig nyckel: %s" -#: sequencer.c:807 +#: sequencer.c:817 #, c-format msgid "Invalid value for %s: %s" msgstr "Felaktigt värde för %s: %s" -#: sequencer.c:819 +#: sequencer.c:829 #, c-format msgid "Malformed options sheet: %s" msgstr "Trasigt manus: %s" -#: sequencer.c:840 +#: sequencer.c:850 msgid "a cherry-pick or revert is already in progress" msgstr "en \"cherry-pick\" eller \"revert\" pÃ¥gÃ¥r redan" -#: sequencer.c:841 +#: sequencer.c:851 msgid "try \"git cherry-pick (--continue | --quit | --abort)\"" msgstr "testa \"git cherry-pick (--continue | --quit | --abort)\"" -#: sequencer.c:845 +#: sequencer.c:855 #, c-format msgid "Could not create sequencer directory %s" msgstr "Kunde inte skapa \"sequencer\"-katalogen \"%s\"" -#: sequencer.c:861 sequencer.c:946 +#: sequencer.c:871 sequencer.c:956 #, c-format msgid "Error wrapping up %s." msgstr "Fel vid ombrytning av %s." -#: sequencer.c:880 sequencer.c:1014 +#: sequencer.c:890 sequencer.c:1024 msgid "no cherry-pick or revert in progress" msgstr "ingen \"cherry-pick\" eller \"revert\" pÃ¥gÃ¥r" -#: sequencer.c:882 +#: sequencer.c:892 msgid "cannot resolve HEAD" msgstr "kan inte bestämma HEAD" -#: sequencer.c:884 +#: sequencer.c:894 msgid "cannot abort from a branch yet to be born" msgstr "kan inte avbryta frÃ¥n en gren som ännu inte är född" -#: sequencer.c:906 builtin/apply.c:4060 +#: sequencer.c:916 builtin/apply.c:4061 #, c-format msgid "cannot open %s: %s" msgstr "kan inte öppna %s: %s" -#: sequencer.c:909 +#: sequencer.c:919 #, c-format msgid "cannot read %s: %s" msgstr "kan inte läsa %s: %s" -#: sequencer.c:910 +#: sequencer.c:920 msgid "unexpected end of file" msgstr "oväntat filslut" -#: sequencer.c:916 +#: sequencer.c:926 #, c-format msgid "stored pre-cherry-pick HEAD file '%s' is corrupt" msgstr "sparad HEAD-fil frÃ¥n före \"cherry-pick\", \"%s\", är trasig" -#: sequencer.c:939 +#: sequencer.c:949 #, c-format msgid "Could not format %s." msgstr "Kunde inte formatera %s." -#: sequencer.c:1083 +#: sequencer.c:1092 #, c-format msgid "%s: can't cherry-pick a %s" msgstr "%s: kan inte göra \"cherry-pick\" pÃ¥ typen \"%s\"" -#: sequencer.c:1085 +#: sequencer.c:1095 #, c-format msgid "%s: bad revision" msgstr "%s: felaktig revision" -#: sequencer.c:1119 +#: sequencer.c:1129 msgid "Can't revert as initial commit" msgstr "Kan inte Ã¥ngra som första incheckning" -#: sequencer.c:1120 +#: sequencer.c:1130 msgid "Can't cherry-pick into empty head" msgstr "Kan inte göra \"cherry-pick\" i ett tomt huvud" -#: sha1_name.c:1036 +#: sha1_name.c:440 +msgid "" +"Git normally never creates a ref that ends with 40 hex characters\n" +"because it will be ignored when you just specify 40-hex. These refs\n" +"may be created by mistake. For example,\n" +"\n" +" git checkout -b $br $(git rev-parse ...)\n" +"\n" +"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" +"examine these refs and maybe delete them. Turn this message off by\n" +"running \"git config advice.objectNameWarning false\"" +msgstr "" +"Git skapar normalt aldrig referenser som slutar med 40 hexadecimala\n" +"tecken, dÃ¥ detta ignoreras när du anger 40-hex enbart. Dessa\n" +"referenser kan skapas av misstag. Till exempel, för\n" +"\n" +" git checkout -b $br $(git rev-parse ...)\n" +"\n" +"där \"$br\" pÃ¥ nÃ¥got sätt blivit tomt och en 40-hex-referens skapats.\n" +"Undersök referenserna och ta kanske bort dem. Stäng av meddelandet\n" +"genom att köra \"git config advice.objectNameWarning false\"" + +#: sha1_name.c:1097 msgid "HEAD does not point to a branch" msgstr "HEAD pekar inte pÃ¥ en gren" -#: sha1_name.c:1039 +#: sha1_name.c:1100 #, c-format msgid "No such branch: '%s'" msgstr "Okänd gren: \"%s\"" -#: sha1_name.c:1041 +#: sha1_name.c:1102 #, c-format msgid "No upstream configured for branch '%s'" msgstr "Ingen standarduppström angiven för grenen \"%s\"" -#: sha1_name.c:1044 +#: sha1_name.c:1106 #, c-format msgid "Upstream branch '%s' not stored as a remote-tracking branch" msgstr "Uppströmsgrenen \"%s\" är inte lagrad som en fjärrspÃ¥rande gren" @@ -1182,166 +1239,166 @@ msgstr "Uppströmsgrenen \"%s\" är inte lagrad som en fjärrspÃ¥rande gren" msgid "unable to access '%s': %s" msgstr "kan inte komma Ã¥t \"%s\": %s" -#: wrapper.c:423 +#: wrapper.c:429 #, c-format msgid "unable to access '%s'" msgstr "kan inte komma Ã¥t \"%s\"" -#: wrapper.c:434 +#: wrapper.c:440 #, c-format msgid "unable to look up current user in the passwd file: %s" msgstr "kan inte slÃ¥ upp aktuell användare i passwd-filen: %s" -#: wrapper.c:435 +#: wrapper.c:441 msgid "no such user" msgstr "okänd användare" -#: wt-status.c:140 +#: wt-status.c:141 msgid "Unmerged paths:" msgstr "Ej sammanslagna sökvägar:" -#: wt-status.c:167 wt-status.c:194 +#: wt-status.c:168 wt-status.c:195 #, c-format msgid " (use \"git reset %s <file>...\" to unstage)" msgstr " (använd \"git reset %s <fil>...\" för att ta bort frÃ¥n kö)" -#: wt-status.c:169 wt-status.c:196 +#: wt-status.c:170 wt-status.c:197 msgid " (use \"git rm --cached <file>...\" to unstage)" msgstr " (använd \"git rm --cached <fil>...\" för att ta bort frÃ¥n kö)" -#: wt-status.c:173 +#: wt-status.c:174 msgid " (use \"git add <file>...\" to mark resolution)" msgstr " (använd \"git add <fil>...\" för att ange lösning)" -#: wt-status.c:175 wt-status.c:179 +#: wt-status.c:176 wt-status.c:180 msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)" msgstr " (använd \"git add/rm <fil>...\" som lämpligt för att ange lösning)" -#: wt-status.c:177 +#: wt-status.c:178 msgid " (use \"git rm <file>...\" to mark resolution)" msgstr " (använd \"git rm <fil>...\" för att ange lösning)" -#: wt-status.c:188 +#: wt-status.c:189 msgid "Changes to be committed:" msgstr "Ändringar att checka in:" -#: wt-status.c:206 +#: wt-status.c:207 msgid "Changes not staged for commit:" msgstr "Ändringar ej i incheckningskön:" -#: wt-status.c:210 +#: wt-status.c:211 msgid " (use \"git add <file>...\" to update what will be committed)" msgstr "" " (använd \"git add <fil>...\" för att uppdatera vad som skall checkas in)" -#: wt-status.c:212 +#: wt-status.c:213 msgid " (use \"git add/rm <file>...\" to update what will be committed)" msgstr "" " (använd \"git add/rm <fil>...\" för att uppdatera vad som skall checkas in)" -#: wt-status.c:213 +#: wt-status.c:214 msgid "" " (use \"git checkout -- <file>...\" to discard changes in working directory)" msgstr "" " (använd \"git checkout -- <fil>...\" för att förkasta ändringar i " "arbetskatalogen)" -#: wt-status.c:215 +#: wt-status.c:216 msgid " (commit or discard the untracked or modified content in submodules)" msgstr "" " (checka in eller förkasta ospÃ¥rat eller ändrat innehÃ¥ll i undermoduler)" -#: wt-status.c:227 +#: wt-status.c:228 #, c-format msgid " (use \"git %s <file>...\" to include in what will be committed)" msgstr "" " (använd \"git %s <fil>...\" för att ta med i det som skall checkas in)" -#: wt-status.c:244 +#: wt-status.c:245 msgid "bug" msgstr "programfel" -#: wt-status.c:249 +#: wt-status.c:250 msgid "both deleted:" msgstr "borttaget av bägge:" -#: wt-status.c:250 +#: wt-status.c:251 msgid "added by us:" msgstr "tillagt av oss:" -#: wt-status.c:251 +#: wt-status.c:252 msgid "deleted by them:" msgstr "borttaget av dem:" -#: wt-status.c:252 +#: wt-status.c:253 msgid "added by them:" msgstr "tillagt av dem:" -#: wt-status.c:253 +#: wt-status.c:254 msgid "deleted by us:" msgstr "borttaget av oss:" -#: wt-status.c:254 +#: wt-status.c:255 msgid "both added:" msgstr "tillagt av bägge:" -#: wt-status.c:255 +#: wt-status.c:256 msgid "both modified:" msgstr "ändrat av bägge:" -#: wt-status.c:285 +#: wt-status.c:286 msgid "new commits, " msgstr "nya incheckningar, " -#: wt-status.c:287 +#: wt-status.c:288 msgid "modified content, " msgstr "ändrat innehÃ¥ll, " -#: wt-status.c:289 +#: wt-status.c:290 msgid "untracked content, " msgstr "ospÃ¥rat innehÃ¥ll, " -#: wt-status.c:306 +#: wt-status.c:307 #, c-format msgid "new file: %s" msgstr "ny fil: %s" -#: wt-status.c:309 +#: wt-status.c:310 #, c-format msgid "copied: %s -> %s" msgstr "kopierad: %s -> %s" -#: wt-status.c:312 +#: wt-status.c:313 #, c-format msgid "deleted: %s" msgstr "borttagen: %s" -#: wt-status.c:315 +#: wt-status.c:316 #, c-format msgid "modified: %s" msgstr "ändrad: %s" -#: wt-status.c:318 +#: wt-status.c:319 #, c-format msgid "renamed: %s -> %s" msgstr "namnbyte: %s -> %s" -#: wt-status.c:321 +#: wt-status.c:322 #, c-format msgid "typechange: %s" msgstr "typbyte: %s" -#: wt-status.c:324 +#: wt-status.c:325 #, c-format msgid "unknown: %s" msgstr "okänd: %s" -#: wt-status.c:327 +#: wt-status.c:328 #, c-format msgid "unmerged: %s" msgstr "osammansl.: %s" -#: wt-status.c:330 +#: wt-status.c:331 #, c-format msgid "bug: unhandled diff status %c" msgstr "programfel: diff-status %c ej hanterad" @@ -1350,7 +1407,7 @@ msgstr "programfel: diff-status %c ej hanterad" msgid "You have unmerged paths." msgstr "Du har ej sammanslagna sökvägar." -#: wt-status.c:806 wt-status.c:958 +#: wt-status.c:806 msgid " (fix conflicts and run \"git commit\")" msgstr " (rätta konflikter och kör \"git commit\")" @@ -1371,8 +1428,8 @@ msgid "The current patch is empty." msgstr "Aktuell patch är tom." #: wt-status.c:829 -msgid " (fix conflicts and then run \"git am --resolved\")" -msgstr " (rätta konflikter och kör sedan \"git am --resolved\")" +msgid " (fix conflicts and then run \"git am --continue\")" +msgstr " (rätta konflikter och kör sedan \"git am --continue\")" #: wt-status.c:831 msgid " (use \"git am --skip\" to skip this patch)" @@ -1448,37 +1505,47 @@ msgstr " (använd \"git rebase --continue\" när du är nöjd med dina ändring msgid "You are currently cherry-picking." msgstr "Du hÃ¥ller pÃ¥ med en \"cherry-pick\"." +#: wt-status.c:958 +msgid " (fix conflicts and run \"git cherry-pick --continue\")" +msgstr " (rätta konflikter och kör sedan \"git cherry-pick --continue\")" + #: wt-status.c:961 -msgid " (all conflicts fixed: run \"git commit\")" -msgstr " (alla konflikter har rättats: kör \"git commit\")" +msgid " (all conflicts fixed: run \"git cherry-pick --continue\")" +msgstr " (alla konflikter rättade: kör \"git cherry-pick --continue\")" -#: wt-status.c:970 +#: wt-status.c:963 +msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)" +msgstr "" +" (använd \"git cherry-pick --abort\" för att avbryta \"cherry-pick\"-" +"operationen)" + +#: wt-status.c:972 #, c-format msgid "You are currently reverting commit %s." msgstr "Du hÃ¥ller pÃ¥ med att Ã¥ngra incheckningen %s." -#: wt-status.c:975 +#: wt-status.c:977 msgid " (fix conflicts and run \"git revert --continue\")" msgstr " (rätta konflikter och kör sedan \"git revert --continue\")" -#: wt-status.c:978 +#: wt-status.c:980 msgid " (all conflicts fixed: run \"git revert --continue\")" msgstr " (alla konflikter rättade: kör \"git revert --continue\")" -#: wt-status.c:980 +#: wt-status.c:982 msgid " (use \"git revert --abort\" to cancel the revert operation)" msgstr " (använd \"git revert --abort\" för att avbryta Ã¥ngrandet)" -#: wt-status.c:991 +#: wt-status.c:993 #, c-format msgid "You are currently bisecting, started from branch '%s'." msgstr "Du hÃ¥ller pÃ¥ med en \"bisect\", startad frÃ¥n grenen \"%s\"." -#: wt-status.c:995 +#: wt-status.c:997 msgid "You are currently bisecting." msgstr "Du hÃ¥ller pÃ¥ med en \"bisect\"." -#: wt-status.c:998 +#: wt-status.c:1000 msgid " (use \"git bisect reset\" to get back to the original branch)" msgstr "" " (använd \"git bisect reset\" för att komma tillbaka till ursprungsgrenen)" @@ -1487,31 +1554,35 @@ msgstr "" msgid "On branch " msgstr "PÃ¥ grenen " -#: wt-status.c:1184 +#: wt-status.c:1180 +msgid "rebase in progress; onto " +msgstr "ombasering pÃ¥gÃ¥r; ovanpÃ¥" + +#: wt-status.c:1187 msgid "HEAD detached at " msgstr "HEAD frÃ¥nkopplad vid " -#: wt-status.c:1186 +#: wt-status.c:1189 msgid "HEAD detached from " msgstr "HEAD frÃ¥nkopplad frÃ¥n " -#: wt-status.c:1189 +#: wt-status.c:1192 msgid "Not currently on any branch." msgstr "Inte pÃ¥ nÃ¥gon gren för närvarande." -#: wt-status.c:1206 +#: wt-status.c:1209 msgid "Initial commit" msgstr "Första incheckning" -#: wt-status.c:1220 +#: wt-status.c:1223 msgid "Untracked files" msgstr "OspÃ¥rade filer" -#: wt-status.c:1222 +#: wt-status.c:1225 msgid "Ignored files" msgstr "Ignorerade filer" -#: wt-status.c:1226 +#: wt-status.c:1229 #, c-format msgid "" "It took %.2f seconds to enumerate untracked files. 'status -uno'\n" @@ -1523,32 +1594,32 @@ msgstr "" "lägga till nya filer själv (se \"git help status\")." # %s är nästa sträng eller tom. -#: wt-status.c:1232 +#: wt-status.c:1235 #, c-format msgid "Untracked files not listed%s" msgstr "OspÃ¥rade filer visas ej%s" -#: wt-status.c:1234 +#: wt-status.c:1237 msgid " (use -u option to show untracked files)" msgstr " (använd flaggan -u för att visa ospÃ¥rade filer)" -#: wt-status.c:1240 +#: wt-status.c:1243 msgid "No changes" msgstr "Inga ändringar" -#: wt-status.c:1245 +#: wt-status.c:1248 #, c-format msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n" msgstr "" "inga ändringar att checka in (använd \"git add\" och/eller \"git commit -a" "\")\n" -#: wt-status.c:1248 +#: wt-status.c:1251 #, c-format msgid "no changes added to commit\n" msgstr "inga ändringar att checka in\n" -#: wt-status.c:1251 +#: wt-status.c:1254 #, c-format msgid "" "nothing added to commit but untracked files present (use \"git add\" to " @@ -1557,52 +1628,52 @@ msgstr "" "inget köat för incheckning, men ospÃ¥rade filer finns (spÃ¥ra med \"git add" "\")\n" -#: wt-status.c:1254 +#: wt-status.c:1257 #, c-format msgid "nothing added to commit but untracked files present\n" msgstr "inget köat för incheckning, men ospÃ¥rade filer finns\n" -#: wt-status.c:1257 +#: wt-status.c:1260 #, c-format msgid "nothing to commit (create/copy files and use \"git add\" to track)\n" msgstr "inget att checka in (skapa/kopiera filer och spÃ¥ra med \"git add\")\n" -#: wt-status.c:1260 wt-status.c:1265 +#: wt-status.c:1263 wt-status.c:1268 #, c-format msgid "nothing to commit\n" msgstr "inget att checka in\n" -#: wt-status.c:1263 +#: wt-status.c:1266 #, c-format msgid "nothing to commit (use -u to show untracked files)\n" msgstr "inget att checka in (använd -u för att visa ospÃ¥rade filer)\n" -#: wt-status.c:1267 +#: wt-status.c:1270 #, c-format msgid "nothing to commit, working directory clean\n" msgstr "inget att checka in, arbetskatalogen ren\n" -#: wt-status.c:1375 +#: wt-status.c:1378 msgid "HEAD (no branch)" msgstr "HEAD (ingen gren)" -#: wt-status.c:1381 +#: wt-status.c:1384 msgid "Initial commit on " msgstr "Första incheckning pÃ¥ " -#: wt-status.c:1396 +#: wt-status.c:1399 msgid "behind " msgstr "efter " -#: wt-status.c:1399 wt-status.c:1402 +#: wt-status.c:1402 wt-status.c:1405 msgid "ahead " msgstr "före " -#: wt-status.c:1404 +#: wt-status.c:1407 msgid ", behind " msgstr ", efter " -#: compat/precompose_utf8.c:58 builtin/clone.c:352 +#: compat/precompose_utf8.c:58 builtin/clone.c:351 #, c-format msgid "failed to unlink '%s'" msgstr "misslyckades ta bort länken \"%s\"" @@ -1688,7 +1759,7 @@ msgstr "" msgid "unexpected diff status %c" msgstr "diff-status %c förväntades inte" -#: builtin/add.c:149 builtin/commit.c:233 +#: builtin/add.c:149 builtin/commit.c:252 msgid "updating files failed" msgstr "misslyckades uppdatera filer" @@ -1701,7 +1772,7 @@ msgstr "ta bort \"%s\"\n" msgid "Unstaged changes after refreshing the index:" msgstr "OspÃ¥rade ändringar efter att ha uppdaterat indexet:" -#: builtin/add.c:256 builtin/add.c:572 builtin/rm.c:275 +#: builtin/add.c:256 builtin/add.c:573 builtin/rm.c:337 #, c-format msgid "pathspec '%s' did not match any files" msgstr "sökvägsangivelsen \"%s\" motsvarade inte nÃ¥gra filer" @@ -1710,127 +1781,127 @@ msgstr "sökvägsangivelsen \"%s\" motsvarade inte nÃ¥gra filer" msgid "Could not read the index" msgstr "Kunde inte läsa indexet" -#: builtin/add.c:349 +#: builtin/add.c:350 #, c-format msgid "Could not open '%s' for writing." msgstr "Kunde inte öppna \"%s\" för skrivning" -#: builtin/add.c:353 +#: builtin/add.c:354 msgid "Could not write patch" msgstr "Kunde inte skriva patch" -#: builtin/add.c:358 +#: builtin/add.c:359 #, c-format msgid "Could not stat '%s'" msgstr "Kunde inte ta status pÃ¥ \"%s\"" -#: builtin/add.c:360 +#: builtin/add.c:361 msgid "Empty patch. Aborted." msgstr "Tom patch. Avbryter." -#: builtin/add.c:366 +#: builtin/add.c:367 #, c-format msgid "Could not apply '%s'" msgstr "Kunde inte tillämpa \"%s\"" -#: builtin/add.c:376 +#: builtin/add.c:377 msgid "The following paths are ignored by one of your .gitignore files:\n" msgstr "Följande sökvägar ignoreras av en av dina .gitignore-filer:\n" -#: builtin/add.c:393 builtin/clean.c:161 builtin/fetch.c:78 builtin/mv.c:63 -#: builtin/prune-packed.c:76 builtin/push.c:425 builtin/remote.c:1253 -#: builtin/rm.c:206 +#: builtin/add.c:394 builtin/clean.c:875 builtin/fetch.c:78 builtin/mv.c:63 +#: builtin/prune-packed.c:73 builtin/push.c:451 builtin/remote.c:1253 +#: builtin/rm.c:268 msgid "dry run" msgstr "testkörning" -#: builtin/add.c:394 builtin/apply.c:4409 builtin/check-ignore.c:19 -#: builtin/commit.c:1152 builtin/count-objects.c:95 builtin/fsck.c:613 -#: builtin/log.c:1518 builtin/mv.c:62 builtin/read-tree.c:112 +#: builtin/add.c:395 builtin/apply.c:4410 builtin/check-ignore.c:19 +#: builtin/commit.c:1220 builtin/count-objects.c:95 builtin/fsck.c:613 +#: builtin/log.c:1573 builtin/mv.c:62 builtin/read-tree.c:113 msgid "be verbose" msgstr "var pratsam" -#: builtin/add.c:396 +#: builtin/add.c:397 msgid "interactive picking" msgstr "plocka interaktivt" -#: builtin/add.c:397 builtin/checkout.c:1063 builtin/reset.c:258 +#: builtin/add.c:398 builtin/checkout.c:1073 builtin/reset.c:261 msgid "select hunks interactively" msgstr "välj stycken interaktivt" -#: builtin/add.c:398 +#: builtin/add.c:399 msgid "edit current diff and apply" msgstr "redigera aktuell diff och applicera" -#: builtin/add.c:399 +#: builtin/add.c:400 msgid "allow adding otherwise ignored files" msgstr "tillÃ¥t lägga till annars ignorerade filer" -#: builtin/add.c:400 +#: builtin/add.c:401 msgid "update tracked files" msgstr "uppdatera spÃ¥rade filer" -#: builtin/add.c:401 +#: builtin/add.c:402 msgid "record only the fact that the path will be added later" msgstr "registrera endast att sökvägen kommer läggas till senare" -#: builtin/add.c:402 +#: builtin/add.c:403 msgid "add changes from all tracked and untracked files" msgstr "lägg till ändringar frÃ¥n alla spÃ¥rade och ospÃ¥rade filer" #. takes no arguments -#: builtin/add.c:405 +#: builtin/add.c:406 msgid "ignore paths removed in the working tree (same as --no-all)" msgstr "ignorera sökvägar borttagna i arbetskatalogen (samma som --no-all)" -#: builtin/add.c:407 +#: builtin/add.c:408 msgid "don't add, only refresh the index" msgstr "lägg inte till, uppdatera endast indexet" -#: builtin/add.c:408 +#: builtin/add.c:409 msgid "just skip files which cannot be added because of errors" msgstr "hoppa bara över filer som inte kan läggas till pÃ¥ grund av fel" -#: builtin/add.c:409 +#: builtin/add.c:410 msgid "check if - even missing - files are ignored in dry run" msgstr "se om - även saknade - filer ignoreras i testkörning" -#: builtin/add.c:431 +#: builtin/add.c:432 #, c-format msgid "Use -f if you really want to add them.\n" msgstr "Använd -f om du verkligen vill lägga till dem.\n" -#: builtin/add.c:432 +#: builtin/add.c:433 msgid "no files added" msgstr "inga filer har lagts till" -#: builtin/add.c:438 +#: builtin/add.c:439 msgid "adding files failed" msgstr "misslyckades lägga till filer" -#: builtin/add.c:477 +#: builtin/add.c:478 msgid "-A and -u are mutually incompatible" msgstr "-A och -u är ömsesidigt inkompatibla" -#: builtin/add.c:495 +#: builtin/add.c:496 msgid "Option --ignore-missing can only be used together with --dry-run" msgstr "Flaggan --ignore-missing kan endast användas tillsammans med --dry-run" -#: builtin/add.c:525 +#: builtin/add.c:526 #, c-format msgid "Nothing specified, nothing added.\n" msgstr "Inget angivet, inget tillagt.\n" -#: builtin/add.c:526 +#: builtin/add.c:527 #, c-format msgid "Maybe you wanted to say 'git add .'?\n" msgstr "Kanske menade du att skriva \"git add .\"?\n" -#: builtin/add.c:532 builtin/check-ignore.c:66 builtin/clean.c:204 -#: builtin/commit.c:293 builtin/mv.c:82 builtin/rm.c:235 +#: builtin/add.c:533 builtin/check-ignore.c:161 builtin/clean.c:919 +#: builtin/commit.c:312 builtin/mv.c:82 builtin/rm.c:297 msgid "index file corrupt" msgstr "indexfilen trasig" -#: builtin/add.c:604 builtin/apply.c:4505 builtin/mv.c:229 builtin/rm.c:370 +#: builtin/add.c:605 builtin/apply.c:4506 builtin/mv.c:229 builtin/rm.c:432 msgid "Unable to write new index file" msgstr "Kunde inte skriva ny indexfil" @@ -2014,293 +2085,293 @@ msgstr "patch misslyckades: %s:%ld" msgid "cannot checkout %s" msgstr "kan inte checka ut %s" -#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3193 +#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3194 #, c-format msgid "read of %s failed" msgstr "misslyckades läsa %s" -#: builtin/apply.c:3173 builtin/apply.c:3395 +#: builtin/apply.c:3174 builtin/apply.c:3396 #, c-format msgid "path %s has been renamed/deleted" msgstr "sökvägen %s har ändrat namn/tagits bort" -#: builtin/apply.c:3254 builtin/apply.c:3409 +#: builtin/apply.c:3255 builtin/apply.c:3410 #, c-format msgid "%s: does not exist in index" msgstr "%s: finns inte i indexet" -#: builtin/apply.c:3258 builtin/apply.c:3401 builtin/apply.c:3423 +#: builtin/apply.c:3259 builtin/apply.c:3402 builtin/apply.c:3424 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: builtin/apply.c:3263 builtin/apply.c:3417 +#: builtin/apply.c:3264 builtin/apply.c:3418 #, c-format msgid "%s: does not match index" msgstr "%s: motsvarar inte indexet" -#: builtin/apply.c:3365 +#: builtin/apply.c:3366 msgid "removal patch leaves file contents" msgstr "patch för borttagning lämnar kvar filinnehÃ¥ll" -#: builtin/apply.c:3434 +#: builtin/apply.c:3435 #, c-format msgid "%s: wrong type" msgstr "%s: fel typ" -#: builtin/apply.c:3436 +#: builtin/apply.c:3437 #, c-format msgid "%s has type %o, expected %o" msgstr "%s har typen %o, förväntade %o" -#: builtin/apply.c:3537 +#: builtin/apply.c:3538 #, c-format msgid "%s: already exists in index" msgstr "%s: finns redan i indexet" -#: builtin/apply.c:3540 +#: builtin/apply.c:3541 #, c-format msgid "%s: already exists in working directory" msgstr "%s: finns redan i arbetskatalogen" -#: builtin/apply.c:3560 +#: builtin/apply.c:3561 #, c-format msgid "new mode (%o) of %s does not match old mode (%o)" msgstr "nytt läge (%o) för %s motsvarar inte gammalt läge (%o)" -#: builtin/apply.c:3565 +#: builtin/apply.c:3566 #, c-format msgid "new mode (%o) of %s does not match old mode (%o) of %s" msgstr "nytt läge (%o) för %s motsvarar inte gammalt läge (%o) för %s" -#: builtin/apply.c:3573 +#: builtin/apply.c:3574 #, c-format msgid "%s: patch does not apply" msgstr "%s: patchen kan inte tillämpas" -#: builtin/apply.c:3586 +#: builtin/apply.c:3587 #, c-format msgid "Checking patch %s..." msgstr "Kontrollerar patchen %s..." -#: builtin/apply.c:3679 builtin/checkout.c:216 builtin/reset.c:124 +#: builtin/apply.c:3680 builtin/checkout.c:216 builtin/reset.c:127 #, c-format msgid "make_cache_entry failed for path '%s'" msgstr "make_cache_entry misslyckades för sökvägen \"%s\"" -#: builtin/apply.c:3822 +#: builtin/apply.c:3823 #, c-format msgid "unable to remove %s from index" msgstr "kan inte ta bort %s frÃ¥n indexet" -#: builtin/apply.c:3850 +#: builtin/apply.c:3851 #, c-format -msgid "corrupt patch for subproject %s" -msgstr "trasig patch för underprojektet %s" +msgid "corrupt patch for submodule %s" +msgstr "trasig patch för undermodulen %s" -#: builtin/apply.c:3854 +#: builtin/apply.c:3855 #, c-format msgid "unable to stat newly created file '%s'" msgstr "kan inte ta status pÃ¥ nyligen skapade filen \"%s\"" -#: builtin/apply.c:3859 +#: builtin/apply.c:3860 #, c-format msgid "unable to create backing store for newly created file %s" msgstr "kan inte skapa säkerhetsminne för nyligen skapade filen %s" -#: builtin/apply.c:3862 builtin/apply.c:3970 +#: builtin/apply.c:3863 builtin/apply.c:3971 #, c-format msgid "unable to add cache entry for %s" msgstr "kan inte lägga till cachepost för %s" -#: builtin/apply.c:3895 +#: builtin/apply.c:3896 #, c-format msgid "closing file '%s'" msgstr "stänger filen \"%s\"" -#: builtin/apply.c:3944 +#: builtin/apply.c:3945 #, c-format msgid "unable to write file '%s' mode %o" msgstr "kan inte skriva filen \"%s\" läge %o" -#: builtin/apply.c:4031 +#: builtin/apply.c:4032 #, c-format msgid "Applied patch %s cleanly." msgstr "Tillämpade patchen %s rent." -#: builtin/apply.c:4039 +#: builtin/apply.c:4040 msgid "internal error" msgstr "internt fel" #. Say this even without --verbose -#: builtin/apply.c:4042 +#: builtin/apply.c:4043 #, c-format msgid "Applying patch %%s with %d reject..." msgid_plural "Applying patch %%s with %d rejects..." msgstr[0] "Tillämpade patchen %%s med %d refuserad..." msgstr[1] "Tillämpade patchen %%s med %d refuserade..." -#: builtin/apply.c:4052 +#: builtin/apply.c:4053 #, c-format msgid "truncating .rej filename to %.*s.rej" msgstr "trunkerar .rej-filnamnet till %.*s.rej" -#: builtin/apply.c:4073 +#: builtin/apply.c:4074 #, c-format msgid "Hunk #%d applied cleanly." msgstr "Stycke %d tillämpades rent." -#: builtin/apply.c:4076 +#: builtin/apply.c:4077 #, c-format msgid "Rejected hunk #%d." msgstr "Refuserar stycke %d." -#: builtin/apply.c:4226 +#: builtin/apply.c:4227 msgid "unrecognized input" msgstr "indata känns inte igen" -#: builtin/apply.c:4237 +#: builtin/apply.c:4238 msgid "unable to read index file" msgstr "kan inte läsa indexfilen" -#: builtin/apply.c:4356 builtin/apply.c:4359 builtin/clone.c:92 +#: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:91 #: builtin/fetch.c:63 msgid "path" msgstr "sökväg" -#: builtin/apply.c:4357 +#: builtin/apply.c:4358 msgid "don't apply changes matching the given path" msgstr "tillämpa inte ändringar som motsvarar given sökväg" -#: builtin/apply.c:4360 +#: builtin/apply.c:4361 msgid "apply changes matching the given path" msgstr "tillämpa ändringar som motsvarar given sökväg" -#: builtin/apply.c:4362 +#: builtin/apply.c:4363 msgid "num" msgstr "antal" -#: builtin/apply.c:4363 +#: builtin/apply.c:4364 msgid "remove <num> leading slashes from traditional diff paths" msgstr "ta bort <antal> inledande snedstreck frÃ¥n traditionella diff-sökvägar" -#: builtin/apply.c:4366 +#: builtin/apply.c:4367 msgid "ignore additions made by the patch" msgstr "ignorera tillägg gjorda av patchen" -#: builtin/apply.c:4368 +#: builtin/apply.c:4369 msgid "instead of applying the patch, output diffstat for the input" msgstr "istället för att tillämpa patchen, skriv ut diffstat för indata" -#: builtin/apply.c:4372 +#: builtin/apply.c:4373 msgid "show number of added and deleted lines in decimal notation" msgstr "visa antal tillagda och borttagna rader decimalt" -#: builtin/apply.c:4374 +#: builtin/apply.c:4375 msgid "instead of applying the patch, output a summary for the input" msgstr "istället för att tillämpa patchen, skriv ut en summering av indata" -#: builtin/apply.c:4376 +#: builtin/apply.c:4377 msgid "instead of applying the patch, see if the patch is applicable" msgstr "istället för att tillämpa patchen, se om patchen kan tillämpas" -#: builtin/apply.c:4378 +#: builtin/apply.c:4379 msgid "make sure the patch is applicable to the current index" msgstr "se till att patchen kan tillämpas pÃ¥ aktuellt index" -#: builtin/apply.c:4380 +#: builtin/apply.c:4381 msgid "apply a patch without touching the working tree" msgstr "tillämpa en patch utan att röra arbetskatalogen" -#: builtin/apply.c:4382 +#: builtin/apply.c:4383 msgid "also apply the patch (use with --stat/--summary/--check)" msgstr "tillämpa ocksÃ¥ patchen (använd med --stat/--summary/--check)" -#: builtin/apply.c:4384 +#: builtin/apply.c:4385 msgid "attempt three-way merge if a patch does not apply" msgstr "försök en trevägssammanslagning om patchen inte kan tillämpas" -#: builtin/apply.c:4386 +#: builtin/apply.c:4387 msgid "build a temporary index based on embedded index information" msgstr "bygg ett temporärt index baserat pÃ¥ inbyggd indexinformation" -#: builtin/apply.c:4388 builtin/checkout-index.c:197 builtin/ls-files.c:456 +#: builtin/apply.c:4389 builtin/checkout-index.c:197 builtin/ls-files.c:462 msgid "paths are separated with NUL character" msgstr "sökvägar avdelas med NUL-tecken" -#: builtin/apply.c:4391 +#: builtin/apply.c:4392 msgid "ensure at least <n> lines of context match" msgstr "se till att Ã¥tminstone <n> rader sammanhang är lika" -#: builtin/apply.c:4392 +#: builtin/apply.c:4393 msgid "action" msgstr "Ã¥tgärd" -#: builtin/apply.c:4393 +#: builtin/apply.c:4394 msgid "detect new or modified lines that have whitespace errors" msgstr "detektera nya eller ändrade rader som har fel i blanktecken" -#: builtin/apply.c:4396 builtin/apply.c:4399 +#: builtin/apply.c:4397 builtin/apply.c:4400 msgid "ignore changes in whitespace when finding context" msgstr "ignorera ändringar i blanktecken för sammanhang" -#: builtin/apply.c:4402 +#: builtin/apply.c:4403 msgid "apply the patch in reverse" msgstr "tillämpa patchen baklänges" -#: builtin/apply.c:4404 +#: builtin/apply.c:4405 msgid "don't expect at least one line of context" msgstr "förvänta inte minst en rad sammanhang" -#: builtin/apply.c:4406 +#: builtin/apply.c:4407 msgid "leave the rejected hunks in corresponding *.rej files" msgstr "lämna refuserade stycken i motsvarande *.rej-filer" -#: builtin/apply.c:4408 +#: builtin/apply.c:4409 msgid "allow overlapping hunks" msgstr "tillÃ¥t överlappande stycken" -#: builtin/apply.c:4411 +#: builtin/apply.c:4412 msgid "tolerate incorrectly detected missing new-line at the end of file" msgstr "tolerera felaktigt detekterade saknade nyradstecken vid filslut" -#: builtin/apply.c:4414 +#: builtin/apply.c:4415 msgid "do not trust the line counts in the hunk headers" msgstr "lite inte pÃ¥ antalet linjer i styckehuvuden" -#: builtin/apply.c:4416 +#: builtin/apply.c:4417 msgid "root" msgstr "rot" -#: builtin/apply.c:4417 +#: builtin/apply.c:4418 msgid "prepend <root> to all filenames" msgstr "lägg till <rot> i alla filnamn" -#: builtin/apply.c:4439 +#: builtin/apply.c:4440 msgid "--3way outside a repository" msgstr "--3way utanför arkiv" -#: builtin/apply.c:4447 +#: builtin/apply.c:4448 msgid "--index outside a repository" msgstr "--index utanför arkiv" -#: builtin/apply.c:4450 +#: builtin/apply.c:4451 msgid "--cached outside a repository" msgstr "--cached utanför arkiv" -#: builtin/apply.c:4466 +#: builtin/apply.c:4467 #, c-format msgid "can't open patch '%s'" msgstr "kan inte öppna patchen \"%s\"" -#: builtin/apply.c:4480 +#: builtin/apply.c:4481 #, c-format msgid "squelched %d whitespace error" msgid_plural "squelched %d whitespace errors" msgstr[0] "undertryckte %d fel i blanksteg" msgstr[1] "undertryckte %d fel i blanksteg" -#: builtin/apply.c:4486 builtin/apply.c:4496 +#: builtin/apply.c:4487 builtin/apply.c:4497 #, c-format msgid "%d line adds whitespace errors." msgid_plural "%d lines add whitespace errors." @@ -2354,103 +2425,103 @@ msgstr "utför 'git bisect next'" msgid "update BISECT_HEAD instead of checking out the current commit" msgstr "uppdatera BISECT_HEAD istället för att checka ut aktuell incheckning" -#: builtin/blame.c:25 +#: builtin/blame.c:26 msgid "git blame [options] [rev-opts] [rev] [--] file" msgstr "git blame [flaggor] [rev-flaggor] [rev] [--] fil" -#: builtin/blame.c:30 +#: builtin/blame.c:31 msgid "[rev-opts] are documented in git-rev-list(1)" msgstr "[rev-flaggor] dokumenteras i git-rev-list(1)" -#: builtin/blame.c:2355 +#: builtin/blame.c:2276 msgid "Show blame entries as we find them, incrementally" msgstr "Visa klandringsposter när vi hittar dem, interaktivt" -#: builtin/blame.c:2356 +#: builtin/blame.c:2277 msgid "Show blank SHA-1 for boundary commits (Default: off)" msgstr "Visa blank SHA-1 för gränsincheckningar (Standard: av)" -#: builtin/blame.c:2357 +#: builtin/blame.c:2278 msgid "Do not treat root commits as boundaries (Default: off)" msgstr "Behandla inte rotincheckningar som gränser (Standard: av)" -#: builtin/blame.c:2358 +#: builtin/blame.c:2279 msgid "Show work cost statistics" msgstr "Visa statistik över arbetskostnad" -#: builtin/blame.c:2359 +#: builtin/blame.c:2280 msgid "Show output score for blame entries" msgstr "Visa utdatapoäng för klandringsposter" -#: builtin/blame.c:2360 +#: builtin/blame.c:2281 msgid "Show original filename (Default: auto)" msgstr "Visa originalfilnamn (Standard: auto)" -#: builtin/blame.c:2361 +#: builtin/blame.c:2282 msgid "Show original linenumber (Default: off)" msgstr "Visa ursprungligt radnummer (Standard: av)" -#: builtin/blame.c:2362 +#: builtin/blame.c:2283 msgid "Show in a format designed for machine consumption" msgstr "Visa i ett format avsett för maskinkonsumtion" -#: builtin/blame.c:2363 +#: builtin/blame.c:2284 msgid "Show porcelain format with per-line commit information" msgstr "Visa porslinsformat med per-rad-incheckningsinformation" -#: builtin/blame.c:2364 +#: builtin/blame.c:2285 msgid "Use the same output mode as git-annotate (Default: off)" msgstr "Använd samma utdataläge som git-annotate (Standard: av)" -#: builtin/blame.c:2365 +#: builtin/blame.c:2286 msgid "Show raw timestamp (Default: off)" msgstr "Visa rÃ¥ tidsstämpel (Standard: av)" -#: builtin/blame.c:2366 +#: builtin/blame.c:2287 msgid "Show long commit SHA1 (Default: off)" msgstr "Visa lÃ¥ng inchecknings-SHA1 (Standard: av)" -#: builtin/blame.c:2367 +#: builtin/blame.c:2288 msgid "Suppress author name and timestamp (Default: off)" msgstr "Undertryck författarnamn och tidsstämpel (Standard: av)" -#: builtin/blame.c:2368 +#: builtin/blame.c:2289 msgid "Show author email instead of name (Default: off)" msgstr "Visa författarens e-post istället för namn (Standard: av)" -#: builtin/blame.c:2369 +#: builtin/blame.c:2290 msgid "Ignore whitespace differences" msgstr "Ignorera ändringar i blanksteg" -#: builtin/blame.c:2370 +#: builtin/blame.c:2291 msgid "Spend extra cycles to find better match" msgstr "Slösa extra cykler med att hitta bättre träff" -#: builtin/blame.c:2371 +#: builtin/blame.c:2292 msgid "Use revisions from <file> instead of calling git-rev-list" msgstr "Använd revisioner frÃ¥n <fil> istället för att anropa git-rev-list" -#: builtin/blame.c:2372 +#: builtin/blame.c:2293 msgid "Use <file>'s contents as the final image" msgstr "Använd <fil>s innehÃ¥ll som slutgiltig bild" -#: builtin/blame.c:2373 builtin/blame.c:2374 +#: builtin/blame.c:2294 builtin/blame.c:2295 msgid "score" msgstr "poäng" -#: builtin/blame.c:2373 +#: builtin/blame.c:2294 msgid "Find line copies within and across files" msgstr "Hitta kopierade rader inuti och mellan filer" -#: builtin/blame.c:2374 +#: builtin/blame.c:2295 msgid "Find line movements within and across files" msgstr "Hitta flyttade rader inuti och mellan filer" -#: builtin/blame.c:2375 +#: builtin/blame.c:2296 msgid "n,m" msgstr "n,m" -#: builtin/blame.c:2375 +#: builtin/blame.c:2296 msgid "Process only line range n,m, counting from 1" msgstr "Behandla endast radintervallet n,m, med början pÃ¥ 1" @@ -2683,8 +2754,8 @@ msgid "act on remote-tracking branches" msgstr "arbeta pÃ¥ fjärrspÃ¥rande grenar" #: builtin/branch.c:805 builtin/branch.c:811 builtin/branch.c:832 -#: builtin/branch.c:838 builtin/commit.c:1368 builtin/commit.c:1369 -#: builtin/commit.c:1370 builtin/commit.c:1371 builtin/tag.c:468 +#: builtin/branch.c:838 builtin/commit.c:1433 builtin/commit.c:1434 +#: builtin/commit.c:1435 builtin/commit.c:1436 builtin/tag.c:468 msgid "commit" msgstr "incheckning" @@ -2748,7 +2819,7 @@ msgstr "visa grenar i spalter" msgid "Failed to resolve HEAD as a valid ref." msgstr "Misslyckades slÃ¥ upp HEAD som giltig referens" -#: builtin/branch.c:860 builtin/clone.c:619 +#: builtin/branch.c:860 builtin/clone.c:630 msgid "HEAD not found below refs/heads!" msgstr "HEAD hittades inte under refs/heads!" @@ -2870,43 +2941,43 @@ msgstr "Behöver ett arkiv för att skapa ett paket (bundle)." msgid "Need a repository to unbundle." msgstr "Behöver ett arkiv för att packa upp ett paket (bundle)." -#: builtin/cat-file.c:176 +#: builtin/cat-file.c:285 msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>" msgstr "git cat-file (-t|-s|-e|-p|<typ>|--textconv) <objekt>" -#: builtin/cat-file.c:177 +#: builtin/cat-file.c:286 msgid "git cat-file (--batch|--batch-check) < <list_of_objects>" msgstr "git cat-file (--batch|--batch-check) < <objektlista>" -#: builtin/cat-file.c:195 +#: builtin/cat-file.c:323 msgid "<type> can be one of: blob, tree, commit, tag" msgstr "<typ> kan vara en av: blob, tree, commit, tag" -#: builtin/cat-file.c:196 +#: builtin/cat-file.c:324 msgid "show object type" msgstr "visa objekttyp" -#: builtin/cat-file.c:197 +#: builtin/cat-file.c:325 msgid "show object size" msgstr "visa objektstorlek" -#: builtin/cat-file.c:199 +#: builtin/cat-file.c:327 msgid "exit with zero when there's no error" msgstr "avsluta med noll när det inte uppstÃ¥tt nÃ¥got fel" -#: builtin/cat-file.c:200 +#: builtin/cat-file.c:328 msgid "pretty-print object's content" msgstr "visa objektets innehÃ¥ll snyggt" -#: builtin/cat-file.c:202 +#: builtin/cat-file.c:330 msgid "for blob objects, run textconv on object's content" msgstr "för blob-objekt, kör textconv pÃ¥ objektets innehÃ¥ll" -#: builtin/cat-file.c:204 +#: builtin/cat-file.c:332 msgid "show info and content of objects fed from the standard input" msgstr "visa information och innehÃ¥ll för objekt som listas pÃ¥ standard in" -#: builtin/cat-file.c:207 +#: builtin/cat-file.c:335 msgid "show info about objects fed from the standard input" msgstr "visa information för objekt som listas pÃ¥ standard in" @@ -2934,30 +3005,55 @@ msgstr "läs filnamn frÃ¥n standard in" msgid "input paths are terminated by a null character" msgstr "sökvägar avdelas med null-tecken" -#: builtin/check-ignore.c:18 builtin/checkout.c:1044 builtin/gc.c:177 +#: builtin/check-ignore.c:18 builtin/checkout.c:1054 builtin/gc.c:177 msgid "suppress progress reporting" msgstr "undertryck förloppsrapportering" -#: builtin/check-ignore.c:146 +#: builtin/check-ignore.c:26 +msgid "show non-matching input paths" +msgstr "visa indatasökvägar som inte träffas" + +#: builtin/check-ignore.c:143 msgid "cannot specify pathnames with --stdin" msgstr "kan inte ange sökvägsnamn med --stdin" -#: builtin/check-ignore.c:149 +#: builtin/check-ignore.c:146 msgid "-z only makes sense with --stdin" msgstr "-z kan endast användas tillsammans med --stdin" -#: builtin/check-ignore.c:151 +#: builtin/check-ignore.c:148 msgid "no path specified" msgstr "ingen sökväg angavs" -#: builtin/check-ignore.c:155 +#: builtin/check-ignore.c:152 msgid "--quiet is only valid with a single pathname" msgstr "--quiet kan endast användas med ett enkelt sökvägsnamn" -#: builtin/check-ignore.c:157 +#: builtin/check-ignore.c:154 msgid "cannot have both --quiet and --verbose" msgstr "kan inte använda bÃ¥de --quiet och --verbose" +#: builtin/check-ignore.c:157 +msgid "--non-matching is only valid with --verbose" +msgstr "--non-matching är endast giltig med --verbose" + +#: builtin/check-mailmap.c:8 +msgid "git check-mailmap [options] <contact>..." +msgstr "git check-mailmap [flaggor] <kontakt>..." + +#: builtin/check-mailmap.c:13 +msgid "also read contacts from stdin" +msgstr "läs även kontakter frÃ¥n standard in" + +#: builtin/check-mailmap.c:24 +#, c-format +msgid "unable to parse contact: %s" +msgstr "kunde inte tolka kontakt: %s" + +#: builtin/check-mailmap.c:47 +msgid "no contacts specified" +msgstr "inga kontakter angavs" + #: builtin/checkout-index.c:126 msgid "git checkout-index [options] [--] [<file>...]" msgstr "git checkout-index [flaggor] [--] [<fil>...]" @@ -3074,42 +3170,42 @@ msgstr "du mÃ¥ste lösa ditt befintliga index först" msgid "Can not do reflog for '%s'\n" msgstr "Kan inte skapa referenslog för \"%s\"\n" -#: builtin/checkout.c:634 +#: builtin/checkout.c:639 msgid "HEAD is now at" msgstr "HEAD är nu pÃ¥" -#: builtin/checkout.c:641 +#: builtin/checkout.c:646 #, c-format msgid "Reset branch '%s'\n" msgstr "Ã…terställ gren \"%s\"\n" -#: builtin/checkout.c:644 +#: builtin/checkout.c:649 #, c-format msgid "Already on '%s'\n" msgstr "Redan pÃ¥ \"%s\"\n" -#: builtin/checkout.c:648 +#: builtin/checkout.c:653 #, c-format msgid "Switched to and reset branch '%s'\n" msgstr "Växlade till och nollställde grenen \"%s\"\n" -#: builtin/checkout.c:650 builtin/checkout.c:987 +#: builtin/checkout.c:655 builtin/checkout.c:997 #, c-format msgid "Switched to a new branch '%s'\n" msgstr "Växlade till en ny gren \"%s\"\n" -#: builtin/checkout.c:652 +#: builtin/checkout.c:657 #, c-format msgid "Switched to branch '%s'\n" msgstr "Växlade till grenen \"%s\"\n" -#: builtin/checkout.c:708 +#: builtin/checkout.c:713 #, c-format msgid " ... and %d more.\n" msgstr " ... och %d till.\n" #. The singular version -#: builtin/checkout.c:714 +#: builtin/checkout.c:719 #, c-format msgid "" "Warning: you are leaving %d commit behind, not connected to\n" @@ -3132,7 +3228,7 @@ msgstr[1] "" "\n" "%s\n" -#: builtin/checkout.c:732 +#: builtin/checkout.c:737 #, c-format msgid "" "If you want to keep them by creating a new branch, this may be a good time\n" @@ -3147,136 +3243,136 @@ msgstr "" " git branch nytt_grennamn %s\n" "\n" -#: builtin/checkout.c:762 +#: builtin/checkout.c:767 msgid "internal error in revision walk" msgstr "internt fel vid genomgÃ¥ng av revisioner (revision walk)" -#: builtin/checkout.c:766 +#: builtin/checkout.c:771 msgid "Previous HEAD position was" msgstr "Tidigare position för HEAD var" -#: builtin/checkout.c:793 builtin/checkout.c:982 +#: builtin/checkout.c:798 builtin/checkout.c:992 msgid "You are on a branch yet to be born" msgstr "Du är pÃ¥ en gren som ännu inte är född" #. case (1) -#: builtin/checkout.c:918 +#: builtin/checkout.c:928 #, c-format msgid "invalid reference: %s" msgstr "felaktig referens: %s" #. case (1): want a tree -#: builtin/checkout.c:957 +#: builtin/checkout.c:967 #, c-format msgid "reference is not a tree: %s" msgstr "referensen är inte ett träd: %s" -#: builtin/checkout.c:996 +#: builtin/checkout.c:1006 msgid "paths cannot be used with switching branches" msgstr "sökvägar kan inte användas vid byte av gren" -#: builtin/checkout.c:999 builtin/checkout.c:1003 +#: builtin/checkout.c:1009 builtin/checkout.c:1013 #, c-format msgid "'%s' cannot be used with switching branches" msgstr "\"%s\" kan inte användas vid byte av gren" -#: builtin/checkout.c:1007 builtin/checkout.c:1010 builtin/checkout.c:1015 -#: builtin/checkout.c:1018 +#: builtin/checkout.c:1017 builtin/checkout.c:1020 builtin/checkout.c:1025 +#: builtin/checkout.c:1028 #, c-format msgid "'%s' cannot be used with '%s'" msgstr "\"%s\" kan inte användas med \"%s\"" -#: builtin/checkout.c:1023 +#: builtin/checkout.c:1033 #, c-format msgid "Cannot switch branch to a non-commit '%s'" msgstr "Kan inte växla gren till icke-incheckningen \"%s\"" -#: builtin/checkout.c:1045 builtin/checkout.c:1047 builtin/clone.c:90 +#: builtin/checkout.c:1055 builtin/checkout.c:1057 builtin/clone.c:89 #: builtin/remote.c:169 builtin/remote.c:171 msgid "branch" msgstr "gren" -#: builtin/checkout.c:1046 +#: builtin/checkout.c:1056 msgid "create and checkout a new branch" msgstr "skapa och checka ut en ny gren" -#: builtin/checkout.c:1048 +#: builtin/checkout.c:1058 msgid "create/reset and checkout a branch" msgstr "skapa/nollställ och checka ut en gren" -#: builtin/checkout.c:1049 +#: builtin/checkout.c:1059 msgid "create reflog for new branch" msgstr "skapa reflogg för ny gren" -#: builtin/checkout.c:1050 +#: builtin/checkout.c:1060 msgid "detach the HEAD at named commit" msgstr "koppla frÃ¥n HEAD vid namngiven incheckning" -#: builtin/checkout.c:1051 +#: builtin/checkout.c:1061 msgid "set upstream info for new branch" msgstr "sätt uppströmsinformation för ny gren" -#: builtin/checkout.c:1053 +#: builtin/checkout.c:1063 msgid "new branch" msgstr "ny gren" -#: builtin/checkout.c:1053 +#: builtin/checkout.c:1063 msgid "new unparented branch" msgstr "ny gren utan förälder" -#: builtin/checkout.c:1054 +#: builtin/checkout.c:1064 msgid "checkout our version for unmerged files" msgstr "checka ut vÃ¥r version för ej sammanslagna filer" -#: builtin/checkout.c:1056 +#: builtin/checkout.c:1066 msgid "checkout their version for unmerged files" msgstr "checka ut deras version för ej sammanslagna filer" -#: builtin/checkout.c:1058 +#: builtin/checkout.c:1068 msgid "force checkout (throw away local modifications)" msgstr "tvinga utcheckning (kasta bort lokala ändringar)" -#: builtin/checkout.c:1059 +#: builtin/checkout.c:1069 msgid "perform a 3-way merge with the new branch" msgstr "utför en 3-vägssammanslagning för den nya grenen" -#: builtin/checkout.c:1060 builtin/merge.c:217 +#: builtin/checkout.c:1070 builtin/merge.c:232 msgid "update ignored files (default)" msgstr "uppdatera ignorerade filer (standard)" -#: builtin/checkout.c:1061 builtin/log.c:1158 parse-options.h:245 +#: builtin/checkout.c:1071 builtin/log.c:1208 parse-options.h:249 msgid "style" msgstr "stil" -#: builtin/checkout.c:1062 +#: builtin/checkout.c:1072 msgid "conflict style (merge or diff3)" msgstr "konfliktstil (merge eller diff3)" -#: builtin/checkout.c:1065 +#: builtin/checkout.c:1075 msgid "do not limit pathspecs to sparse entries only" msgstr "begränsa inte sökvägar till endast glesa poster" -#: builtin/checkout.c:1067 +#: builtin/checkout.c:1077 msgid "second guess 'git checkout no-such-branch'" msgstr "förutspÃ¥ \"git checkout gren-saknas\"" -#: builtin/checkout.c:1091 +#: builtin/checkout.c:1101 msgid "-b, -B and --orphan are mutually exclusive" msgstr "-b, -B och --orphan är ömsesidigt uteslutande" -#: builtin/checkout.c:1108 +#: builtin/checkout.c:1118 msgid "--track needs a branch name" msgstr "--track behöver ett namn pÃ¥ en gren" -#: builtin/checkout.c:1115 +#: builtin/checkout.c:1125 msgid "Missing branch name; try -b" msgstr "Grennamn saknas; försök med -b" -#: builtin/checkout.c:1150 +#: builtin/checkout.c:1160 msgid "invalid path specification" msgstr "felaktig sökvägsangivelse" -#: builtin/checkout.c:1157 +#: builtin/checkout.c:1167 #, c-format msgid "" "Cannot update paths and switch to branch '%s' at the same time.\n" @@ -3285,12 +3381,12 @@ msgstr "" "Kan inte uppdatera sökvägar och växla till grenen \"%s\" samtidigt.\n" "Ville du checka ut \"%s\" som inte kan lösas som en utcheckning?" -#: builtin/checkout.c:1162 +#: builtin/checkout.c:1172 #, c-format msgid "git checkout: --detach does not take a path argument '%s'" msgstr "git checkout: --detach tar inte en sökväg som argument \"%s\"" -#: builtin/checkout.c:1166 +#: builtin/checkout.c:1176 msgid "" "git checkout: --ours/--theirs, --force and --merge are incompatible when\n" "checking out of the index." @@ -3298,218 +3394,321 @@ msgstr "" "git checkout: --ours/--theirs, --force och --merge är inkompatibla när\n" "du checkar ut frÃ¥n indexet." -#: builtin/clean.c:20 -msgid "git clean [-d] [-f] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." +#: builtin/clean.c:25 +msgid "" +"git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." msgstr "" -"git clean [-d] [-f] [-n] [-q] [-e <mönster>] [-x | -X] [--] <sökvägar>..." +"git clean [-d] [-f] [-i] [-n] [-q] [-e <mönster>] [-x | -X] [--] " +"<sökvägar>..." -#: builtin/clean.c:24 +#: builtin/clean.c:29 #, c-format msgid "Removing %s\n" msgstr "Tar bort %s\n" -#: builtin/clean.c:25 +#: builtin/clean.c:30 #, c-format msgid "Would remove %s\n" msgstr "Skulle ta bort %s\n" -#: builtin/clean.c:26 +#: builtin/clean.c:31 #, c-format msgid "Skipping repository %s\n" msgstr "Hoppar över arkivet %s\n" -#: builtin/clean.c:27 +#: builtin/clean.c:32 #, c-format msgid "Would skip repository %s\n" msgstr "Skulle hoppa över arkivet %s\n" -#: builtin/clean.c:28 +#: builtin/clean.c:33 #, c-format msgid "failed to remove %s" msgstr "misslyckades ta bort %s" -#: builtin/clean.c:160 +#: builtin/clean.c:293 +msgid "" +"Prompt help:\n" +"1 - select a numbered item\n" +"foo - select item based on unique prefix\n" +" - (empty) select nothing" +msgstr "" +"Kommandohjälp:\n" +"1 - markera en numrerad post\n" +"foo - markera post baserad pÃ¥ unikt prefix\n" +" - (tomt) markera ingenting" + +#: builtin/clean.c:297 +msgid "" +"Prompt help:\n" +"1 - select a single item\n" +"3-5 - select a range of items\n" +"2-3,6-9 - select multiple ranges\n" +"foo - select item based on unique prefix\n" +"-... - unselect specified items\n" +"* - choose all items\n" +" - (empty) finish selecting" +msgstr "" +"Kommandohjälp:\n" +"1 - markera en ensam post\n" +"3-5 - markera ett intervall med poster\n" +"2-3,6-9 - markera flera intervall\n" +"foo - markera post baserad pÃ¥ unikt prefix\n" +"-... - avmarkera specifika poster\n" +"* - välj alla poster\n" +" - (tomt) avsluta markering" + +#: builtin/clean.c:515 +#, c-format +msgid "Huh (%s)?" +msgstr "VadÃ¥ (%s)?" + +#: builtin/clean.c:658 +#, c-format +msgid "Input ignore patterns>> " +msgstr "Ange ignoreringsmönster>>" + +#: builtin/clean.c:695 +#, c-format +msgid "WARNING: Cannot find items matched by: %s" +msgstr "VARNING: Hittar inte poster som motsvarar: %s" + +#: builtin/clean.c:716 +msgid "Select items to delete" +msgstr "Välj poster att ta bort" + +#: builtin/clean.c:756 +#, c-format +msgid "remove %s? " +msgstr "ta bort %s?" + +#: builtin/clean.c:781 +msgid "Bye." +msgstr "Hej dÃ¥." + +#: builtin/clean.c:789 +msgid "" +"clean - start cleaning\n" +"filter by pattern - exclude items from deletion\n" +"select by numbers - select items to be deleted by numbers\n" +"ask each - confirm each deletion (like \"rm -i\")\n" +"quit - stop cleaning\n" +"help - this screen\n" +"? - help for prompt selection" +msgstr "" +"clean - börja städa\n" +"filter by pattern - uteslut poster frÃ¥n borttagning\n" +"select by numbers - markera poster som ska tas bort med siffror\n" +"ask each - bekräfta varje borttagning (som \"rm -i\")\n" +"quit - sluta städa\n" +"help - denna skärm\n" +"? - hjälp för kommandoval" + +#: builtin/clean.c:816 +msgid "*** Commands ***" +msgstr "*** Kommandon ***" + +#: builtin/clean.c:817 +msgid "What now" +msgstr "Vad nu" + +#: builtin/clean.c:825 +msgid "Would remove the following item:" +msgid_plural "Would remove the following items:" +msgstr[0] "Skulle ta bort följande post:" +msgstr[1] "Skulle ta bort följande poster:" + +#: builtin/clean.c:842 +msgid "No more files to clean, exiting." +msgstr "Inga fler filer att städa, avslutar." + +#: builtin/clean.c:874 msgid "do not print names of files removed" msgstr "skriv inte ut namn pÃ¥ borttagna filer" -#: builtin/clean.c:162 +#: builtin/clean.c:876 msgid "force" msgstr "tvinga" -#: builtin/clean.c:164 +#: builtin/clean.c:877 +msgid "interactive cleaning" +msgstr "städa interaktivt" + +#: builtin/clean.c:879 msgid "remove whole directories" msgstr "ta bort hela kataloger" -#: builtin/clean.c:165 builtin/describe.c:412 builtin/grep.c:717 -#: builtin/ls-files.c:487 builtin/name-rev.c:231 builtin/show-ref.c:182 +#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:716 +#: builtin/ls-files.c:493 builtin/name-rev.c:315 builtin/show-ref.c:186 msgid "pattern" msgstr "mönster" -#: builtin/clean.c:166 +#: builtin/clean.c:881 msgid "add <pattern> to ignore rules" msgstr "lägg till <mönster> till ignoreringsregler" -#: builtin/clean.c:167 +#: builtin/clean.c:882 msgid "remove ignored files, too" msgstr "ta även bort ignorerade filer" -#: builtin/clean.c:169 +#: builtin/clean.c:884 msgid "remove only ignored files" msgstr "ta endast bort ignorerade filer" -#: builtin/clean.c:187 +#: builtin/clean.c:902 msgid "-x and -X cannot be used together" msgstr "-x och -X kan inte användas samtidigt" -#: builtin/clean.c:191 +#: builtin/clean.c:906 msgid "" -"clean.requireForce set to true and neither -n nor -f given; refusing to clean" +"clean.requireForce set to true and neither -i, -n nor -f given; refusing to " +"clean" msgstr "" -"clean.requireForce satt till true, men varken -n eller -f angavs; vägrar " +"clean.requireForce satt till true, men varken -i, -n eller -f angavs; vägrar " "städa" -#: builtin/clean.c:194 +#: builtin/clean.c:909 msgid "" -"clean.requireForce defaults to true and neither -n nor -f given; refusing to " -"clean" +"clean.requireForce defaults to true and neither -i, -n nor -f given; " +"refusing to clean" msgstr "" -"clean.requireForce har standardvärdet true, men varken -n eller -f angavs; " -"vägrar städa" +"clean.requireForce har standardvärdet true och varken -i, -n eller -f " +"angavs; vägrar städa" -#: builtin/clone.c:37 +#: builtin/clone.c:36 msgid "git clone [options] [--] <repo> [<dir>]" msgstr "git clone [flaggor] [--] <arkiv> [<kat>]" -#: builtin/clone.c:65 builtin/fetch.c:82 builtin/merge.c:214 -#: builtin/push.c:436 +#: builtin/clone.c:64 builtin/fetch.c:82 builtin/merge.c:229 +#: builtin/push.c:462 msgid "force progress reporting" msgstr "tvinga förloppsrapportering" -#: builtin/clone.c:67 +#: builtin/clone.c:66 msgid "don't create a checkout" msgstr "skapa inte nÃ¥gon utcheckning" -#: builtin/clone.c:68 builtin/clone.c:70 builtin/init-db.c:488 +#: builtin/clone.c:67 builtin/clone.c:69 builtin/init-db.c:488 msgid "create a bare repository" msgstr "skapa ett naket (\"bare\") arkiv" -#: builtin/clone.c:73 +#: builtin/clone.c:72 msgid "create a mirror repository (implies bare)" msgstr "skapa ett spegelarkiv (implicerar \"bare\")" -#: builtin/clone.c:75 +#: builtin/clone.c:74 msgid "to clone from a local repository" msgstr "för att klona frÃ¥n ett lokalt arkiv" -#: builtin/clone.c:77 +#: builtin/clone.c:76 msgid "don't use local hardlinks, always copy" msgstr "skapa inte lokala hÃ¥rda länkar, kopiera alltid" -#: builtin/clone.c:79 +#: builtin/clone.c:78 msgid "setup as shared repository" msgstr "skapa som ett delat arkiv" -#: builtin/clone.c:81 builtin/clone.c:83 +#: builtin/clone.c:80 builtin/clone.c:82 msgid "initialize submodules in the clone" msgstr "initiera undermoduler i klonen" -#: builtin/clone.c:84 builtin/init-db.c:485 +#: builtin/clone.c:83 builtin/init-db.c:485 msgid "template-directory" msgstr "mallkatalog" -#: builtin/clone.c:85 builtin/init-db.c:486 +#: builtin/clone.c:84 builtin/init-db.c:486 msgid "directory from which templates will be used" msgstr "katalog att använda mallar frÃ¥n" -#: builtin/clone.c:87 +#: builtin/clone.c:86 msgid "reference repository" msgstr "referensarkiv" -#: builtin/clone.c:88 builtin/column.c:26 builtin/merge-file.c:44 +#: builtin/clone.c:87 builtin/column.c:26 builtin/merge-file.c:44 msgid "name" msgstr "namn" -#: builtin/clone.c:89 +#: builtin/clone.c:88 msgid "use <name> instead of 'origin' to track upstream" msgstr "använd <namn> istället för \"origin\" för att spÃ¥ra uppströms" -#: builtin/clone.c:91 +#: builtin/clone.c:90 msgid "checkout <branch> instead of the remote's HEAD" msgstr "checka ut <gren> istället för fjärrens HEAD" -#: builtin/clone.c:93 +#: builtin/clone.c:92 msgid "path to git-upload-pack on the remote" msgstr "sökväg till git-upload-pack pÃ¥ fjärren" -#: builtin/clone.c:94 builtin/fetch.c:83 builtin/grep.c:662 +#: builtin/clone.c:93 builtin/fetch.c:83 builtin/grep.c:661 msgid "depth" msgstr "djup" -#: builtin/clone.c:95 +#: builtin/clone.c:94 msgid "create a shallow clone of that depth" msgstr "skapa en grund klon pÃ¥ detta djup" -#: builtin/clone.c:97 +#: builtin/clone.c:96 msgid "clone only one branch, HEAD or --branch" msgstr "klona endast en gren, HEAD eller --branch" -#: builtin/clone.c:98 builtin/init-db.c:494 +#: builtin/clone.c:97 builtin/init-db.c:494 msgid "gitdir" msgstr "gitkat" -#: builtin/clone.c:99 builtin/init-db.c:495 +#: builtin/clone.c:98 builtin/init-db.c:495 msgid "separate git dir from working tree" msgstr "separera gitkatalogen frÃ¥n arbetskatalogen" -#: builtin/clone.c:100 +#: builtin/clone.c:99 msgid "key=value" msgstr "nyckel=värde" -#: builtin/clone.c:101 +#: builtin/clone.c:100 msgid "set config inside the new repository" msgstr "ställ in konfiguration i det nya arkivet" -#: builtin/clone.c:254 +#: builtin/clone.c:253 #, c-format msgid "reference repository '%s' is not a local repository." msgstr "referensarkivet \"%s\" är inte ett lokalt arkiv." -#: builtin/clone.c:317 +#: builtin/clone.c:316 #, c-format msgid "failed to create directory '%s'" msgstr "misslyckades skapa katalogen \"%s\"" -#: builtin/clone.c:319 builtin/diff.c:77 +#: builtin/clone.c:318 builtin/diff.c:77 #, c-format msgid "failed to stat '%s'" msgstr "misslyckades ta status pÃ¥ \"%s\"" -#: builtin/clone.c:321 +#: builtin/clone.c:320 #, c-format msgid "%s exists and is not a directory" msgstr "%s finns och är ingen katalog" -#: builtin/clone.c:335 +#: builtin/clone.c:334 #, c-format msgid "failed to stat %s\n" msgstr "misslyckades ta status pÃ¥ %s\n" -#: builtin/clone.c:357 +#: builtin/clone.c:356 #, c-format msgid "failed to create link '%s'" msgstr "misslyckades skapa länken \"%s\"" -#: builtin/clone.c:361 +#: builtin/clone.c:360 #, c-format msgid "failed to copy file to '%s'" msgstr "misslyckades kopiera filen till \"%s\"" -#: builtin/clone.c:384 +#: builtin/clone.c:383 #, c-format msgid "done.\n" msgstr "klart.\n" -#: builtin/clone.c:397 +#: builtin/clone.c:396 msgid "" "Clone succeeded, but checkout failed.\n" "You can inspect what was checked out with 'git status'\n" @@ -3519,91 +3718,105 @@ msgstr "" "Du kan inspektera det som checkades ut med \"git status\"\n" "och försöka checka ut igen med \"git checkout -f HEAD\"\n" -#: builtin/clone.c:476 +#: builtin/clone.c:475 #, c-format msgid "Could not find remote branch %s to clone." msgstr "Kunde inte hitta fjärrgrenen %s för att klona." -#: builtin/clone.c:550 +#: builtin/clone.c:555 +#, c-format +msgid "Checking connectivity... " +msgstr "Kontrollerar anslutning..." + +#: builtin/clone.c:558 msgid "remote did not send all necessary objects" msgstr "fjärren sände inte alla nödvändiga objekt" -#: builtin/clone.c:610 +#: builtin/clone.c:560 +#, c-format +msgid "done\n" +msgstr "klart\n" + +#: builtin/clone.c:621 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" msgstr "" "HEAD hos fjärren pekar pÃ¥ en obefintlig referens, kan inte checka ut.\n" -#: builtin/clone.c:641 +#: builtin/clone.c:652 msgid "unable to checkout working tree" msgstr "kunde inte checka ut arbetskatalogen" -#: builtin/clone.c:749 +#: builtin/clone.c:760 msgid "Too many arguments." msgstr "För mÃ¥nga argument." -#: builtin/clone.c:753 +#: builtin/clone.c:764 msgid "You must specify a repository to clone." msgstr "Du mÃ¥ste ange ett arkiv att klona." -#: builtin/clone.c:764 +#: builtin/clone.c:775 #, c-format msgid "--bare and --origin %s options are incompatible." msgstr "flaggorna --bare och --origin %s är inkompatibla." -#: builtin/clone.c:767 +#: builtin/clone.c:778 msgid "--bare and --separate-git-dir are incompatible." msgstr "flaggorna --bare och --separate-git-dir är inkompatibla." -#: builtin/clone.c:780 +#: builtin/clone.c:791 #, c-format msgid "repository '%s' does not exist" msgstr "arkivet \"%s\" finns inte" -#: builtin/clone.c:785 +#: builtin/clone.c:796 msgid "--depth is ignored in local clones; use file:// instead." msgstr "--depth ignoreras i lokala kloningar; använd file:// istället" -#: builtin/clone.c:795 +#: builtin/clone.c:798 +msgid "--local is ignored" +msgstr "--local ignoreras" + +#: builtin/clone.c:808 #, c-format msgid "destination path '%s' already exists and is not an empty directory." msgstr "destinationssökvägen \"%s\" finns redan och är inte en tom katalog." -#: builtin/clone.c:805 +#: builtin/clone.c:818 #, c-format msgid "working tree '%s' already exists." msgstr "arbetsträdet \"%s\" finns redan." -#: builtin/clone.c:818 builtin/clone.c:830 +#: builtin/clone.c:831 builtin/clone.c:843 #, c-format msgid "could not create leading directories of '%s'" msgstr "kunde inte skapa inledande kataloger för \"%s\"" -#: builtin/clone.c:821 +#: builtin/clone.c:834 #, c-format msgid "could not create work tree dir '%s'." msgstr "kunde inte skapa arbetskatalogen \"%s\"" -#: builtin/clone.c:840 +#: builtin/clone.c:853 #, c-format msgid "Cloning into bare repository '%s'...\n" msgstr "Klonar till ett naket arkiv \"%s\"...\n" -#: builtin/clone.c:842 +#: builtin/clone.c:855 #, c-format msgid "Cloning into '%s'...\n" msgstr "Klonar till \"%s\"...\n" -#: builtin/clone.c:877 +#: builtin/clone.c:890 #, c-format msgid "Don't know how to clone %s" msgstr "Vet inte hur man klonar %s" -#: builtin/clone.c:926 +#: builtin/clone.c:942 #, c-format msgid "Remote branch %s not found in upstream %s" msgstr "Fjärrgrenen %s hittades inte i uppströmsarkivet %s" -#: builtin/clone.c:933 +#: builtin/clone.c:949 msgid "You appear to have cloned an empty repository." msgstr "Du verkar ha klonat ett tomt arkiv." @@ -3639,15 +3852,15 @@ msgstr "Spaltfyllnad mellan spalter" msgid "--command must be the first argument" msgstr "--command mÃ¥ste vara första argument" -#: builtin/commit.c:34 +#: builtin/commit.c:35 msgid "git commit [options] [--] <pathspec>..." msgstr "git commit [flaggor] [--] <sökväg>..." -#: builtin/commit.c:39 +#: builtin/commit.c:40 msgid "git status [options] [--] <pathspec>..." msgstr "git status [flaggor] [--] <sökväg>..." -#: builtin/commit.c:44 +#: builtin/commit.c:45 msgid "" "Your name and email address were configured automatically based\n" "on your username and hostname. Please check that they are accurate.\n" @@ -3672,7 +3885,7 @@ msgstr "" "\n" " git commit --amend --reset-author\n" -#: builtin/commit.c:56 +#: builtin/commit.c:57 msgid "" "You asked to amend the most recent commit, but doing so would make\n" "it empty. You can repeat your command with --allow-empty, or you can\n" @@ -3682,109 +3895,127 @@ msgstr "" "blir den tom. Du kan köra kommandot pÃ¥ nytt med --allow-empty, eller\n" "sÃ¥ kan du ta bort incheckningen helt med \"git reset HEAD^\".\n" -#: builtin/commit.c:61 +#: builtin/commit.c:62 msgid "" "The previous cherry-pick is now empty, possibly due to conflict resolution.\n" "If you wish to commit it anyway, use:\n" "\n" " git commit --allow-empty\n" "\n" -"Otherwise, please use 'git reset'\n" msgstr "" "Den tidigare \"cherry-pick\":en är nu tom, kanske pÃ¥ grund av en löst\n" "konflikt. Om du vill checka in den ändÃ¥ använder du:\n" "\n" " git commit --allow-empty\n" "\n" -"Annars använder du \"git reset\"\n" -#: builtin/commit.c:260 +#: builtin/commit.c:69 +msgid "Otherwise, please use 'git reset'\n" +msgstr "Använd annars \"git reset\"\n" + +#: builtin/commit.c:72 +msgid "" +"If you wish to skip this commit, use:\n" +"\n" +" git reset\n" +"\n" +"Then \"git cherry-pick --continue\" will resume cherry-picking\n" +"the remaining commits.\n" +msgstr "" +"Om du vill hoppa över incheckningen, använd:\n" +"\n" +" git reset\n" +"\n" +"\"git cherry-pick --continue\" kommer därefter att Ã¥teruppta\n" +"cherry-pick för Ã¥terstÃ¥ende incheckningar.\n" + +#: builtin/commit.c:279 msgid "failed to unpack HEAD tree object" msgstr "misslyckades packa upp HEAD:s trädobjekt" -#: builtin/commit.c:302 +#: builtin/commit.c:321 msgid "unable to create temporary index" msgstr "kunde inte skapa temporär indexfil" -#: builtin/commit.c:308 +#: builtin/commit.c:327 msgid "interactive add failed" msgstr "interaktiv tilläggning misslyckades" -#: builtin/commit.c:341 builtin/commit.c:362 builtin/commit.c:412 +#: builtin/commit.c:360 builtin/commit.c:381 builtin/commit.c:431 msgid "unable to write new_index file" msgstr "kunde inte skriva filen new_index" -#: builtin/commit.c:393 +#: builtin/commit.c:412 msgid "cannot do a partial commit during a merge." msgstr "kan inte utföra en delvis incheckning under en sammanslagning." -#: builtin/commit.c:395 +#: builtin/commit.c:414 msgid "cannot do a partial commit during a cherry-pick." msgstr "kan inte utföra en delvis incheckning under en cherry-pick." -#: builtin/commit.c:405 +#: builtin/commit.c:424 msgid "cannot read the index" msgstr "kan inte läsa indexet" -#: builtin/commit.c:425 +#: builtin/commit.c:444 msgid "unable to write temporary index file" msgstr "kunde inte skriva temporär indexfil" -#: builtin/commit.c:513 builtin/commit.c:519 +#: builtin/commit.c:535 builtin/commit.c:541 #, c-format msgid "invalid commit: %s" msgstr "felaktig incheckning: %s" -#: builtin/commit.c:542 +#: builtin/commit.c:563 msgid "malformed --author parameter" msgstr "felformad \"--author\"-flagga" -#: builtin/commit.c:562 +#: builtin/commit.c:583 #, c-format msgid "Malformed ident string: '%s'" msgstr "Felaktig indragningssträng: \"%s\"" -#: builtin/commit.c:600 builtin/commit.c:633 builtin/commit.c:956 +#: builtin/commit.c:621 builtin/commit.c:654 builtin/commit.c:982 #, c-format msgid "could not lookup commit %s" msgstr "kunde inte slÃ¥ upp incheckningen %s" -#: builtin/commit.c:612 builtin/shortlog.c:270 +#: builtin/commit.c:633 builtin/shortlog.c:271 #, c-format msgid "(reading log message from standard input)\n" msgstr "(läser loggmeddelande frÃ¥n standard in)\n" -#: builtin/commit.c:614 +#: builtin/commit.c:635 msgid "could not read log from standard input" msgstr "kunde inte läsa logg frÃ¥n standard in" -#: builtin/commit.c:618 +#: builtin/commit.c:639 #, c-format msgid "could not read log file '%s'" msgstr "kunde inte läsa loggfilen \"%s\"" -#: builtin/commit.c:624 +#: builtin/commit.c:645 msgid "commit has empty message" msgstr "incheckningen har ett tomt meddelande" -#: builtin/commit.c:640 +#: builtin/commit.c:661 msgid "could not read MERGE_MSG" msgstr "kunde inte läsa MERGE_MSG" -#: builtin/commit.c:644 +#: builtin/commit.c:665 msgid "could not read SQUASH_MSG" msgstr "kunde inte läsa SQUASH_MSG" -#: builtin/commit.c:648 +#: builtin/commit.c:669 #, c-format msgid "could not read '%s'" msgstr "kunde inte läsa \"%s\"" -#: builtin/commit.c:709 +#: builtin/commit.c:730 msgid "could not write commit template" msgstr "kunde inte skriva incheckningsmall" -#: builtin/commit.c:720 +#: builtin/commit.c:741 #, c-format msgid "" "\n" @@ -3799,7 +4030,7 @@ msgstr "" "\t%s\n" "och försöker igen.\n" -#: builtin/commit.c:725 +#: builtin/commit.c:746 #, c-format msgid "" "\n" @@ -3814,7 +4045,7 @@ msgstr "" "\t%s\n" "och försöker igen.\n" -#: builtin/commit.c:737 +#: builtin/commit.c:758 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" @@ -3824,7 +4055,7 @@ msgstr "" "med \"%c\" kommer ignoreras, och ett tomt meddelande avbryter " "incheckningen.\n" -#: builtin/commit.c:742 +#: builtin/commit.c:763 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" @@ -3835,139 +4066,139 @@ msgstr "" "med \"%c\" kommer behÃ¥llas; du kan själv ta bort dem om du vill.\n" "Ett tomt meddelande avbryter incheckningen.\n" -#: builtin/commit.c:755 +#: builtin/commit.c:776 #, c-format msgid "%sAuthor: %s" msgstr "%sFörfattare: %s" -#: builtin/commit.c:762 +#: builtin/commit.c:783 #, c-format msgid "%sCommitter: %s" msgstr "%sIncheckare: %s" -#: builtin/commit.c:782 +#: builtin/commit.c:803 msgid "Cannot read index" msgstr "Kan inte läsa indexet" -#: builtin/commit.c:819 +#: builtin/commit.c:845 msgid "Error building trees" msgstr "Fel vid byggande av träd" -#: builtin/commit.c:834 builtin/tag.c:359 +#: builtin/commit.c:860 builtin/tag.c:359 #, c-format msgid "Please supply the message using either -m or -F option.\n" msgstr "Ange meddelandet en av flaggorna -m eller -F.\n" -#: builtin/commit.c:931 +#: builtin/commit.c:957 #, c-format msgid "No existing author found with '%s'" msgstr "Hittade ingen befintlig författare med \"%s\"" -#: builtin/commit.c:946 builtin/commit.c:1140 +#: builtin/commit.c:972 builtin/commit.c:1208 #, c-format msgid "Invalid untracked files mode '%s'" msgstr "Ogiltigt läge för ospÃ¥rade filer: \"%s\"" -#: builtin/commit.c:976 +#: builtin/commit.c:1009 +msgid "--long and -z are incompatible" +msgstr "--long och -z är inkompatibla" + +#: builtin/commit.c:1039 msgid "Using both --reset-author and --author does not make sense" msgstr "Kan inte använda bÃ¥de --reset-author och --author" -#: builtin/commit.c:987 +#: builtin/commit.c:1050 msgid "You have nothing to amend." msgstr "Du har inget att utöka." -#: builtin/commit.c:990 +#: builtin/commit.c:1053 msgid "You are in the middle of a merge -- cannot amend." msgstr "Du är i mitten av en sammanslagning -- kan inte utöka." -#: builtin/commit.c:992 +#: builtin/commit.c:1055 msgid "You are in the middle of a cherry-pick -- cannot amend." msgstr "Du är i mitten av en cherry-pick -- kan inte utöka." -#: builtin/commit.c:995 +#: builtin/commit.c:1058 msgid "Options --squash and --fixup cannot be used together" msgstr "Flaggorna --squash och --fixup kan inte användas samtidigt" -#: builtin/commit.c:1005 +#: builtin/commit.c:1068 msgid "Only one of -c/-C/-F/--fixup can be used." msgstr "Endast en av -c/-C/-F/--fixup kan användas." -#: builtin/commit.c:1007 +#: builtin/commit.c:1070 msgid "Option -m cannot be combined with -c/-C/-F/--fixup." msgstr "Flaggan -m kan inte kombineras med -c/-C/-F/--fixup." -#: builtin/commit.c:1015 +#: builtin/commit.c:1078 msgid "--reset-author can be used only with -C, -c or --amend." msgstr "--reset-author kan endast användas med -C, -c eller --amend." -#: builtin/commit.c:1032 +#: builtin/commit.c:1095 msgid "Only one of --include/--only/--all/--interactive/--patch can be used." msgstr "" "Endast en av --include/--only/--all/--interactive/--patch kan användas." -#: builtin/commit.c:1034 +#: builtin/commit.c:1097 msgid "No paths with --include/--only does not make sense." msgstr "Du mÃ¥ste ange sökvägar tillsammans med --include/--only." -#: builtin/commit.c:1036 +#: builtin/commit.c:1099 msgid "Clever... amending the last one with dirty index." msgstr "Smart... utöka den senaste med smutsigt index." -#: builtin/commit.c:1038 +#: builtin/commit.c:1101 msgid "Explicit paths specified without -i nor -o; assuming --only paths..." msgstr "Explicita sökvägar angavs utan -i eller -o; antar --only sökvägar..." -#: builtin/commit.c:1048 builtin/tag.c:575 +#: builtin/commit.c:1111 builtin/tag.c:575 #, c-format msgid "Invalid cleanup mode %s" msgstr "Felaktigt städningsläge %s" -#: builtin/commit.c:1053 +#: builtin/commit.c:1116 msgid "Paths with -a does not make sense." msgstr "Kan inte ange sökvägar med -a." -#: builtin/commit.c:1059 builtin/commit.c:1194 -msgid "--long and -z are incompatible" -msgstr "--long och -z är inkompatibla" - -#: builtin/commit.c:1154 builtin/commit.c:1390 +#: builtin/commit.c:1222 builtin/commit.c:1455 msgid "show status concisely" -msgstr "vis koncis status" +msgstr "visa koncis status" -#: builtin/commit.c:1156 builtin/commit.c:1392 +#: builtin/commit.c:1224 builtin/commit.c:1457 msgid "show branch information" msgstr "visa information om gren" -#: builtin/commit.c:1158 builtin/commit.c:1394 builtin/push.c:426 +#: builtin/commit.c:1226 builtin/commit.c:1459 builtin/push.c:452 msgid "machine-readable output" msgstr "maskinläsbar utdata" -#: builtin/commit.c:1161 builtin/commit.c:1396 +#: builtin/commit.c:1229 builtin/commit.c:1461 msgid "show status in long format (default)" msgstr "visa status i lÃ¥ngt format (standard)" -#: builtin/commit.c:1164 builtin/commit.c:1399 +#: builtin/commit.c:1232 builtin/commit.c:1464 msgid "terminate entries with NUL" msgstr "terminera poster med NUL" -#: builtin/commit.c:1166 builtin/commit.c:1402 builtin/fast-export.c:659 -#: builtin/fast-export.c:662 builtin/tag.c:459 +#: builtin/commit.c:1234 builtin/commit.c:1467 builtin/fast-export.c:667 +#: builtin/fast-export.c:670 builtin/tag.c:459 msgid "mode" msgstr "läge" -#: builtin/commit.c:1167 builtin/commit.c:1402 +#: builtin/commit.c:1235 builtin/commit.c:1467 msgid "show untracked files, optional modes: all, normal, no. (Default: all)" msgstr "visa ospÃ¥rade filer, valfria lägen: alla, normal, no. (Standard: all)" -#: builtin/commit.c:1170 +#: builtin/commit.c:1238 msgid "show ignored files" msgstr "visa ignorerade filer" -#: builtin/commit.c:1171 parse-options.h:151 +#: builtin/commit.c:1239 parse-options.h:154 msgid "when" msgstr "när" -#: builtin/commit.c:1172 +#: builtin/commit.c:1240 msgid "" "ignore changes to submodules, optional when: all, dirty, untracked. " "(Default: all)" @@ -3975,217 +4206,217 @@ msgstr "" "ignorera ändringar i undermoduler, valfritt när: all, dirty, untracked. " "(Default: all)" -#: builtin/commit.c:1174 +#: builtin/commit.c:1242 msgid "list untracked files in columns" msgstr "visa ospÃ¥rade filer i spalter" -#: builtin/commit.c:1248 +#: builtin/commit.c:1313 msgid "couldn't look up newly created commit" msgstr "kunde inte slÃ¥ upp en precis skapad incheckning" -#: builtin/commit.c:1250 +#: builtin/commit.c:1315 msgid "could not parse newly created commit" msgstr "kunde inte tolka en precis skapad incheckning" -#: builtin/commit.c:1291 +#: builtin/commit.c:1356 msgid "detached HEAD" msgstr "frÃ¥nkopplad HEAD" -#: builtin/commit.c:1293 +#: builtin/commit.c:1358 msgid " (root-commit)" msgstr " (rotincheckning)" -#: builtin/commit.c:1360 +#: builtin/commit.c:1425 msgid "suppress summary after successful commit" msgstr "undertryck sammanfattning efter framgÃ¥ngsrik incheckning" -#: builtin/commit.c:1361 +#: builtin/commit.c:1426 msgid "show diff in commit message template" msgstr "visa diff i mallen för incheckningsmeddelandet" -#: builtin/commit.c:1363 +#: builtin/commit.c:1428 msgid "Commit message options" msgstr "Alternativ för incheckningsmeddelande" -#: builtin/commit.c:1364 builtin/tag.c:457 +#: builtin/commit.c:1429 builtin/tag.c:457 msgid "read message from file" msgstr "läs meddelande frÃ¥n fil" -#: builtin/commit.c:1365 +#: builtin/commit.c:1430 msgid "author" msgstr "författare" -#: builtin/commit.c:1365 +#: builtin/commit.c:1430 msgid "override author for commit" msgstr "överstyr författare för incheckningen" -#: builtin/commit.c:1366 builtin/gc.c:178 +#: builtin/commit.c:1431 builtin/gc.c:178 msgid "date" msgstr "datum" -#: builtin/commit.c:1366 +#: builtin/commit.c:1431 msgid "override date for commit" msgstr "överstyr datum för inchecknignen" -#: builtin/commit.c:1367 builtin/merge.c:208 builtin/notes.c:533 -#: builtin/notes.c:690 builtin/tag.c:455 +#: builtin/commit.c:1432 builtin/merge.c:223 builtin/notes.c:405 +#: builtin/notes.c:562 builtin/tag.c:455 msgid "message" msgstr "meddelande" -#: builtin/commit.c:1367 +#: builtin/commit.c:1432 msgid "commit message" msgstr "incheckningsmeddelande" -#: builtin/commit.c:1368 +#: builtin/commit.c:1433 msgid "reuse and edit message from specified commit" msgstr "Ã¥teranvänd och redigera meddelande frÃ¥n angiven incheckning" -#: builtin/commit.c:1369 +#: builtin/commit.c:1434 msgid "reuse message from specified commit" msgstr "Ã¥teranvänd meddelande frÃ¥n angiven incheckning" -#: builtin/commit.c:1370 +#: builtin/commit.c:1435 msgid "use autosquash formatted message to fixup specified commit" msgstr "" "använd autosquash-formaterat meddelande för att fixa angiven incheckning" -#: builtin/commit.c:1371 +#: builtin/commit.c:1436 msgid "use autosquash formatted message to squash specified commit" msgstr "" "använd autosquash-formaterat meddelande för att slÃ¥ ihop med angiven " "incheckning" -#: builtin/commit.c:1372 +#: builtin/commit.c:1437 msgid "the commit is authored by me now (used with -C/-c/--amend)" msgstr "jag är nu författare av incheckningen (används med -C/-c/--amend)" -#: builtin/commit.c:1373 builtin/log.c:1113 builtin/revert.c:109 +#: builtin/commit.c:1438 builtin/log.c:1160 builtin/revert.c:111 msgid "add Signed-off-by:" msgstr "lägg till Signed-off-by:" -#: builtin/commit.c:1374 +#: builtin/commit.c:1439 msgid "use specified template file" msgstr "använd angiven mallfil" -#: builtin/commit.c:1375 +#: builtin/commit.c:1440 msgid "force edit of commit" msgstr "tvinga redigering av incheckning" -#: builtin/commit.c:1376 +#: builtin/commit.c:1441 msgid "default" msgstr "standard" -#: builtin/commit.c:1376 builtin/tag.c:460 +#: builtin/commit.c:1441 builtin/tag.c:460 msgid "how to strip spaces and #comments from message" msgstr "hur blanksteg och #kommentarer skall tas bort frÃ¥n meddelande" -#: builtin/commit.c:1377 +#: builtin/commit.c:1442 msgid "include status in commit message template" msgstr "inkludera status i mallen för incheckningsmeddelandet" -#: builtin/commit.c:1378 builtin/merge.c:215 builtin/tag.c:461 +#: builtin/commit.c:1443 builtin/merge.c:230 builtin/tag.c:461 msgid "key id" msgstr "nyckel-id" -#: builtin/commit.c:1379 builtin/merge.c:216 +#: builtin/commit.c:1444 builtin/merge.c:231 msgid "GPG sign commit" msgstr "GPG-signera incheckning" #. end commit message options -#: builtin/commit.c:1382 +#: builtin/commit.c:1447 msgid "Commit contents options" msgstr "Alternativ för incheckningens innehÃ¥ll" -#: builtin/commit.c:1383 +#: builtin/commit.c:1448 msgid "commit all changed files" msgstr "checka in alla ändrade filer" -#: builtin/commit.c:1384 +#: builtin/commit.c:1449 msgid "add specified files to index for commit" msgstr "lägg till angivna filer till indexet för incheckning" -#: builtin/commit.c:1385 +#: builtin/commit.c:1450 msgid "interactively add files" msgstr "lägg till filer interaktivt" -#: builtin/commit.c:1386 +#: builtin/commit.c:1451 msgid "interactively add changes" msgstr "lägg till ändringar interaktivt" -#: builtin/commit.c:1387 +#: builtin/commit.c:1452 msgid "commit only specified files" msgstr "checka endast in angivna filer" -#: builtin/commit.c:1388 +#: builtin/commit.c:1453 msgid "bypass pre-commit hook" msgstr "förbigÃ¥ pre-commit-krok" -#: builtin/commit.c:1389 +#: builtin/commit.c:1454 msgid "show what would be committed" msgstr "visa vad som skulle checkas in" -#: builtin/commit.c:1400 +#: builtin/commit.c:1465 msgid "amend previous commit" msgstr "lägg till föregÃ¥ende incheckning" -#: builtin/commit.c:1401 +#: builtin/commit.c:1466 msgid "bypass post-rewrite hook" msgstr "förbigÃ¥ post-rewrite-krok" -#: builtin/commit.c:1406 +#: builtin/commit.c:1471 msgid "ok to record an empty change" msgstr "ok att registrera en tom ändring" -#: builtin/commit.c:1409 +#: builtin/commit.c:1474 msgid "ok to record a change with an empty message" msgstr "ok att registrera en ändring med tomt meddelande" -#: builtin/commit.c:1441 +#: builtin/commit.c:1507 msgid "could not parse HEAD commit" msgstr "kunde inte tolka HEAD:s incheckning" -#: builtin/commit.c:1479 builtin/merge.c:510 +#: builtin/commit.c:1545 builtin/merge.c:525 #, c-format msgid "could not open '%s' for reading" msgstr "kunde inte öppna \"%s\" för läsning" -#: builtin/commit.c:1486 +#: builtin/commit.c:1552 #, c-format msgid "Corrupt MERGE_HEAD file (%s)" msgstr "Trasig MERGE_HEAD-fil (%s)" -#: builtin/commit.c:1493 +#: builtin/commit.c:1559 msgid "could not read MERGE_MODE" msgstr "kunde inte läsa MERGE_MODE" -#: builtin/commit.c:1512 +#: builtin/commit.c:1578 #, c-format msgid "could not read commit message: %s" msgstr "kunde inte läsa incheckningsmeddelande: %s" -#: builtin/commit.c:1526 +#: builtin/commit.c:1592 #, c-format msgid "Aborting commit; you did not edit the message.\n" msgstr "Avbryter incheckning; meddelandet inte redigerat.\n" -#: builtin/commit.c:1531 +#: builtin/commit.c:1597 #, c-format msgid "Aborting commit due to empty commit message.\n" msgstr "Avbryter pÃ¥ grund av tomt incheckningsmeddelande.\n" -#: builtin/commit.c:1546 builtin/merge.c:847 builtin/merge.c:872 +#: builtin/commit.c:1612 builtin/merge.c:861 builtin/merge.c:886 msgid "failed to write commit object" msgstr "kunde inte skriva incheckningsobjekt" -#: builtin/commit.c:1567 +#: builtin/commit.c:1633 msgid "cannot lock HEAD ref" msgstr "kunde inte lÃ¥sa HEAD-referens" -#: builtin/commit.c:1571 +#: builtin/commit.c:1637 msgid "cannot update HEAD ref" msgstr "kunde inte uppdatera HEAD-referens" -#: builtin/commit.c:1582 +#: builtin/commit.c:1648 msgid "" "Repository has been updated, but unable to write\n" "new_index file. Check that disk is not full or quota is\n" @@ -4200,115 +4431,123 @@ msgstr "" msgid "git config [options]" msgstr "git config [flaggor]" -#: builtin/config.c:51 +#: builtin/config.c:52 msgid "Config file location" msgstr "Konfigurationsfilens plats" -#: builtin/config.c:52 +#: builtin/config.c:53 msgid "use global config file" msgstr "använd global konfigurationsfil" -#: builtin/config.c:53 +#: builtin/config.c:54 msgid "use system config file" msgstr "använd systemets konfigurationsfil" -#: builtin/config.c:54 +#: builtin/config.c:55 msgid "use repository config file" msgstr "använd arkivets konfigurationsfil" -#: builtin/config.c:55 +#: builtin/config.c:56 msgid "use given config file" msgstr "använd angiven konfigurationsil" -#: builtin/config.c:56 +#: builtin/config.c:57 +msgid "blob-id" +msgstr "blob-id" + +#: builtin/config.c:57 +msgid "read config from given blob object" +msgstr "läs konfiguration frÃ¥n givet blob-objekt" + +#: builtin/config.c:58 msgid "Action" msgstr "Ã…tgärd" -#: builtin/config.c:57 +#: builtin/config.c:59 msgid "get value: name [value-regex]" msgstr "hämta värde: namn [värde-reguttr]" -#: builtin/config.c:58 +#: builtin/config.c:60 msgid "get all values: key [value-regex]" msgstr "hämta alla värden: nyckel [värde-reguttr]" -#: builtin/config.c:59 +#: builtin/config.c:61 msgid "get values for regexp: name-regex [value-regex]" msgstr "hämta värden för reguttr: namn-reguttr [värde-reguttr]" -#: builtin/config.c:60 +#: builtin/config.c:62 msgid "replace all matching variables: name value [value_regex]" msgstr "ersätt alla motsvarande variabler: namn värde [värde-reguttr]" -#: builtin/config.c:61 +#: builtin/config.c:63 msgid "add a new variable: name value" msgstr "lägg till en ny variabel: namn värde" -#: builtin/config.c:62 +#: builtin/config.c:64 msgid "remove a variable: name [value-regex]" msgstr "ta bort en variabel: namn [värde-reguttr]" -#: builtin/config.c:63 +#: builtin/config.c:65 msgid "remove all matches: name [value-regex]" msgstr "ta bort alla träffar: namn [värde-reguttr]" -#: builtin/config.c:64 +#: builtin/config.c:66 msgid "rename section: old-name new-name" msgstr "byt namn pÃ¥ sektion: gammalt-namn nytt-namn" -#: builtin/config.c:65 +#: builtin/config.c:67 msgid "remove a section: name" msgstr "ta bort en sektion: namn" -#: builtin/config.c:66 +#: builtin/config.c:68 msgid "list all" msgstr "visa alla" -#: builtin/config.c:67 +#: builtin/config.c:69 msgid "open an editor" msgstr "öppna textredigeringsprogram" -#: builtin/config.c:68 builtin/config.c:69 +#: builtin/config.c:70 builtin/config.c:71 msgid "slot" msgstr "plats" -#: builtin/config.c:68 +#: builtin/config.c:70 msgid "find the color configured: [default]" msgstr "hitta den inställda färgen: [default]" -#: builtin/config.c:69 +#: builtin/config.c:71 msgid "find the color setting: [stdout-is-tty]" msgstr "hitta färginställningen: [stdout-is-tty]" -#: builtin/config.c:70 +#: builtin/config.c:72 msgid "Type" msgstr "Typ" -#: builtin/config.c:71 +#: builtin/config.c:73 msgid "value is \"true\" or \"false\"" msgstr "värdet är \"true\" eller \"false\"" -#: builtin/config.c:72 +#: builtin/config.c:74 msgid "value is decimal number" msgstr "värdet är ett decimalt tal" -#: builtin/config.c:73 +#: builtin/config.c:75 msgid "value is --bool or --int" msgstr "värdet är --bool eller --int" -#: builtin/config.c:74 +#: builtin/config.c:76 msgid "value is a path (file or directory name)" msgstr "värdet är en sökväg (fil- eller katalognamn)" -#: builtin/config.c:75 +#: builtin/config.c:77 msgid "Other" msgstr "Andra" -#: builtin/config.c:76 +#: builtin/config.c:78 msgid "terminate values with NUL byte" msgstr "terminera värden med NUL-byte" -#: builtin/config.c:77 +#: builtin/config.c:79 msgid "respect include directives on lookup" msgstr "respektera inkluderingsdirektiv vid uppslag" @@ -4320,55 +4559,55 @@ msgstr "git count-objects [-v] [-H | --human-readable]" msgid "print sizes in human readable format" msgstr "skriv storlekar i människoläsbart format" -#: builtin/describe.c:15 +#: builtin/describe.c:16 msgid "git describe [options] <committish>*" msgstr "git describe [flaggor] <incheckning-igt>*" -#: builtin/describe.c:16 +#: builtin/describe.c:17 msgid "git describe [options] --dirty" msgstr "git describe [flaggor] --dirty" -#: builtin/describe.c:233 +#: builtin/describe.c:237 #, c-format msgid "annotated tag %s not available" msgstr "den annoterade taggen %s inte tillgänglig" -#: builtin/describe.c:237 +#: builtin/describe.c:241 #, c-format msgid "annotated tag %s has no embedded name" msgstr "den annoterade taggen %s har inget inbäddat namn" -#: builtin/describe.c:239 +#: builtin/describe.c:243 #, c-format msgid "tag '%s' is really '%s' here" msgstr "taggen \"%s\" är i verkligheten \"%s\" här" -#: builtin/describe.c:266 +#: builtin/describe.c:270 #, c-format msgid "Not a valid object name %s" msgstr "Objektnamnet är inte giltigt: %s" -#: builtin/describe.c:269 +#: builtin/describe.c:273 #, c-format msgid "%s is not a valid '%s' object" msgstr "%s är inte ett giltigt \"%s\"-objekt" -#: builtin/describe.c:286 +#: builtin/describe.c:290 #, c-format msgid "no tag exactly matches '%s'" msgstr "ingen tagg motsvarar \"%s\" exakt" -#: builtin/describe.c:288 +#: builtin/describe.c:292 #, c-format msgid "searching to describe %s\n" msgstr "söker för att beskriva %s\n" -#: builtin/describe.c:328 +#: builtin/describe.c:332 #, c-format msgid "finished search at %s\n" msgstr "avslutade sökning pÃ¥ %s\n" -#: builtin/describe.c:352 +#: builtin/describe.c:359 #, c-format msgid "" "No annotated tags can describe '%s'.\n" @@ -4377,7 +4616,7 @@ msgstr "" "Inga annoterade taggar kan beskriva \"%s\".\n" "Det finns dock oannoterade taggar: testa --tags." -#: builtin/describe.c:356 +#: builtin/describe.c:363 #, c-format msgid "" "No tags can describe '%s'.\n" @@ -4386,12 +4625,12 @@ msgstr "" "Inga taggar kan beskriva \"%s\".\n" "Testa --always, eller skapa nÃ¥gra taggar." -#: builtin/describe.c:377 +#: builtin/describe.c:384 #, c-format msgid "traversed %lu commits\n" msgstr "traverserade %lu incheckningar\n" -#: builtin/describe.c:380 +#: builtin/describe.c:387 #, c-format msgid "" "more than %i tags found; listed %i most recent\n" @@ -4400,59 +4639,63 @@ msgstr "" "mer än %i taggar hittades; listar de %i senaste\n" "gav upp sökningen vid %s\n" -#: builtin/describe.c:402 +#: builtin/describe.c:409 msgid "find the tag that comes after the commit" msgstr "hitta taggen som kommer efter incheckningen" -#: builtin/describe.c:403 +#: builtin/describe.c:410 msgid "debug search strategy on stderr" msgstr "felsök sökstrategin pÃ¥ standard fel" -#: builtin/describe.c:404 +#: builtin/describe.c:411 msgid "use any ref" msgstr "använd alla referenser" -#: builtin/describe.c:405 +#: builtin/describe.c:412 msgid "use any tag, even unannotated" msgstr "använd alla taggar, även oannoterade" -#: builtin/describe.c:406 +#: builtin/describe.c:413 msgid "always use long format" msgstr "använd alltid lÃ¥ngt format" -#: builtin/describe.c:409 +#: builtin/describe.c:414 +msgid "only follow first parent" +msgstr "följ endast första föräldern" + +#: builtin/describe.c:417 msgid "only output exact matches" msgstr "skriv endast ut exakta träffar" -#: builtin/describe.c:411 +#: builtin/describe.c:419 msgid "consider <n> most recent tags (default: 10)" msgstr "överväg de <n> nyaste taggarna (standard: 10)" -#: builtin/describe.c:413 +#: builtin/describe.c:421 msgid "only consider tags matching <pattern>" msgstr "överväg endast taggar som motsvarar <mönster>" -#: builtin/describe.c:415 builtin/name-rev.c:238 +#: builtin/describe.c:423 builtin/name-rev.c:322 msgid "show abbreviated commit object as fallback" msgstr "visa förkortade incheckningsobjekt som standard" -#: builtin/describe.c:416 +#: builtin/describe.c:424 msgid "mark" msgstr "märke" -#: builtin/describe.c:417 +#: builtin/describe.c:425 msgid "append <mark> on dirty working tree (default: \"-dirty\")" msgstr "lägg till <märke> pÃ¥ lortigt arbetsträd (standard: \"-dirty\")" -#: builtin/describe.c:435 +#: builtin/describe.c:443 msgid "--long is incompatible with --abbrev=0" msgstr "--long är inkompatibel med --abbrev=0" -#: builtin/describe.c:461 +#: builtin/describe.c:469 msgid "No names found, cannot describe anything." msgstr "Inga namn hittades, kan inte beskriva nÃ¥got." -#: builtin/describe.c:481 +#: builtin/describe.c:489 msgid "--dirty is incompatible with committishes" msgstr "--dirty är inkompatibelt med \"committish\"-värden" @@ -4461,31 +4704,26 @@ msgstr "--dirty är inkompatibelt med \"committish\"-värden" msgid "'%s': not a regular file or symlink" msgstr "\"%s\": inte en normal fil eller symbolisk länk" -#: builtin/diff.c:228 +#: builtin/diff.c:230 #, c-format msgid "invalid option: %s" msgstr "ogiltig flagga: %s" -#: builtin/diff.c:305 +#: builtin/diff.c:307 msgid "Not a git repository" msgstr "Inte ett git-arkiv" -#: builtin/diff.c:348 +#: builtin/diff.c:350 #, c-format msgid "invalid object '%s' given." msgstr "objektet \"%s\" som angavs är felaktigt." -#: builtin/diff.c:353 -#, c-format -msgid "more than %d trees given: '%s'" -msgstr "mer än %d träd angavs: \"%s\"" - -#: builtin/diff.c:363 +#: builtin/diff.c:359 #, c-format msgid "more than two blobs given: '%s'" msgstr "mer än tvÃ¥ blobbar angavs: \"%s\"" -#: builtin/diff.c:371 +#: builtin/diff.c:366 #, c-format msgid "unhandled object '%s' given." msgstr "ej hanterat objekt \"%s\" angavs." @@ -4494,39 +4732,39 @@ msgstr "ej hanterat objekt \"%s\" angavs." msgid "git fast-export [rev-list-opts]" msgstr "git fast-export [rev-list-flaggor]" -#: builtin/fast-export.c:658 +#: builtin/fast-export.c:666 msgid "show progress after <n> objects" msgstr "visa förlopp efter <n> objekt" -#: builtin/fast-export.c:660 +#: builtin/fast-export.c:668 msgid "select handling of signed tags" msgstr "välj hantering av signerade taggar" -#: builtin/fast-export.c:663 +#: builtin/fast-export.c:671 msgid "select handling of tags that tag filtered objects" msgstr "välj hantering av taggar som har taggfiltrerade objekt" -#: builtin/fast-export.c:666 +#: builtin/fast-export.c:674 msgid "Dump marks to this file" msgstr "Dump märken till filen" -#: builtin/fast-export.c:668 +#: builtin/fast-export.c:676 msgid "Import marks from this file" msgstr "Importera märken frÃ¥n filen" -#: builtin/fast-export.c:670 +#: builtin/fast-export.c:678 msgid "Fake a tagger when tags lack one" msgstr "Fejka taggare när taggen saknar en" -#: builtin/fast-export.c:672 +#: builtin/fast-export.c:680 msgid "Output full tree for each commit" msgstr "Skriv ut hela trädet för varje incheckning" -#: builtin/fast-export.c:674 +#: builtin/fast-export.c:682 msgid "Use the done feature to terminate the stream" msgstr "Använd done-funktionen för att avsluta strömmen" -#: builtin/fast-export.c:675 +#: builtin/fast-export.c:683 msgid "Skip output of blob data" msgstr "Hoppa över skrivning av blob-data" @@ -4602,7 +4840,7 @@ msgstr "fördjupa historik för grund klon" msgid "convert to a complete repository" msgstr "konvertera till komplett arkiv" -#: builtin/fetch.c:88 builtin/log.c:1130 +#: builtin/fetch.c:88 builtin/log.c:1177 msgid "dir" msgstr "kat" @@ -4614,76 +4852,76 @@ msgstr "lägg till i början av undermodulens sökvägsutdata" msgid "default mode for recursion" msgstr "standardläge för rekursion" -#: builtin/fetch.c:204 +#: builtin/fetch.c:220 msgid "Couldn't find remote ref HEAD" msgstr "Kunde inte hitta fjärr-referensen HEAD" -#: builtin/fetch.c:257 +#: builtin/fetch.c:273 #, c-format msgid "object %s not found" msgstr "objektet %s hittades inte" -#: builtin/fetch.c:262 +#: builtin/fetch.c:278 msgid "[up to date]" msgstr "[à jour]" -#: builtin/fetch.c:276 +#: builtin/fetch.c:292 #, c-format msgid "! %-*s %-*s -> %s (can't fetch in current branch)" msgstr "! %-*s %-*s -> %s (kan inte hämta i aktuell gren)" -#: builtin/fetch.c:277 builtin/fetch.c:363 +#: builtin/fetch.c:293 builtin/fetch.c:379 msgid "[rejected]" msgstr "[refuserad]" -#: builtin/fetch.c:288 +#: builtin/fetch.c:304 msgid "[tag update]" msgstr "[uppdaterad tagg]" -#: builtin/fetch.c:290 builtin/fetch.c:325 builtin/fetch.c:343 +#: builtin/fetch.c:306 builtin/fetch.c:341 builtin/fetch.c:359 msgid " (unable to update local ref)" msgstr " (kunde inte uppdatera lokal ref)" -#: builtin/fetch.c:308 +#: builtin/fetch.c:324 msgid "[new tag]" msgstr "[ny tagg]" -#: builtin/fetch.c:311 +#: builtin/fetch.c:327 msgid "[new branch]" msgstr "[ny gren]" -#: builtin/fetch.c:314 +#: builtin/fetch.c:330 msgid "[new ref]" msgstr "[ny ref]" -#: builtin/fetch.c:359 +#: builtin/fetch.c:375 msgid "unable to update local ref" msgstr "kunde inte uppdatera lokal ref" -#: builtin/fetch.c:359 +#: builtin/fetch.c:375 msgid "forced update" msgstr "tvingad uppdatering" -#: builtin/fetch.c:365 +#: builtin/fetch.c:381 msgid "(non-fast-forward)" msgstr "(ej snabbspolad)" -#: builtin/fetch.c:396 builtin/fetch.c:688 +#: builtin/fetch.c:412 builtin/fetch.c:718 #, c-format msgid "cannot open %s: %s\n" msgstr "kan inte öppna %s: %s\n" -#: builtin/fetch.c:405 +#: builtin/fetch.c:421 #, c-format msgid "%s did not send all necessary objects\n" msgstr "%s sände inte alla nödvändiga objekt\n" -#: builtin/fetch.c:491 +#: builtin/fetch.c:520 #, c-format msgid "From %.*s\n" msgstr "FrÃ¥n %.*s\n" -#: builtin/fetch.c:502 +#: builtin/fetch.c:531 #, c-format msgid "" "some local refs could not be updated; try running\n" @@ -4692,55 +4930,55 @@ msgstr "" "vissa lokala referenser kunde inte uppdateras; testa att köra\n" " \"git remote prune %s\" för att ta bort gamla grenar som stÃ¥r i konflikt" -#: builtin/fetch.c:552 +#: builtin/fetch.c:581 #, c-format msgid " (%s will become dangling)" msgstr " (%s kommer bli dinglande)" -#: builtin/fetch.c:553 +#: builtin/fetch.c:582 #, c-format msgid " (%s has become dangling)" msgstr " (%s har blivit dinglande)" -#: builtin/fetch.c:560 +#: builtin/fetch.c:589 msgid "[deleted]" msgstr "[borttagen]" -#: builtin/fetch.c:561 builtin/remote.c:1055 +#: builtin/fetch.c:590 builtin/remote.c:1055 msgid "(none)" msgstr "(ingen)" -#: builtin/fetch.c:678 +#: builtin/fetch.c:708 #, c-format msgid "Refusing to fetch into current branch %s of non-bare repository" msgstr "Vägrar hämta till aktuell gren %s i ett icke-naket arkiv" -#: builtin/fetch.c:712 +#: builtin/fetch.c:742 #, c-format msgid "Don't know how to fetch from %s" msgstr "Vet inte hur man hämtar frÃ¥n %s" -#: builtin/fetch.c:789 +#: builtin/fetch.c:823 #, c-format msgid "Option \"%s\" value \"%s\" is not valid for %s" msgstr "Flaggan \"%s\" och värdet \"%s\" är inte giltigt för %s" -#: builtin/fetch.c:792 +#: builtin/fetch.c:826 #, c-format msgid "Option \"%s\" is ignored for %s\n" msgstr "Flaggan \"%s\" ignoreras för %s\n" -#: builtin/fetch.c:894 +#: builtin/fetch.c:928 #, c-format msgid "Fetching %s\n" msgstr "Hämtar %s\n" -#: builtin/fetch.c:896 builtin/remote.c:100 +#: builtin/fetch.c:930 builtin/remote.c:100 #, c-format msgid "Could not fetch %s" msgstr "Kunde inte hämta %s" -#: builtin/fetch.c:915 +#: builtin/fetch.c:949 msgid "" "No remote repository specified. Please, specify either a URL or a\n" "remote name from which new revisions should be fetched." @@ -4748,32 +4986,32 @@ msgstr "" "Inget fjärrarkiv angavs. Ange antingen en URL eller namnet pÃ¥ ett\n" "fjärrarkiv som nya incheckningar skall hämtas frÃ¥n." -#: builtin/fetch.c:935 +#: builtin/fetch.c:969 msgid "You need to specify a tag name." msgstr "Du mÃ¥ste ange namnet pÃ¥ en tagg." -#: builtin/fetch.c:981 +#: builtin/fetch.c:1015 msgid "--depth and --unshallow cannot be used together" msgstr "--depth och --unshallow kan inte användas samtidigt" -#: builtin/fetch.c:983 +#: builtin/fetch.c:1017 msgid "--unshallow on a complete repository does not make sense" msgstr "--unshallow kan inte användas pÃ¥ ett komplett arkiv" -#: builtin/fetch.c:1002 +#: builtin/fetch.c:1036 msgid "fetch --all does not take a repository argument" msgstr "fetch --all tar inte namnet pÃ¥ ett arkiv som argument" -#: builtin/fetch.c:1004 +#: builtin/fetch.c:1038 msgid "fetch --all does not make sense with refspecs" msgstr "fetch --all kan inte anges med referensspecifikationer" -#: builtin/fetch.c:1015 +#: builtin/fetch.c:1049 #, c-format msgid "No such remote or remote group: %s" msgstr "Fjärren eller fjärrgruppen finns inte: %s" -#: builtin/fetch.c:1023 +#: builtin/fetch.c:1057 msgid "Fetching a group and specifying refspecs does not make sense" msgstr "Kan inte hämta frÃ¥n grupp och ange referensspecifikationer" @@ -4782,9 +5020,9 @@ msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]" msgstr "" "git fmt-merge-msg [-m <meddelande>] [--log[=<n>]|--no-log] [--file <fil>]" -#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:701 -#: builtin/merge.c:188 builtin/show-branch.c:655 builtin/show-ref.c:175 -#: builtin/tag.c:446 parse-options.h:133 parse-options.h:239 +#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:700 +#: builtin/merge.c:203 builtin/show-branch.c:655 builtin/show-ref.c:179 +#: builtin/tag.c:446 parse-options.h:133 parse-options.h:243 msgid "n" msgstr "n" @@ -4943,220 +5181,220 @@ msgstr "git grep [flaggor] [-e] <mönster> [<rev>...] [[--] <sökväg>...]" msgid "grep: failed to create thread: %s" msgstr "grep: misslyckades skapa trÃ¥d. %s" -#: builtin/grep.c:365 +#: builtin/grep.c:364 #, c-format msgid "Failed to chdir: %s" msgstr "Kunde inte byta katalog (chdir): %s" -#: builtin/grep.c:443 builtin/grep.c:478 +#: builtin/grep.c:442 builtin/grep.c:477 #, c-format msgid "unable to read tree (%s)" msgstr "kunde inte läsa träd (%s)" -#: builtin/grep.c:493 +#: builtin/grep.c:492 #, c-format msgid "unable to grep from object of type %s" msgstr "Kunde inte \"grep\" frÃ¥n objekt av typen %s" -#: builtin/grep.c:551 +#: builtin/grep.c:550 #, c-format msgid "switch `%c' expects a numerical value" msgstr "flaggan \"%c\" antar ett numeriskt värde" -#: builtin/grep.c:568 +#: builtin/grep.c:567 #, c-format msgid "cannot open '%s'" msgstr "kan inte öppna \"%s\"" -#: builtin/grep.c:643 +#: builtin/grep.c:642 msgid "search in index instead of in the work tree" msgstr "sök i indexet istället för i arbetskatalogen" -#: builtin/grep.c:645 +#: builtin/grep.c:644 msgid "find in contents not managed by git" msgstr "sök i innehÃ¥l som inte hanteras av git" -#: builtin/grep.c:647 +#: builtin/grep.c:646 msgid "search in both tracked and untracked files" msgstr "sök i bÃ¥de spÃ¥rade och ospÃ¥rade filer" -#: builtin/grep.c:649 +#: builtin/grep.c:648 msgid "search also in ignored files" msgstr "sök även i ignorerade filer" -#: builtin/grep.c:652 +#: builtin/grep.c:651 msgid "show non-matching lines" -msgstr "vis rader som inte träffas" +msgstr "visa rader som inte träffas" -#: builtin/grep.c:654 +#: builtin/grep.c:653 msgid "case insensitive matching" msgstr "skiftlägesokänslig sökning" -#: builtin/grep.c:656 +#: builtin/grep.c:655 msgid "match patterns only at word boundaries" msgstr "matcha endast mönster vid ordgränser" -#: builtin/grep.c:658 +#: builtin/grep.c:657 msgid "process binary files as text" msgstr "hantera binärfiler som text" -#: builtin/grep.c:660 +#: builtin/grep.c:659 msgid "don't match patterns in binary files" msgstr "träffa inte mönster i binärfiler" -#: builtin/grep.c:663 +#: builtin/grep.c:662 msgid "descend at most <depth> levels" msgstr "gÃ¥ som mest ned <djup> nivÃ¥er" -#: builtin/grep.c:667 +#: builtin/grep.c:666 msgid "use extended POSIX regular expressions" msgstr "använd utökade POSIX-reguljära uttryck" -#: builtin/grep.c:670 +#: builtin/grep.c:669 msgid "use basic POSIX regular expressions (default)" msgstr "använd grundläggande POSIX-reguljära uttryck (standard)" -#: builtin/grep.c:673 +#: builtin/grep.c:672 msgid "interpret patterns as fixed strings" msgstr "tolka mönster som fixerade strängar" -#: builtin/grep.c:676 +#: builtin/grep.c:675 msgid "use Perl-compatible regular expressions" msgstr "använd Perlkompatibla reguljära uttryck" -#: builtin/grep.c:679 +#: builtin/grep.c:678 msgid "show line numbers" msgstr "visa radnummer" -#: builtin/grep.c:680 +#: builtin/grep.c:679 msgid "don't show filenames" msgstr "visa inte filnamn" -#: builtin/grep.c:681 +#: builtin/grep.c:680 msgid "show filenames" msgstr "visa filnamn" -#: builtin/grep.c:683 +#: builtin/grep.c:682 msgid "show filenames relative to top directory" msgstr "visa filnamn relativa till toppkatalogen" -#: builtin/grep.c:685 +#: builtin/grep.c:684 msgid "show only filenames instead of matching lines" msgstr "visa endast filnamn istället för träffade rader" -#: builtin/grep.c:687 +#: builtin/grep.c:686 msgid "synonym for --files-with-matches" msgstr "synonym för --files-with-matches" -#: builtin/grep.c:690 +#: builtin/grep.c:689 msgid "show only the names of files without match" msgstr "visa endast namn pÃ¥ filer utan träffar" -#: builtin/grep.c:692 +#: builtin/grep.c:691 msgid "print NUL after filenames" msgstr "skriv NUL efter filnamn" -#: builtin/grep.c:694 +#: builtin/grep.c:693 msgid "show the number of matches instead of matching lines" msgstr "visa antal träffar istället för träffade rader" -#: builtin/grep.c:695 +#: builtin/grep.c:694 msgid "highlight matches" msgstr "ljusmarkera träffar" -#: builtin/grep.c:697 +#: builtin/grep.c:696 msgid "print empty line between matches from different files" msgstr "skriv tomma rader mellan träffar frÃ¥n olika filer" -#: builtin/grep.c:699 +#: builtin/grep.c:698 msgid "show filename only once above matches from same file" msgstr "visa filnamn endast en gÃ¥ng ovanför träffar frÃ¥n samma fil" -#: builtin/grep.c:702 +#: builtin/grep.c:701 msgid "show <n> context lines before and after matches" msgstr "visa <n> rader sammanhang före och efter träffar" -#: builtin/grep.c:705 +#: builtin/grep.c:704 msgid "show <n> context lines before matches" msgstr "visa <n> rader sammanhang före träffar" -#: builtin/grep.c:707 +#: builtin/grep.c:706 msgid "show <n> context lines after matches" msgstr "visa <n> rader sammanhang efter träffar" -#: builtin/grep.c:708 +#: builtin/grep.c:707 msgid "shortcut for -C NUM" msgstr "genväg för -C NUM" -#: builtin/grep.c:711 +#: builtin/grep.c:710 msgid "show a line with the function name before matches" msgstr "visa en rad med funktionsnamnet före träffen" -#: builtin/grep.c:713 +#: builtin/grep.c:712 msgid "show the surrounding function" msgstr "visa den omkringliggande funktionen" -#: builtin/grep.c:716 +#: builtin/grep.c:715 msgid "read patterns from file" msgstr "läs mönster frÃ¥n fil" -#: builtin/grep.c:718 +#: builtin/grep.c:717 msgid "match <pattern>" msgstr "träffa <mönster>" -#: builtin/grep.c:720 +#: builtin/grep.c:719 msgid "combine patterns specified with -e" msgstr "kombinera mönster som anges med -e" -#: builtin/grep.c:732 +#: builtin/grep.c:731 msgid "indicate hit with exit status without output" msgstr "ange träff med slutstatuskod utan utdata" -#: builtin/grep.c:734 +#: builtin/grep.c:733 msgid "show only matches from files that match all patterns" msgstr "visa endast träffar frÃ¥n filer som träffar alla mönster" -#: builtin/grep.c:736 +#: builtin/grep.c:735 msgid "show parse tree for grep expression" msgstr "visa analysträd för grep-uttryck" -#: builtin/grep.c:740 +#: builtin/grep.c:739 msgid "pager" msgstr "bläddrare" -#: builtin/grep.c:740 +#: builtin/grep.c:739 msgid "show matching files in the pager" msgstr "visa träffade filer i filbläddraren" -#: builtin/grep.c:743 +#: builtin/grep.c:742 msgid "allow calling of grep(1) (ignored by this build)" msgstr "tillÃ¥t anropa grep(1) (ignoreras av detta bygge)" -#: builtin/grep.c:744 builtin/show-ref.c:184 +#: builtin/grep.c:743 builtin/show-ref.c:188 msgid "show usage" msgstr "visa användning" -#: builtin/grep.c:811 +#: builtin/grep.c:810 msgid "no pattern given." msgstr "inget mönster angavs." -#: builtin/grep.c:866 +#: builtin/grep.c:865 msgid "--open-files-in-pager only works on the worktree" msgstr "--open-files-in-pager fungerar endast i arbetskatalogen" -#: builtin/grep.c:889 +#: builtin/grep.c:888 msgid "--cached or --untracked cannot be used with --no-index." msgstr "--cached och --untracked kan inte användas med --no-index." -#: builtin/grep.c:894 +#: builtin/grep.c:893 msgid "--no-index or --untracked cannot be used with revs." msgstr "--no-index och --untracked kan inte användas med revisioner." -#: builtin/grep.c:897 +#: builtin/grep.c:896 msgid "--[no-]exclude-standard cannot be used for tracked contents." msgstr "--[no-]exclude-standard kan inte användas för spÃ¥rat innehÃ¥ll." -#: builtin/grep.c:905 +#: builtin/grep.c:904 msgid "both --cached and trees are given." msgstr "bÃ¥de --cached och träd angavs." @@ -5196,54 +5434,54 @@ msgstr "spara filen som den är utan filer" msgid "process file as it were from this path" msgstr "hantera filen som om den kom frÃ¥n sökvägen" -#: builtin/help.c:43 +#: builtin/help.c:41 msgid "print all available commands" msgstr "visa alla tillgängliga kommandon" -#: builtin/help.c:44 +#: builtin/help.c:42 msgid "print list of useful guides" msgstr "lista användbara vägledningar" -#: builtin/help.c:45 +#: builtin/help.c:43 msgid "show man page" msgstr "visa manualsida" -#: builtin/help.c:46 +#: builtin/help.c:44 msgid "show manual in web browser" msgstr "visa manual i webbläsare" -#: builtin/help.c:48 +#: builtin/help.c:46 msgid "show info page" msgstr "visa info-sida" -#: builtin/help.c:54 +#: builtin/help.c:52 msgid "git help [--all] [--guides] [--man|--web|--info] [command]" msgstr "git help [--all] [--guides] [--man|--web|--info] [kommando]" -#: builtin/help.c:66 +#: builtin/help.c:64 #, c-format msgid "unrecognized help format '%s'" msgstr "okänt hjälpformat: %s" -#: builtin/help.c:94 +#: builtin/help.c:92 msgid "Failed to start emacsclient." msgstr "Misslyckades starta emacsclient." -#: builtin/help.c:107 +#: builtin/help.c:105 msgid "Failed to parse emacsclient version." msgstr "Kunde inte tolka emacsclient-version." -#: builtin/help.c:115 +#: builtin/help.c:113 #, c-format msgid "emacsclient version '%d' too old (< 22)." msgstr "emacsclient version \"%d\" för gammal (< 22)." -#: builtin/help.c:133 builtin/help.c:161 builtin/help.c:170 builtin/help.c:178 +#: builtin/help.c:131 builtin/help.c:159 builtin/help.c:168 builtin/help.c:176 #, c-format msgid "failed to exec '%s': %s" msgstr "exec misslyckades för \"%s\": %s" -#: builtin/help.c:218 +#: builtin/help.c:216 #, c-format msgid "" "'%s': path for unsupported man viewer.\n" @@ -5252,7 +5490,7 @@ msgstr "" "\"%s\": sökväg för man-visare som ej stöds.\n" "Använd \"man.<verktyg>.cmd\" istället." -#: builtin/help.c:230 +#: builtin/help.c:228 #, c-format msgid "" "'%s': cmd for supported man viewer.\n" @@ -5261,335 +5499,335 @@ msgstr "" "\"%s\": kommando för man-visare som stöds.\n" "Använd \"man.<verktyg>.path\" istället." -#: builtin/help.c:351 +#: builtin/help.c:349 #, c-format msgid "'%s': unknown man viewer." msgstr "\"%s\": okänd man-visare." -#: builtin/help.c:368 +#: builtin/help.c:366 msgid "no man viewer handled the request" msgstr "ingen man-visare hanterade förfrÃ¥gan" -#: builtin/help.c:376 +#: builtin/help.c:374 msgid "no info viewer handled the request" msgstr "ingen info-visare hanterade förfrÃ¥gan" -#: builtin/help.c:422 +#: builtin/help.c:420 msgid "Defining attributes per path" msgstr "Definierar attribut per sökväg" -#: builtin/help.c:423 +#: builtin/help.c:421 msgid "A Git glossary" msgstr "En Git-ordlista" -#: builtin/help.c:424 +#: builtin/help.c:422 msgid "Specifies intentionally untracked files to ignore" msgstr "Ange avsiktligen ospÃ¥rade filer att ignorera" -#: builtin/help.c:425 +#: builtin/help.c:423 msgid "Defining submodule properties" msgstr "Ange egenskaper för undermoduler" -#: builtin/help.c:426 +#: builtin/help.c:424 msgid "Specifying revisions and ranges for Git" msgstr "Ange versioner och intervall i Git" -#: builtin/help.c:427 +#: builtin/help.c:425 msgid "A tutorial introduction to Git (for version 1.5.1 or newer)" msgstr "Introduktion till Git (för version 1.5.1 och senare)" -#: builtin/help.c:428 +#: builtin/help.c:426 msgid "An overview of recommended workflows with Git" msgstr "Översikt över rekommenderade arbetsflöden med Git" -#: builtin/help.c:440 +#: builtin/help.c:438 msgid "The common Git guides are:\n" msgstr "De vanliga Git-vägledningarna är:\n" -#: builtin/help.c:462 builtin/help.c:478 +#: builtin/help.c:460 builtin/help.c:476 #, c-format msgid "usage: %s%s" msgstr "användning: %s%s" -#: builtin/help.c:494 +#: builtin/help.c:492 #, c-format msgid "`git %s' is aliased to `%s'" msgstr "\"git %s\" är ett alias för \"%s\"" -#: builtin/index-pack.c:182 +#: builtin/index-pack.c:184 #, c-format msgid "object type mismatch at %s" msgstr "objekttyp stämmer inte överens vid %s" -#: builtin/index-pack.c:202 +#: builtin/index-pack.c:204 msgid "object of unexpected type" msgstr "objekt av oväntad typ" -#: builtin/index-pack.c:239 +#: builtin/index-pack.c:244 #, c-format msgid "cannot fill %d byte" msgid_plural "cannot fill %d bytes" msgstr[0] "kan inte fylla %d byte" msgstr[1] "kan inte fylla %d byte" -#: builtin/index-pack.c:249 +#: builtin/index-pack.c:254 msgid "early EOF" msgstr "tidigt filslut" -#: builtin/index-pack.c:250 +#: builtin/index-pack.c:255 msgid "read error on input" msgstr "indataläsfel" -#: builtin/index-pack.c:262 +#: builtin/index-pack.c:267 msgid "used more bytes than were available" msgstr "använde fler byte än tillgängligt" -#: builtin/index-pack.c:269 +#: builtin/index-pack.c:274 msgid "pack too large for current definition of off_t" msgstr "paket för stort för nuvarande definition av off_t" -#: builtin/index-pack.c:285 +#: builtin/index-pack.c:290 #, c-format msgid "unable to create '%s'" msgstr "kunde inte skapa \"%s\"" -#: builtin/index-pack.c:290 +#: builtin/index-pack.c:295 #, c-format msgid "cannot open packfile '%s'" msgstr "kan inte öppna paketfilen \"%s\"" -#: builtin/index-pack.c:304 +#: builtin/index-pack.c:309 msgid "pack signature mismatch" msgstr "paketsignatur stämmer inte överens" -#: builtin/index-pack.c:306 +#: builtin/index-pack.c:311 #, c-format msgid "pack version %<PRIu32> unsupported" msgstr "paketversion %<PRIu32> stöds ej" -#: builtin/index-pack.c:324 +#: builtin/index-pack.c:329 #, c-format msgid "pack has bad object at offset %lu: %s" msgstr "paketet har felaktigt objekt vid index %lu: %s" -#: builtin/index-pack.c:446 +#: builtin/index-pack.c:451 #, c-format msgid "inflate returned %d" msgstr "inflate returnerade %d" -#: builtin/index-pack.c:495 +#: builtin/index-pack.c:500 msgid "offset value overflow for delta base object" msgstr "indexvärdespill för deltabasobjekt" -#: builtin/index-pack.c:503 +#: builtin/index-pack.c:508 msgid "delta base offset is out of bound" msgstr "deltabasindex utanför gränsen" -#: builtin/index-pack.c:511 +#: builtin/index-pack.c:516 #, c-format msgid "unknown object type %d" msgstr "okänd objekttyp %d" -#: builtin/index-pack.c:542 +#: builtin/index-pack.c:547 msgid "cannot pread pack file" msgstr "kan inte utföra \"pread\" pÃ¥ paketfil" -#: builtin/index-pack.c:544 +#: builtin/index-pack.c:549 #, c-format msgid "premature end of pack file, %lu byte missing" msgid_plural "premature end of pack file, %lu bytes missing" msgstr[0] "för tidigt slut pÃ¥ paketfilen, %lu byte saknas" msgstr[1] "för tidigt slut pÃ¥ paketfilen, %lu byte saknas" -#: builtin/index-pack.c:570 +#: builtin/index-pack.c:575 msgid "serious inflate inconsistency" msgstr "allvarlig inflate-inkonsekvens" -#: builtin/index-pack.c:661 builtin/index-pack.c:667 builtin/index-pack.c:690 -#: builtin/index-pack.c:724 builtin/index-pack.c:733 +#: builtin/index-pack.c:666 builtin/index-pack.c:672 builtin/index-pack.c:695 +#: builtin/index-pack.c:729 builtin/index-pack.c:738 #, c-format msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "SHA1-KOLLISION UPPTÄCKT VID %s !" -#: builtin/index-pack.c:664 builtin/pack-objects.c:170 +#: builtin/index-pack.c:669 builtin/pack-objects.c:170 #: builtin/pack-objects.c:262 #, c-format msgid "unable to read %s" msgstr "kunde inte läsa %s" -#: builtin/index-pack.c:730 +#: builtin/index-pack.c:735 #, c-format msgid "cannot read existing object %s" msgstr "kan inte läsa befintligt objekt %s" -#: builtin/index-pack.c:744 +#: builtin/index-pack.c:749 #, c-format msgid "invalid blob object %s" msgstr "ogiltigt blob-objekt %s" -#: builtin/index-pack.c:759 +#: builtin/index-pack.c:763 #, c-format msgid "invalid %s" msgstr "ogiltigt %s" -#: builtin/index-pack.c:761 +#: builtin/index-pack.c:766 msgid "Error in object" msgstr "Fel i objekt" -#: builtin/index-pack.c:763 +#: builtin/index-pack.c:768 #, c-format msgid "Not all child objects of %s are reachable" msgstr "Inte alla barnobjekt för %s kan nÃ¥s" -#: builtin/index-pack.c:833 builtin/index-pack.c:863 +#: builtin/index-pack.c:838 builtin/index-pack.c:868 msgid "failed to apply delta" msgstr "misslyckades tillämpa delta" -#: builtin/index-pack.c:1004 +#: builtin/index-pack.c:1009 msgid "Receiving objects" msgstr "Tar emot objekt" -#: builtin/index-pack.c:1004 +#: builtin/index-pack.c:1009 msgid "Indexing objects" msgstr "Skapar index för objekt" -#: builtin/index-pack.c:1030 +#: builtin/index-pack.c:1035 msgid "pack is corrupted (SHA1 mismatch)" msgstr "paketet är trasigt (SHA1 stämmer inte)" -#: builtin/index-pack.c:1035 +#: builtin/index-pack.c:1040 msgid "cannot fstat packfile" msgstr "kan inte utföra \"fstat\" pÃ¥ paketfil" -#: builtin/index-pack.c:1038 +#: builtin/index-pack.c:1043 msgid "pack has junk at the end" msgstr "paket har skräp i slutet" -#: builtin/index-pack.c:1049 +#: builtin/index-pack.c:1054 msgid "confusion beyond insanity in parse_pack_objects()" msgstr "förvirrad bortom vanvett i parse_pack_objects()" -#: builtin/index-pack.c:1072 +#: builtin/index-pack.c:1077 msgid "Resolving deltas" msgstr "Analyserar delta" -#: builtin/index-pack.c:1082 +#: builtin/index-pack.c:1087 #, c-format msgid "unable to create thread: %s" msgstr "kunde inte skapa trÃ¥d: %s" -#: builtin/index-pack.c:1124 +#: builtin/index-pack.c:1129 msgid "confusion beyond insanity" msgstr "förvirrad bortom vanvett" -#: builtin/index-pack.c:1132 +#: builtin/index-pack.c:1137 #, c-format msgid "completed with %d local objects" msgstr "slutfördes med %d lokala objekt" -#: builtin/index-pack.c:1142 +#: builtin/index-pack.c:1147 #, c-format msgid "Unexpected tail checksum for %s (disk corruption?)" msgstr "Oväntad svanschecksumma för %s (trasig disk?)" -#: builtin/index-pack.c:1146 +#: builtin/index-pack.c:1151 #, c-format msgid "pack has %d unresolved delta" msgid_plural "pack has %d unresolved deltas" msgstr[0] "paketet har %d oanalyserat delta" msgstr[1] "paketet har %d oanalyserade delta" -#: builtin/index-pack.c:1171 +#: builtin/index-pack.c:1176 #, c-format msgid "unable to deflate appended object (%d)" msgstr "kunde inte utföra \"deflate\" pÃ¥ tillagt objekt (%d)" -#: builtin/index-pack.c:1250 +#: builtin/index-pack.c:1255 #, c-format msgid "local object %s is corrupt" msgstr "lokalt objekt %s är trasigt" -#: builtin/index-pack.c:1274 +#: builtin/index-pack.c:1279 msgid "error while closing pack file" msgstr "fel vid stängning av paketfil" -#: builtin/index-pack.c:1287 +#: builtin/index-pack.c:1292 #, c-format msgid "cannot write keep file '%s'" msgstr "kan inte ta skriva \"keep\"-fil \"%s\"" -#: builtin/index-pack.c:1295 +#: builtin/index-pack.c:1300 #, c-format msgid "cannot close written keep file '%s'" msgstr "akn inte stänga skriven \"keep\"-fil \"%s\"" -#: builtin/index-pack.c:1308 +#: builtin/index-pack.c:1313 msgid "cannot store pack file" msgstr "kan inte spara paketfil" -#: builtin/index-pack.c:1319 +#: builtin/index-pack.c:1324 msgid "cannot store index file" msgstr "kan inte spara indexfil" -#: builtin/index-pack.c:1352 +#: builtin/index-pack.c:1357 #, c-format msgid "bad pack.indexversion=%<PRIu32>" msgstr "felaktig pack.indexversion=%<PRIu32>" -#: builtin/index-pack.c:1358 +#: builtin/index-pack.c:1363 #, c-format msgid "invalid number of threads specified (%d)" msgstr "felaktigt antal trÃ¥dar angivet (%d)" -#: builtin/index-pack.c:1362 builtin/index-pack.c:1535 +#: builtin/index-pack.c:1367 builtin/index-pack.c:1545 #, c-format msgid "no threads support, ignoring %s" msgstr "trÃ¥dstöd saknas, ignorerar %s" -#: builtin/index-pack.c:1420 +#: builtin/index-pack.c:1425 #, c-format msgid "Cannot open existing pack file '%s'" msgstr "Kan inte öppna befintlig paketfil \"%s\"" -#: builtin/index-pack.c:1422 +#: builtin/index-pack.c:1427 #, c-format msgid "Cannot open existing pack idx file for '%s'" msgstr "Kan inte öppna befintligt paket-idx-fil för \"%s\"" -#: builtin/index-pack.c:1469 +#: builtin/index-pack.c:1474 #, c-format msgid "non delta: %d object" msgid_plural "non delta: %d objects" msgstr[0] "icke-delta: %d objekt" msgstr[1] "icke-delta: %d objekt" -#: builtin/index-pack.c:1476 +#: builtin/index-pack.c:1481 #, c-format msgid "chain length = %d: %lu object" msgid_plural "chain length = %d: %lu objects" msgstr[0] "kedjelängd = %d: %lu objekt" msgstr[1] "kedjelängd = %d: %lu objekt" -#: builtin/index-pack.c:1503 +#: builtin/index-pack.c:1509 msgid "Cannot come back to cwd" msgstr "Kan inte gÃ¥ tillbaka till arbetskatalogen (cwd)" -#: builtin/index-pack.c:1547 builtin/index-pack.c:1550 -#: builtin/index-pack.c:1562 builtin/index-pack.c:1566 +#: builtin/index-pack.c:1557 builtin/index-pack.c:1560 +#: builtin/index-pack.c:1572 builtin/index-pack.c:1576 #, c-format msgid "bad %s" msgstr "felaktig %s" -#: builtin/index-pack.c:1580 +#: builtin/index-pack.c:1590 msgid "--fix-thin cannot be used without --stdin" msgstr "--fix-thin kan inte användas med --stdin" -#: builtin/index-pack.c:1584 builtin/index-pack.c:1594 +#: builtin/index-pack.c:1594 builtin/index-pack.c:1604 #, c-format msgid "packfile name '%s' does not end with '.pack'" msgstr "paketfilnamnet \"%s\" slutar inte med \".pack\"" -#: builtin/index-pack.c:1603 +#: builtin/index-pack.c:1613 msgid "--verify with no packfile name given" msgstr "--verify angavs utan paketfilnamn" @@ -5725,7 +5963,7 @@ msgstr "behörigheter" msgid "specify that the git repository is to be shared amongst several users" msgstr "ange att git-arkivet skall delas bland flera användare" -#: builtin/init-db.c:493 builtin/prune-packed.c:77 +#: builtin/init-db.c:493 builtin/prune-packed.c:75 msgid "be quiet" msgstr "var tyst" @@ -5757,340 +5995,353 @@ msgstr "Kan inte komma Ã¥t aktuell arbetskatalog" msgid "Cannot access work tree '%s'" msgstr "Kan inte komma Ã¥t arbetskatalogen \"%s\"" -#: builtin/log.c:40 +#: builtin/log.c:41 msgid "git log [<options>] [<revision range>] [[--] <path>...]\n" msgstr "git log [<flaggor>] [<versionsintervall>] [[--] <sökväg>...]\n" -#: builtin/log.c:41 +#: builtin/log.c:42 msgid " or: git show [options] <object>..." msgstr " eller: git show [flaggor] <objekt>..." -#: builtin/log.c:103 +#: builtin/log.c:124 msgid "suppress diff output" msgstr "undertryck diff-utdata" -#: builtin/log.c:104 +#: builtin/log.c:125 msgid "show source" msgstr "visa källkod" -#: builtin/log.c:105 +#: builtin/log.c:126 msgid "Use mail map file" msgstr "Använd e-postmappningsfil" -#: builtin/log.c:106 +#: builtin/log.c:127 msgid "decorate options" msgstr "dekoreringsflaggor" -#: builtin/log.c:199 +#: builtin/log.c:230 #, c-format msgid "Final output: %d %s\n" msgstr "Slututdata: %d %s\n" -#: builtin/log.c:422 builtin/log.c:514 +#: builtin/log.c:453 builtin/log.c:545 #, c-format msgid "Could not read object %s" msgstr "Kunde inte läsa objektet %s" -#: builtin/log.c:538 +#: builtin/log.c:569 #, c-format msgid "Unknown type: %d" msgstr "Okänd typ: %d" -#: builtin/log.c:638 +#: builtin/log.c:669 msgid "format.headers without value" msgstr "format.headers utan värde" -#: builtin/log.c:720 +#: builtin/log.c:751 msgid "name of output directory is too long" msgstr "namnet pÃ¥ utdatakatalogen är för lÃ¥ngt" -#: builtin/log.c:736 +#: builtin/log.c:767 #, c-format msgid "Cannot open patch file %s" msgstr "Kan inte öppna patchfilen %s" -#: builtin/log.c:750 +#: builtin/log.c:781 msgid "Need exactly one range." msgstr "Behöver precis ett intervall." -#: builtin/log.c:758 +#: builtin/log.c:789 msgid "Not a range." msgstr "Inte ett intervall." -#: builtin/log.c:860 +#: builtin/log.c:891 msgid "Cover letter needs email format" msgstr "Omslagsbrevet behöver e-postformat" -#: builtin/log.c:936 +#: builtin/log.c:967 #, c-format msgid "insane in-reply-to: %s" msgstr "tokigt in-reply-to: %s" -#: builtin/log.c:964 +#: builtin/log.c:995 msgid "git format-patch [options] [<since> | <revision range>]" msgstr "git format-patch [flaggor] [<sedan> | <revisionsintervall>]" -#: builtin/log.c:1009 +#: builtin/log.c:1040 msgid "Two output directories?" msgstr "TvÃ¥ utdatakataloger?" -#: builtin/log.c:1108 +#: builtin/log.c:1155 msgid "use [PATCH n/m] even with a single patch" msgstr "använd [PATCH n/m] även för en ensam patch" -#: builtin/log.c:1111 +#: builtin/log.c:1158 msgid "use [PATCH] even with multiple patches" msgstr "använd [PATCH] även för flera patchar" -#: builtin/log.c:1115 +#: builtin/log.c:1162 msgid "print patches to standard out" msgstr "skriv patcharna pÃ¥ stnadard ut" -#: builtin/log.c:1117 +#: builtin/log.c:1164 msgid "generate a cover letter" msgstr "generera ett följebrev" -#: builtin/log.c:1119 +#: builtin/log.c:1166 msgid "use simple number sequence for output file names" msgstr "använd enkel nummersekvens för utdatafilnamn" -#: builtin/log.c:1120 +#: builtin/log.c:1167 msgid "sfx" msgstr "sfx" -#: builtin/log.c:1121 +#: builtin/log.c:1168 msgid "use <sfx> instead of '.patch'" msgstr "använd <sfx> istället för \".patch\"" -#: builtin/log.c:1123 +#: builtin/log.c:1170 msgid "start numbering patches at <n> instead of 1" msgstr "börja numrera patchar pÃ¥ <n> istället för 1" -#: builtin/log.c:1125 +#: builtin/log.c:1172 msgid "mark the series as Nth re-roll" msgstr "markera serien som N:te försök" -#: builtin/log.c:1127 +#: builtin/log.c:1174 msgid "Use [<prefix>] instead of [PATCH]" msgstr "Använd [<prefix>] istället för [PATCH]" -#: builtin/log.c:1130 +#: builtin/log.c:1177 msgid "store resulting files in <dir>" msgstr "spara filerna i <katalog>" -#: builtin/log.c:1133 +#: builtin/log.c:1180 msgid "don't strip/add [PATCH]" msgstr "ta inte bort eller lägg till [PATCH]" -#: builtin/log.c:1136 +#: builtin/log.c:1183 msgid "don't output binary diffs" msgstr "skriv inte binära diffar" -#: builtin/log.c:1138 +#: builtin/log.c:1185 msgid "don't include a patch matching a commit upstream" msgstr "ta inte med patchar som motsvarar en uppströmsincheckning" -#: builtin/log.c:1140 +#: builtin/log.c:1187 msgid "show patch format instead of default (patch + stat)" msgstr "visa patchformat istället för standard (patch + stat)" -#: builtin/log.c:1142 +#: builtin/log.c:1189 msgid "Messaging" msgstr "E-post" -#: builtin/log.c:1143 +#: builtin/log.c:1190 msgid "header" msgstr "huvud" -#: builtin/log.c:1144 +#: builtin/log.c:1191 msgid "add email header" msgstr "lägg till e-posthuvud" -#: builtin/log.c:1145 builtin/log.c:1147 +#: builtin/log.c:1192 builtin/log.c:1194 msgid "email" msgstr "epost" -#: builtin/log.c:1145 +#: builtin/log.c:1192 msgid "add To: header" msgstr "Lägg till mottagarhuvud (\"To:\")" -#: builtin/log.c:1147 +#: builtin/log.c:1194 msgid "add Cc: header" msgstr "Lägg till kopiehuvud (\"Cc:\")" -#: builtin/log.c:1149 +#: builtin/log.c:1196 +msgid "ident" +msgstr "ident" + +#: builtin/log.c:1197 +msgid "set From address to <ident> (or committer ident if absent)" +msgstr "sätt FrÃ¥n-adress till <ident> (eller incheckare om ident saknas)" + +#: builtin/log.c:1199 msgid "message-id" msgstr "meddelande-id" -#: builtin/log.c:1150 +#: builtin/log.c:1200 msgid "make first mail a reply to <message-id>" msgstr "Gör det första brevet ett svar till <meddelande-id>" -#: builtin/log.c:1151 builtin/log.c:1154 +#: builtin/log.c:1201 builtin/log.c:1204 msgid "boundary" msgstr "gräns" -#: builtin/log.c:1152 +#: builtin/log.c:1202 msgid "attach the patch" msgstr "bifoga patchen" -#: builtin/log.c:1155 +#: builtin/log.c:1205 msgid "inline the patch" msgstr "gör patchen ett inline-objekt" -#: builtin/log.c:1159 +#: builtin/log.c:1209 msgid "enable message threading, styles: shallow, deep" msgstr "aktivera brevtrÃ¥dning, typer: shallow, deep" -#: builtin/log.c:1161 +#: builtin/log.c:1211 msgid "signature" msgstr "signatur" -#: builtin/log.c:1162 +#: builtin/log.c:1212 msgid "add a signature" msgstr "lägg till signatur" -#: builtin/log.c:1164 +#: builtin/log.c:1214 msgid "don't print the patch filenames" msgstr "visa inte filnamn för patchar" -#: builtin/log.c:1248 +#: builtin/log.c:1288 +#, c-format +msgid "invalid ident line: %s" +msgstr "ogiltig ident-rad: %s" + +#: builtin/log.c:1303 msgid "-n and -k are mutually exclusive." msgstr "-n och -k kan inte användas samtidigt." -#: builtin/log.c:1250 +#: builtin/log.c:1305 msgid "--subject-prefix and -k are mutually exclusive." msgstr "--subject-prefix och -k kan inte användas samtidigt." -#: builtin/log.c:1258 +#: builtin/log.c:1313 msgid "--name-only does not make sense" msgstr "kan inte använda --name-only" -#: builtin/log.c:1260 +#: builtin/log.c:1315 msgid "--name-status does not make sense" msgstr "kan inte använda --name-status" -#: builtin/log.c:1262 +#: builtin/log.c:1317 msgid "--check does not make sense" msgstr "kan inte använda --check" -#: builtin/log.c:1285 +#: builtin/log.c:1340 msgid "standard output, or directory, which one?" msgstr "standard ut, eller katalog, vilken skall det vara?" -#: builtin/log.c:1287 +#: builtin/log.c:1342 #, c-format msgid "Could not create directory '%s'" msgstr "Kunde inte skapa katalogen \"%s\"" -#: builtin/log.c:1435 +#: builtin/log.c:1490 msgid "Failed to create output files" msgstr "Misslyckades skapa utdatafiler" -#: builtin/log.c:1484 +#: builtin/log.c:1539 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]" msgstr "git cherry [-v] [<uppström> [<huvud> [<gräns>]]]" -#: builtin/log.c:1539 +#: builtin/log.c:1594 #, c-format msgid "" "Could not find a tracked remote branch, please specify <upstream> manually.\n" msgstr "Kunde inte hitta en spÃ¥rad fjärrgren, ange <uppström> manuellt.\n" -#: builtin/log.c:1552 builtin/log.c:1554 builtin/log.c:1566 +#: builtin/log.c:1607 builtin/log.c:1609 builtin/log.c:1621 #, c-format msgid "Unknown commit %s" msgstr "Okänd incheckning %s" -#: builtin/ls-files.c:402 +#: builtin/ls-files.c:408 msgid "git ls-files [options] [<file>...]" msgstr "git ls-files [flaggor] [<fil>...]" -#: builtin/ls-files.c:459 +#: builtin/ls-files.c:465 msgid "identify the file status with tags" msgstr "identifiera filstatus med taggar" -#: builtin/ls-files.c:461 +#: builtin/ls-files.c:467 msgid "use lowercase letters for 'assume unchanged' files" msgstr "använd smÃ¥ bokstäver för \"anta oförändrade\"-filer" -#: builtin/ls-files.c:463 +#: builtin/ls-files.c:469 msgid "show cached files in the output (default)" msgstr "visa cachade filer i utdata (standard)" -#: builtin/ls-files.c:465 +#: builtin/ls-files.c:471 msgid "show deleted files in the output" msgstr "visa borttagna filer i utdata" -#: builtin/ls-files.c:467 +#: builtin/ls-files.c:473 msgid "show modified files in the output" msgstr "visa modifierade filer i utdata" -#: builtin/ls-files.c:469 +#: builtin/ls-files.c:475 msgid "show other files in the output" msgstr "visa andra filer i utdata" -#: builtin/ls-files.c:471 +#: builtin/ls-files.c:477 msgid "show ignored files in the output" msgstr "visa ignorerade filer i utdata" -#: builtin/ls-files.c:474 +#: builtin/ls-files.c:480 msgid "show staged contents' object name in the output" msgstr "visa köat innehÃ¥lls objektnamn i utdata" -#: builtin/ls-files.c:476 +#: builtin/ls-files.c:482 msgid "show files on the filesystem that need to be removed" msgstr "visa filer i filsystemet som behöver tas bort" -#: builtin/ls-files.c:478 +#: builtin/ls-files.c:484 msgid "show 'other' directories' name only" msgstr "visa endast namn för \"andra\" kataloger" -#: builtin/ls-files.c:481 +#: builtin/ls-files.c:487 msgid "don't show empty directories" msgstr "visa inte tomma kataloger" -#: builtin/ls-files.c:484 +#: builtin/ls-files.c:490 msgid "show unmerged files in the output" msgstr "visa ej sammanslagna filer i utdata" -#: builtin/ls-files.c:486 +#: builtin/ls-files.c:492 msgid "show resolve-undo information" msgstr "visa \"resolve-undo\"-information" -#: builtin/ls-files.c:488 +#: builtin/ls-files.c:494 msgid "skip files matching pattern" msgstr "hoppa över filer som motsvarar mönster" -#: builtin/ls-files.c:491 +#: builtin/ls-files.c:497 msgid "exclude patterns are read from <file>" msgstr "exkludera mönster som läses frÃ¥n <fil>" -#: builtin/ls-files.c:494 +#: builtin/ls-files.c:500 msgid "read additional per-directory exclude patterns in <file>" msgstr "läs ytterligare per-katalog-exkluderingsmönster frÃ¥n <fil>" -#: builtin/ls-files.c:496 +#: builtin/ls-files.c:502 msgid "add the standard git exclusions" msgstr "lägg till git:s standardexkluderingar" -#: builtin/ls-files.c:499 +#: builtin/ls-files.c:505 msgid "make the output relative to the project top directory" msgstr "gör utdata relativ till projektets toppkatalog" -#: builtin/ls-files.c:502 +#: builtin/ls-files.c:508 msgid "if any <file> is not in the index, treat this as an error" msgstr "om en <fil> inte är indexet, betrakta det som ett fel" -#: builtin/ls-files.c:503 +#: builtin/ls-files.c:509 msgid "tree-ish" msgstr "träd-igt" -#: builtin/ls-files.c:504 +#: builtin/ls-files.c:510 msgid "pretend that paths removed since <tree-ish> are still present" msgstr "lÃ¥tsas att sökvägar borttagna sedan <träd-igt> fortfarande finns" -#: builtin/ls-files.c:506 +#: builtin/ls-files.c:512 msgid "show debugging data" msgstr "visa felsökningsutdata" @@ -6142,170 +6393,170 @@ msgstr "git merge [flaggor] <meddelande> HEAD <incheckning>" msgid "git merge --abort" msgstr "git merge --abort" -#: builtin/merge.c:90 +#: builtin/merge.c:98 msgid "switch `m' requires a value" msgstr "flaggan \"m\" behöver ett värde" -#: builtin/merge.c:127 +#: builtin/merge.c:135 #, c-format msgid "Could not find merge strategy '%s'.\n" msgstr "Kunde inte hitta sammanslagningsstrategin \"%s\".\n" -#: builtin/merge.c:128 +#: builtin/merge.c:136 #, c-format msgid "Available strategies are:" msgstr "Tillgängliga strategier är:" -#: builtin/merge.c:133 +#: builtin/merge.c:141 #, c-format msgid "Available custom strategies are:" msgstr "Tillgängliga skräddarsydda strategier är:" -#: builtin/merge.c:183 +#: builtin/merge.c:198 msgid "do not show a diffstat at the end of the merge" msgstr "visa inte en diffstat när sammanslagningen är färdig" -#: builtin/merge.c:186 +#: builtin/merge.c:201 msgid "show a diffstat at the end of the merge" msgstr "visa en diffstat när sammanslagningen är färdig" -#: builtin/merge.c:187 +#: builtin/merge.c:202 msgid "(synonym to --stat)" msgstr "(synonym till --stat)" -#: builtin/merge.c:189 +#: builtin/merge.c:204 msgid "add (at most <n>) entries from shortlog to merge commit message" msgstr "" "lägg till (som mest <n>) poster frÃ¥n shortlog till incheckningsmeddelandet" -#: builtin/merge.c:192 +#: builtin/merge.c:207 msgid "create a single commit instead of doing a merge" msgstr "skapa en ensam incheckning istället för en sammanslagning" -#: builtin/merge.c:194 +#: builtin/merge.c:209 msgid "perform a commit if the merge succeeds (default)" msgstr "utför en incheckning om sammanslagningen lyckades (standard)" -#: builtin/merge.c:196 +#: builtin/merge.c:211 msgid "edit message before committing" msgstr "redigera meddelande innan incheckning" -#: builtin/merge.c:198 +#: builtin/merge.c:212 msgid "allow fast-forward (default)" msgstr "tillÃ¥t snabbspolning (standard)" -#: builtin/merge.c:200 +#: builtin/merge.c:214 msgid "abort if fast-forward is not possible" msgstr "avbryt om snabbspolning inte är möjlig" -#: builtin/merge.c:203 +#: builtin/merge.c:218 msgid "Verify that the named commit has a valid GPG signature" msgstr "Bekräfta att den namngivna incheckningen har en giltig GPG-signatur" -#: builtin/merge.c:204 builtin/notes.c:866 builtin/revert.c:112 +#: builtin/merge.c:219 builtin/notes.c:738 builtin/revert.c:114 msgid "strategy" msgstr "strategi" -#: builtin/merge.c:205 +#: builtin/merge.c:220 msgid "merge strategy to use" msgstr "sammanslagninsstrategi att använda" -#: builtin/merge.c:206 +#: builtin/merge.c:221 msgid "option=value" msgstr "alternativ=värde" -#: builtin/merge.c:207 +#: builtin/merge.c:222 msgid "option for selected merge strategy" msgstr "alternativ för vald sammanslagningsstrategi" -#: builtin/merge.c:209 +#: builtin/merge.c:224 msgid "merge commit message (for a non-fast-forward merge)" msgstr "incheckningsmeddelande för (icke snabbspolande) sammanslagning" -#: builtin/merge.c:213 +#: builtin/merge.c:228 msgid "abort the current in-progress merge" msgstr "avbryt den pÃ¥gÃ¥ende sammanslagningen" -#: builtin/merge.c:242 +#: builtin/merge.c:257 msgid "could not run stash." msgstr "kunde köra stash." -#: builtin/merge.c:247 +#: builtin/merge.c:262 msgid "stash failed" msgstr "stash misslyckades" -#: builtin/merge.c:252 +#: builtin/merge.c:267 #, c-format msgid "not a valid object: %s" msgstr "inte ett giltigt objekt: %s" -#: builtin/merge.c:271 builtin/merge.c:288 +#: builtin/merge.c:286 builtin/merge.c:303 msgid "read-tree failed" msgstr "read-tree misslyckades" -#: builtin/merge.c:318 +#: builtin/merge.c:333 msgid " (nothing to squash)" msgstr " (inget att platta till)" -#: builtin/merge.c:331 +#: builtin/merge.c:346 #, c-format msgid "Squash commit -- not updating HEAD\n" msgstr "Tillplattningsincheckning -- uppdaterar inte HEAD\n" -#: builtin/merge.c:363 +#: builtin/merge.c:378 msgid "Writing SQUASH_MSG" msgstr "Skriver SQUASH_MSG" -#: builtin/merge.c:365 +#: builtin/merge.c:380 msgid "Finishing SQUASH_MSG" msgstr "Avslutar SQUASH_MSG" -#: builtin/merge.c:388 +#: builtin/merge.c:403 #, c-format msgid "No merge message -- not updating HEAD\n" msgstr "Inget sammanslagningsmeddelande -- uppdaterar inte HEAD\n" -#: builtin/merge.c:438 +#: builtin/merge.c:453 #, c-format msgid "'%s' does not point to a commit" msgstr "\"%s\" verkar inte peka pÃ¥ en incheckning" -#: builtin/merge.c:550 +#: builtin/merge.c:565 #, c-format msgid "Bad branch.%s.mergeoptions string: %s" msgstr "Felaktig branch.%s.mergeoptions-sträng: %s" -#: builtin/merge.c:643 +#: builtin/merge.c:657 msgid "git write-tree failed to write a tree" msgstr "git write-tree misslyckades skriva ett träd" -#: builtin/merge.c:671 +#: builtin/merge.c:685 msgid "Not handling anything other than two heads merge." msgstr "Hanterar inte nÃ¥got annat än en sammanslagning av tvÃ¥ huvuden." -#: builtin/merge.c:685 +#: builtin/merge.c:699 #, c-format msgid "Unknown option for merge-recursive: -X%s" msgstr "Felaktig flagga för merge-recursive: -X%s" -#: builtin/merge.c:699 +#: builtin/merge.c:713 #, c-format msgid "unable to write %s" msgstr "kunde inte skriva %s" -#: builtin/merge.c:788 +#: builtin/merge.c:802 #, c-format msgid "Could not read from '%s'" msgstr "Kunde inte läsa frÃ¥n \"%s\"" -#: builtin/merge.c:797 +#: builtin/merge.c:811 #, c-format msgid "Not committing merge; use 'git commit' to complete the merge.\n" msgstr "" "Checkar inte in sammanslagningen; använd \"git commit\" för att slutföra " "den.\n" -#: builtin/merge.c:803 +#: builtin/merge.c:817 #, c-format msgid "" "Please enter a commit message to explain why this merge is necessary,\n" @@ -6321,53 +6572,48 @@ msgstr "" "Rader som inleds med \"%c\" kommer ignoreras, och ett tomt meddelande\n" "avbryter incheckningen.\n" -#: builtin/merge.c:827 +#: builtin/merge.c:841 msgid "Empty commit message." msgstr "Tomt incheckningsmeddelande." -#: builtin/merge.c:839 +#: builtin/merge.c:853 #, c-format msgid "Wonderful.\n" msgstr "Underbart.\n" -#: builtin/merge.c:904 +#: builtin/merge.c:918 #, c-format msgid "Automatic merge failed; fix conflicts and then commit the result.\n" msgstr "" "Kunde inte slÃ¥ ihop automatiskt; fixa konflikter och checka in resultatet.\n" -#: builtin/merge.c:920 +#: builtin/merge.c:934 #, c-format msgid "'%s' is not a commit" msgstr "\"%s\" är inte en incheckning" -#: builtin/merge.c:961 +#: builtin/merge.c:975 msgid "No current branch." msgstr "Inte pÃ¥ nÃ¥gon gren." -#: builtin/merge.c:963 +#: builtin/merge.c:977 msgid "No remote for the current branch." msgstr "Ingen fjärr för aktuell gren." -#: builtin/merge.c:965 +#: builtin/merge.c:979 msgid "No default upstream defined for the current branch." msgstr "Ingen standarduppström angiven för aktuell gren." -#: builtin/merge.c:970 +#: builtin/merge.c:984 #, c-format -msgid "No remote tracking branch for %s from %s" +msgid "No remote-tracking branch for %s from %s" msgstr "Ingen fjärrspÃ¥rande gren för %s frÃ¥n %s" -#: builtin/merge.c:1057 builtin/merge.c:1214 -#, c-format -msgid "%s - not something we can merge" -msgstr "%s - inte nÃ¥got vi kan slÃ¥ ihop" - -#: builtin/merge.c:1125 +#: builtin/merge.c:1140 msgid "There is no merge to abort (MERGE_HEAD missing)." msgstr "Det finns ingen sammanslagning att avbryta (MERGE_HEAD saknas)." -#: builtin/merge.c:1141 git-pull.sh:31 +#: builtin/merge.c:1156 git-pull.sh:31 msgid "" "You have not concluded your merge (MERGE_HEAD exists).\n" "Please, commit your changes before you can merge." @@ -6375,11 +6621,11 @@ msgstr "" "Du har inte avslutat sammanslagningen (MERGE_HEAD finns).\n" "Checka in dina ändringar innan du kan slÃ¥ ihop." -#: builtin/merge.c:1144 git-pull.sh:34 +#: builtin/merge.c:1159 git-pull.sh:34 msgid "You have not concluded your merge (MERGE_HEAD exists)." msgstr "Du har inte avslutat sammanslagningen (MERGE_HEAD finns)." -#: builtin/merge.c:1148 +#: builtin/merge.c:1163 msgid "" "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" "Please, commit your changes before you can merge." @@ -6387,102 +6633,103 @@ msgstr "" "Du har inte avslutat din \"cherry-pick\" (CHERRY_PICK_HEAD finns).\n" "Checka in dina ändringar innan du kan slÃ¥ ihop." -#: builtin/merge.c:1151 +#: builtin/merge.c:1166 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." msgstr "Du har inte avslutat din \"cherry-pick\" (CHERRY_PICK_HEAD finns)." -#: builtin/merge.c:1160 +#: builtin/merge.c:1175 msgid "You cannot combine --squash with --no-ff." msgstr "Du kan inte kombinera --squash med --no-ff." -#: builtin/merge.c:1165 -msgid "You cannot combine --no-ff with --ff-only." -msgstr "Du kan inte kombinera --no-ff med --ff-only." - -#: builtin/merge.c:1172 +#: builtin/merge.c:1184 msgid "No commit specified and merge.defaultToUpstream not set." msgstr "Ingen incheckning angiven och merge.defaultToUpstream är ej satt." -#: builtin/merge.c:1204 +#: builtin/merge.c:1216 msgid "Can merge only exactly one commit into empty head" msgstr "Kan endast slÃ¥ ihop en enda incheckning i ett tomt huvud." -#: builtin/merge.c:1207 +#: builtin/merge.c:1219 msgid "Squash commit into empty head not supported yet" msgstr "Stöder inte en tillplattningsincheckning pÃ¥ ett tomt huvud ännu" -#: builtin/merge.c:1209 +#: builtin/merge.c:1221 msgid "Non-fast-forward commit does not make sense into an empty head" msgstr "Icke-snabbspolad incheckning kan inte användas med ett tomt huvud" -#: builtin/merge.c:1265 +#: builtin/merge.c:1226 +#, c-format +msgid "%s - not something we can merge" +msgstr "%s - inte nÃ¥got vi kan slÃ¥ ihop" + +#: builtin/merge.c:1277 #, c-format msgid "Commit %s has an untrusted GPG signature, allegedly by %s." msgstr "" "Incheckningen %s har en obetrodd GPG-signatur som pÃ¥stÃ¥s vara gjord av %s." -#: builtin/merge.c:1268 +#: builtin/merge.c:1280 #, c-format msgid "Commit %s has a bad GPG signature allegedly by %s." msgstr "" "Incheckningen %s har en felaktig GPG-signatur som pÃ¥stÃ¥s vara gjord av %s." #. 'N' -#: builtin/merge.c:1271 +#: builtin/merge.c:1283 #, c-format msgid "Commit %s does not have a GPG signature." msgstr "Incheckning %s har inte nÃ¥gon GPG-signatur." -#: builtin/merge.c:1274 +#: builtin/merge.c:1286 #, c-format msgid "Commit %s has a good GPG signature by %s\n" msgstr "Incheckningen %s har en korrekt GPG-signatur av %s\n" -#: builtin/merge.c:1358 +#: builtin/merge.c:1370 #, c-format msgid "Updating %s..%s\n" msgstr "Uppdaterar %s..%s\n" -#: builtin/merge.c:1397 +#: builtin/merge.c:1409 #, c-format msgid "Trying really trivial in-index merge...\n" msgstr "Försöker riktigt enkel sammanslagning i indexet...\n" -#: builtin/merge.c:1404 +#: builtin/merge.c:1416 #, c-format msgid "Nope.\n" msgstr "Nej.\n" -#: builtin/merge.c:1436 +#: builtin/merge.c:1448 msgid "Not possible to fast-forward, aborting." msgstr "Kan inte snabbspola, avbryter." -#: builtin/merge.c:1459 builtin/merge.c:1538 +#: builtin/merge.c:1471 builtin/merge.c:1550 #, c-format msgid "Rewinding the tree to pristine...\n" msgstr "Ã…terspolar trädet till orört...\n" -#: builtin/merge.c:1463 +#: builtin/merge.c:1475 #, c-format msgid "Trying merge strategy %s...\n" msgstr "Försöker sammanslagninsstrategin %s...\n" -#: builtin/merge.c:1529 +#: builtin/merge.c:1541 #, c-format msgid "No merge strategy handled the merge.\n" msgstr "Ingen sammanslagningsstrategi hanterade sammanslagningen.\n" -#: builtin/merge.c:1531 +#: builtin/merge.c:1543 #, c-format msgid "Merge with strategy %s failed.\n" msgstr "Sammanslagning med strategin %s misslyckades.\n" -#: builtin/merge.c:1540 +#: builtin/merge.c:1552 #, c-format msgid "Using the %s to prepare resolving by hand.\n" msgstr "Använder %s för att förbereda lösning för hand.\n" -#: builtin/merge.c:1552 +#: builtin/merge.c:1564 #, c-format msgid "Automatic merge went well; stopped before committing as requested\n" msgstr "" @@ -6649,47 +6896,51 @@ msgstr "Byter namn pÃ¥ %s till %s\n" msgid "renaming '%s' failed" msgstr "misslyckades byta namn pÃ¥ \"%s\"" -#: builtin/name-rev.c:175 +#: builtin/name-rev.c:259 msgid "git name-rev [options] <commit>..." msgstr "git name-rev [flaggor] <incheckning>..." -#: builtin/name-rev.c:176 +#: builtin/name-rev.c:260 msgid "git name-rev [options] --all" msgstr "git name-rev [flaggor] --all" -#: builtin/name-rev.c:177 +#: builtin/name-rev.c:261 msgid "git name-rev [options] --stdin" msgstr "git name-rev [flaggor] --stdin" -#: builtin/name-rev.c:229 +#: builtin/name-rev.c:313 msgid "print only names (no SHA-1)" msgstr "skriv endast namn (ingen SHA-1)" -#: builtin/name-rev.c:230 +#: builtin/name-rev.c:314 msgid "only use tags to name the commits" msgstr "använd endast taggar för att namnge incheckningar" -#: builtin/name-rev.c:232 +#: builtin/name-rev.c:316 msgid "only use refs matching <pattern>" msgstr "använd endast referenser som motsvarar <mönster>" -#: builtin/name-rev.c:234 +#: builtin/name-rev.c:318 msgid "list all commits reachable from all refs" msgstr "lista alla incheckningar som kan nÃ¥s alla referenser" -#: builtin/name-rev.c:235 +#: builtin/name-rev.c:319 msgid "read from stdin" msgstr "läs frÃ¥n standard in" -#: builtin/name-rev.c:236 +#: builtin/name-rev.c:320 msgid "allow to print `undefined` names" msgstr "tillÃ¥t att skriva \"odefinierade\" namn" -#: builtin/notes.c:26 +#: builtin/name-rev.c:326 +msgid "dereference tags in the input (internal use)" +msgstr "avreferera taggar i indata (används internt)" + +#: builtin/notes.c:24 msgid "git notes [--ref <notes_ref>] [list [<object>]]" msgstr "git notes [--ref <anteckningsref>] [list [<objekt>]]" -#: builtin/notes.c:27 +#: builtin/notes.c:25 msgid "" "git notes [--ref <notes_ref>] add [-f] [-m <msg> | -F <file> | (-c | -C) " "<object>] [<object>]" @@ -6697,12 +6948,12 @@ msgstr "" "git notes [--ref <anteckningsref>] add [-f] [-m <medd> | -F <fil> | (-c | -" "C) <objekt>] [<objekt>]" -#: builtin/notes.c:28 +#: builtin/notes.c:26 msgid "git notes [--ref <notes_ref>] copy [-f] <from-object> <to-object>" msgstr "" "git notes [--ref <anteckningsref>] copy [-f] <frÃ¥n-objekt> <till-objekt>" -#: builtin/notes.c:29 +#: builtin/notes.c:27 msgid "" "git notes [--ref <notes_ref>] append [-m <msg> | -F <file> | (-c | -C) " "<object>] [<object>]" @@ -6710,221 +6961,200 @@ msgstr "" "git notes [--ref <anteckningsref>] append [-m <medd> | -F <fil> | (-c | -C) " "<objekt>] [<objekt>]" -#: builtin/notes.c:30 +#: builtin/notes.c:28 msgid "git notes [--ref <notes_ref>] edit [<object>]" msgstr "git notes [--ref <anteckningsref>] edit [<objekt>]" -#: builtin/notes.c:31 +#: builtin/notes.c:29 msgid "git notes [--ref <notes_ref>] show [<object>]" msgstr "git notes [--ref <anteckningsref>] show [<objekt>]" -#: builtin/notes.c:32 +#: builtin/notes.c:30 msgid "" "git notes [--ref <notes_ref>] merge [-v | -q] [-s <strategy> ] <notes_ref>" msgstr "" "git notes [--ref <anteckningsref>] merge [-v | -q] [-s <strategi> ] " "<anteckningsref>" -#: builtin/notes.c:33 +#: builtin/notes.c:31 msgid "git notes merge --commit [-v | -q]" msgstr "git notes merge --commit [-v | -q]" -#: builtin/notes.c:34 +#: builtin/notes.c:32 msgid "git notes merge --abort [-v | -q]" msgstr "git notes merge --abort [-v | -q]" -#: builtin/notes.c:35 +#: builtin/notes.c:33 msgid "git notes [--ref <notes_ref>] remove [<object>...]" msgstr "git notes [--ref <anteckningsref>] remove [<objekt>...]" -#: builtin/notes.c:36 +#: builtin/notes.c:34 msgid "git notes [--ref <notes_ref>] prune [-n | -v]" msgstr "git notes [--ref <anteckningsref>] prune [-n | -v]" -#: builtin/notes.c:37 +#: builtin/notes.c:35 msgid "git notes [--ref <notes_ref>] get-ref" msgstr "git notes [--ref <anteckningsref>] get-ref" -#: builtin/notes.c:42 +#: builtin/notes.c:40 msgid "git notes [list [<object>]]" msgstr "git notes [list [<objekt>]]" -#: builtin/notes.c:47 +#: builtin/notes.c:45 msgid "git notes add [<options>] [<object>]" msgstr "git notes add [<flaggor>] [<objekt>]" -#: builtin/notes.c:52 +#: builtin/notes.c:50 msgid "git notes copy [<options>] <from-object> <to-object>" msgstr "git notes copy [<flaggor>] <frÃ¥n-objekt> <till-objekt>" -#: builtin/notes.c:53 +#: builtin/notes.c:51 msgid "git notes copy --stdin [<from-object> <to-object>]..." msgstr "git notes copy --stdin [<frÃ¥n-objekt> <till-objekt>]..." -#: builtin/notes.c:58 +#: builtin/notes.c:56 msgid "git notes append [<options>] [<object>]" msgstr "git notes append [<flaggor>] [<objekt>]" -#: builtin/notes.c:63 +#: builtin/notes.c:61 msgid "git notes edit [<object>]" msgstr "git notes edit [<objekt>]" -#: builtin/notes.c:68 +#: builtin/notes.c:66 msgid "git notes show [<object>]" msgstr "git notes show [<objekt>]" -#: builtin/notes.c:73 +#: builtin/notes.c:71 msgid "git notes merge [<options>] <notes_ref>" msgstr "git notes merge [<flaggor>] <anteckningsref>" -#: builtin/notes.c:74 +#: builtin/notes.c:72 msgid "git notes merge --commit [<options>]" msgstr "git notes merge --commit [<flaggor>]" -#: builtin/notes.c:75 +#: builtin/notes.c:73 msgid "git notes merge --abort [<options>]" msgstr "git notes merge --abort [<flaggor>]" -#: builtin/notes.c:80 +#: builtin/notes.c:78 msgid "git notes remove [<object>]" msgstr "git notes remove [<objekt>]" -#: builtin/notes.c:85 +#: builtin/notes.c:83 msgid "git notes prune [<options>]" msgstr "git notes prune [<flaggor>]" -#: builtin/notes.c:90 +#: builtin/notes.c:88 msgid "git notes get-ref" msgstr "git notes get-ref" -#: builtin/notes.c:139 +#: builtin/notes.c:137 #, c-format msgid "unable to start 'show' for object '%s'" msgstr "kunde inte starta \"show\" för objektet \"%s\"" -#: builtin/notes.c:143 +#: builtin/notes.c:141 msgid "could not read 'show' output" msgstr "kunde inte läsa utdata frÃ¥n \"show\"" -#: builtin/notes.c:151 +#: builtin/notes.c:149 #, c-format msgid "failed to finish 'show' for object '%s'" msgstr "kunde inte avsluta \"show\" för objektet \"%s\"" -#: builtin/notes.c:169 builtin/tag.c:341 +#: builtin/notes.c:167 builtin/tag.c:341 #, c-format msgid "could not create file '%s'" msgstr "kunde inte skapa filen \"%s\"" -#: builtin/notes.c:188 +#: builtin/notes.c:186 msgid "Please supply the note contents using either -m or -F option" msgstr "Ange innehÃ¥ll för anteckningen med antingen -m eller -F" -#: builtin/notes.c:209 builtin/notes.c:972 +#: builtin/notes.c:207 builtin/notes.c:844 #, c-format msgid "Removing note for object %s\n" msgstr "Tar bort anteckning för objektet %s\n" -#: builtin/notes.c:214 +#: builtin/notes.c:212 msgid "unable to write note object" msgstr "kunde inte skriva anteckningsobjekt" -#: builtin/notes.c:216 +#: builtin/notes.c:214 #, c-format msgid "The note contents has been left in %s" msgstr "Anteckningens innehÃ¥ll har lämnats kvar i %s" -#: builtin/notes.c:250 builtin/tag.c:540 +#: builtin/notes.c:248 builtin/tag.c:540 #, c-format msgid "cannot read '%s'" msgstr "kunde inte läsa \"%s\"" -#: builtin/notes.c:252 builtin/tag.c:543 +#: builtin/notes.c:250 builtin/tag.c:543 #, c-format msgid "could not open or read '%s'" msgstr "kunde inte öppna eller läsa \"%s\"" -#: builtin/notes.c:271 builtin/notes.c:444 builtin/notes.c:446 -#: builtin/notes.c:506 builtin/notes.c:560 builtin/notes.c:643 -#: builtin/notes.c:648 builtin/notes.c:723 builtin/notes.c:765 -#: builtin/notes.c:967 builtin/tag.c:556 +#: builtin/notes.c:269 builtin/notes.c:316 builtin/notes.c:318 +#: builtin/notes.c:378 builtin/notes.c:432 builtin/notes.c:515 +#: builtin/notes.c:520 builtin/notes.c:595 builtin/notes.c:637 +#: builtin/notes.c:839 builtin/tag.c:556 #, c-format msgid "Failed to resolve '%s' as a valid ref." msgstr "Kunde inte slÃ¥ upp \"%s\" som en giltig referens." -#: builtin/notes.c:274 +#: builtin/notes.c:272 #, c-format msgid "Failed to read object '%s'." msgstr "Kunde inte läsa objektet \"%s\"." -#: builtin/notes.c:298 -msgid "Cannot commit uninitialized/unreferenced notes tree" -msgstr "Kan inte checka in oinitierat/orefererat anteckningsträd" - -#: builtin/notes.c:339 -#, c-format -msgid "Bad notes.rewriteMode value: '%s'" -msgstr "Felaktigt värde för notes.rewriteMode: '%s'" - -#: builtin/notes.c:349 -#, c-format -msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" -msgstr "Vägrar skriva över anteckningar i %s (utanför refs/notes/)" - -#. TRANSLATORS: The first %s is the name of the -#. environment variable, the second %s is its value -#: builtin/notes.c:376 -#, c-format -msgid "Bad %s value: '%s'" -msgstr "Felaktigt värde pÃ¥ %s: \"%s\"" - -#: builtin/notes.c:440 +#: builtin/notes.c:312 #, c-format msgid "Malformed input line: '%s'." msgstr "Felaktig indatarad: \"%s\"." -#: builtin/notes.c:455 +#: builtin/notes.c:327 #, c-format msgid "Failed to copy notes from '%s' to '%s'" msgstr "Misslyckades kopiera anteckningar frÃ¥n \"%s\" till \"%s\"" -#: builtin/notes.c:499 builtin/notes.c:553 builtin/notes.c:626 -#: builtin/notes.c:638 builtin/notes.c:711 builtin/notes.c:758 -#: builtin/notes.c:1032 +#: builtin/notes.c:371 builtin/notes.c:425 builtin/notes.c:498 +#: builtin/notes.c:510 builtin/notes.c:583 builtin/notes.c:630 +#: builtin/notes.c:904 msgid "too many parameters" msgstr "för mÃ¥nga parametrar" -#: builtin/notes.c:512 builtin/notes.c:771 +#: builtin/notes.c:384 builtin/notes.c:643 #, c-format msgid "No note found for object %s." msgstr "Inga anteckningar hittades för objektet %s." -#: builtin/notes.c:534 builtin/notes.c:691 +#: builtin/notes.c:406 builtin/notes.c:563 msgid "note contents as a string" msgstr "anteckningsinnehÃ¥ll som sträng" -#: builtin/notes.c:537 builtin/notes.c:694 +#: builtin/notes.c:409 builtin/notes.c:566 msgid "note contents in a file" msgstr "anteckningsinnehÃ¥ll i en fil" -#: builtin/notes.c:539 builtin/notes.c:542 builtin/notes.c:696 -#: builtin/notes.c:699 builtin/tag.c:474 +#: builtin/notes.c:411 builtin/notes.c:414 builtin/notes.c:568 +#: builtin/notes.c:571 builtin/tag.c:474 msgid "object" msgstr "objekt" -#: builtin/notes.c:540 builtin/notes.c:697 +#: builtin/notes.c:412 builtin/notes.c:569 msgid "reuse and edit specified note object" msgstr "Ã¥teranvänd och redigera angivet anteckningsobjekt" -#: builtin/notes.c:543 builtin/notes.c:700 +#: builtin/notes.c:415 builtin/notes.c:572 msgid "reuse specified note object" msgstr "Ã¥teranvänd angivet anteckningsobjekt" -#: builtin/notes.c:545 builtin/notes.c:613 +#: builtin/notes.c:417 builtin/notes.c:485 msgid "replace existing notes" msgstr "ersätt befintliga anteckningar" -#: builtin/notes.c:579 +#: builtin/notes.c:451 #, c-format msgid "" "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite " @@ -6933,24 +7163,24 @@ msgstr "" "Kan inte lägga till anteckningar. Hittade befintliga anteckningar för " "objektet %s. Använd \"-f\" för att skriva över befintliga anteckningar" -#: builtin/notes.c:584 builtin/notes.c:661 +#: builtin/notes.c:456 builtin/notes.c:533 #, c-format msgid "Overwriting existing notes for object %s\n" msgstr "Skriver över befintliga anteckningar för objektet %s\n" -#: builtin/notes.c:614 +#: builtin/notes.c:486 msgid "read objects from stdin" msgstr "läs objekt frÃ¥n standard in" -#: builtin/notes.c:616 +#: builtin/notes.c:488 msgid "load rewriting config for <command> (implies --stdin)" msgstr "läs omskrivningsinställning för <kommando> (implicerar --stdin)" -#: builtin/notes.c:634 +#: builtin/notes.c:506 msgid "too few parameters" msgstr "för fÃ¥ parametrar" -#: builtin/notes.c:655 +#: builtin/notes.c:527 #, c-format msgid "" "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite " @@ -6959,12 +7189,12 @@ msgstr "" "Kan inte kopiera anteckningar. Hittade befintliga anteckningar för objektet " "%s. Använd \"-f\" för att skriva över befintliga anteckningar" -#: builtin/notes.c:667 +#: builtin/notes.c:539 #, c-format msgid "Missing notes on source object %s. Cannot copy." msgstr "Anteckningar pÃ¥ källobjektet %s saknas. Kan inte kopiera." -#: builtin/notes.c:716 +#: builtin/notes.c:588 #, c-format msgid "" "The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n" @@ -6973,15 +7203,15 @@ msgstr "" "Flaggorna -m/-F/-c/-C rekommenderas inte för underkommandot \"edit\".\n" "Använd \"git notes add -f -m/-F/-c/-C\" istället.\n" -#: builtin/notes.c:863 +#: builtin/notes.c:735 msgid "General options" msgstr "Allmänna flaggor" -#: builtin/notes.c:865 +#: builtin/notes.c:737 msgid "Merge options" msgstr "Flaggor för sammanslagning" -#: builtin/notes.c:867 +#: builtin/notes.c:739 msgid "" "resolve notes conflicts using the given strategy (manual/ours/theirs/union/" "cat_sort_uniq)" @@ -6989,46 +7219,46 @@ msgstr "" "läs konflikter i anteckningar med angiven strategi (manual/ours/theirs/union/" "cat_sort_uniq)" -#: builtin/notes.c:869 +#: builtin/notes.c:741 msgid "Committing unmerged notes" msgstr "Checkar in ej sammanslagna anteckningar" -#: builtin/notes.c:871 +#: builtin/notes.c:743 msgid "finalize notes merge by committing unmerged notes" msgstr "" "färdigställ sammanslagning av anteckningar genom att checka in ej " "sammanslagna anteckningar" -#: builtin/notes.c:873 +#: builtin/notes.c:745 msgid "Aborting notes merge resolution" msgstr "Avbryt lösning av sammanslagning av anteckningar" -#: builtin/notes.c:875 +#: builtin/notes.c:747 msgid "abort notes merge" msgstr "avbryt sammanslagning av anteckningar" -#: builtin/notes.c:970 +#: builtin/notes.c:842 #, c-format msgid "Object %s has no note\n" msgstr "Objektet %s har ingen anteckning\n" -#: builtin/notes.c:982 +#: builtin/notes.c:854 msgid "attempt to remove non-existent note is not an error" msgstr "försök att ta bort icke-existerande anteckningar är inte ett fel" -#: builtin/notes.c:985 +#: builtin/notes.c:857 msgid "read object names from the standard input" msgstr "läs objektnamn frÃ¥n standard in" -#: builtin/notes.c:1066 +#: builtin/notes.c:938 msgid "notes_ref" msgstr "anteckningar-ref" -#: builtin/notes.c:1067 +#: builtin/notes.c:939 msgid "use notes from <notes_ref>" msgstr "använd anteckningar frÃ¥n <anteckningsref>" -#: builtin/notes.c:1102 builtin/remote.c:1598 +#: builtin/notes.c:974 builtin/remote.c:1598 #, c-format msgid "Unknown subcommand: %s" msgstr "Okänt underkommando: %s" @@ -7264,7 +7494,7 @@ msgstr "" " git push %s %s\n" "%s" -#: builtin/push.c:121 +#: builtin/push.c:117 #, c-format msgid "" "You are not currently on a branch.\n" @@ -7279,7 +7509,7 @@ msgstr "" "\n" " git push %s HEAD:<namn-pÃ¥-fjärrgren>\n" -#: builtin/push.c:128 +#: builtin/push.c:131 #, c-format msgid "" "The current branch %s has no upstream branch.\n" @@ -7292,12 +7522,12 @@ msgstr "" "\n" " git push --set-upstream %s %s\n" -#: builtin/push.c:136 +#: builtin/push.c:139 #, c-format msgid "The current branch %s has multiple upstream branches, refusing to push." msgstr "Den aktuella grenen %s har flera uppströmsgrenar, vägrar sända." -#: builtin/push.c:139 +#: builtin/push.c:142 #, c-format msgid "" "You are pushing to remote '%s', which is not the upstream of\n" @@ -7308,7 +7538,7 @@ msgstr "" "aktuella grenen \"%s\", utan att tala om för mig vad som\n" "skall sändas för att uppdatera fjärrgrenen." -#: builtin/push.c:151 +#: builtin/push.c:165 msgid "" "push.default is unset; its implicit value is changing in\n" "Git 2.0 from 'matching' to 'simple'. To squelch this message\n" @@ -7342,26 +7572,26 @@ msgstr "" "liknande läget \"current\" istället för \"simple\" om du ibland använder\n" "äldre versioner av Git.)" -#: builtin/push.c:199 +#: builtin/push.c:225 msgid "" "You didn't specify any refspecs to push, and push.default is \"nothing\"." msgstr "" "Du angav inga referensspecifikationer att sända, och push.default är " "\"nothing\"." -#: builtin/push.c:206 +#: builtin/push.c:232 msgid "" "Updates were rejected because the tip of your current branch is behind\n" -"its remote counterpart. Merge the remote changes (e.g. 'git pull')\n" -"before pushing again.\n" +"its remote counterpart. Integrate the remote changes (e.g.\n" +"'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "Uppdateringar avvisades dÃ¥ änden pÃ¥ din befintliga gren är bakom\n" -"dess fjärrmotsvarighet. SlÃ¥ ihop fjärrändringarna (t.ex. \"git pull\")\n" -"innan du sänder igen.\n" +"dess fjärrmotsvarighet. Integrera fjärrändringarna (t.ex\n" +"\"git pull ....\") innan du sänder igen.\n" "Se avsnittet \"Note about fast-forward\" i \"git push --help\" för detaljer." -#: builtin/push.c:212 +#: builtin/push.c:238 msgid "" "Updates were rejected because a pushed branch tip is behind its remote\n" "counterpart. If you did not intend to push that branch, you may want to\n" @@ -7375,37 +7605,37 @@ msgstr "" "endast\n" "sända aktuell gren." -#: builtin/push.c:218 +#: builtin/push.c:244 msgid "" "Updates were rejected because a pushed branch tip is behind its remote\n" -"counterpart. Check out this branch and merge the remote changes\n" -"(e.g. 'git pull') before pushing again.\n" +"counterpart. Check out this branch and integrate the remote changes\n" +"(e.g. 'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "Uppdateringar avvisades dÃ¥ änden pÃ¥ en gren som sänds in är bakom dess\n" -"fjärrmotsvarighet. Checka ut grenen och slÃ¥ ihop fjärrändringarna (t.ex.\n" -"\"git pull\") innan du sänder igen.\n" +"fjärrmotsvarighet. Checka ut grenen och integrera fjärrändringarna (t.ex.\n" +"\"git pull ...\") innan du sänder igen.\n" "Se avsnittet \"Note about fast-forward\" i \"git push --help\" för detaljer." -#: builtin/push.c:224 +#: builtin/push.c:250 msgid "" "Updates were rejected because the remote contains work that you do\n" "not have locally. This is usually caused by another repository pushing\n" -"to the same ref. You may want to first merge the remote changes (e.g.,\n" -"'git pull') before pushing again.\n" +"to the same ref. You may want to first integrate the remote changes\n" +"(e.g., 'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "Uppdateringar avvisades dÃ¥ fjärren innehÃ¥ller ändringar som du inte\n" "har lokalt. Det beror oftast pÃ¥ att ett annat arkiv har sänt in samma\n" -"referenser. Det kan vara en idé att först slÃ¥ ihop fjärrändringarna\n" -"(t.ex. \"git pull\") innan du sänder igen.\n" +"referenser. Det kan vara en idé att först integrera fjärrändringarna\n" +"(t.ex. \"git pull ...\") innan du sänder igen.\n" "Se avsnittet \"Note about fast-forwards\" i \"git push --help\" för detaljer." -#: builtin/push.c:231 +#: builtin/push.c:257 msgid "Updates were rejected because the tag already exists in the remote." msgstr "Uppdateringarna avvisades eftersom taggen redan finns pÃ¥ fjärren." -#: builtin/push.c:234 +#: builtin/push.c:260 msgid "" "You cannot update a remote ref that points at a non-commit object,\n" "or update a remote ref to make it point at a non-commit object,\n" @@ -7416,22 +7646,22 @@ msgstr "" "pekar pÃ¥ nÃ¥got som inte är en incheckning, utan att använda flaggan\n" "\"--force\".\n" -#: builtin/push.c:294 +#: builtin/push.c:320 #, c-format msgid "Pushing to %s\n" msgstr "Sänder till %s\n" -#: builtin/push.c:298 +#: builtin/push.c:324 #, c-format msgid "failed to push some refs to '%s'" msgstr "misslyckades sända vissa referenser till \"%s\"" -#: builtin/push.c:331 +#: builtin/push.c:357 #, c-format msgid "bad repository '%s'" msgstr "felaktigt arkiv \"%s\"" -#: builtin/push.c:332 +#: builtin/push.c:358 msgid "" "No configured push destination.\n" "Either specify the URL from the command-line or configure a remote " @@ -7452,87 +7682,87 @@ msgstr "" "\n" " git push <namn>\n" -#: builtin/push.c:347 +#: builtin/push.c:373 msgid "--all and --tags are incompatible" msgstr "--all och --tags är inkompatibla" -#: builtin/push.c:348 +#: builtin/push.c:374 msgid "--all can't be combined with refspecs" msgstr "--all kan inte kombineras med referensspecifikationer" -#: builtin/push.c:353 +#: builtin/push.c:379 msgid "--mirror and --tags are incompatible" msgstr "--mirror och --tags är inkompatibla" -#: builtin/push.c:354 +#: builtin/push.c:380 msgid "--mirror can't be combined with refspecs" msgstr "--mirror kan inte kombineras med referensspecifikationer" -#: builtin/push.c:359 +#: builtin/push.c:385 msgid "--all and --mirror are incompatible" msgstr "--all och --mirror är inkompatibla" -#: builtin/push.c:419 +#: builtin/push.c:445 msgid "repository" msgstr "arkiv" -#: builtin/push.c:420 +#: builtin/push.c:446 msgid "push all refs" msgstr "sänd alla referenser" -#: builtin/push.c:421 +#: builtin/push.c:447 msgid "mirror all refs" msgstr "spegla alla referenser" -#: builtin/push.c:423 +#: builtin/push.c:449 msgid "delete refs" msgstr "ta bort referenser" -#: builtin/push.c:424 +#: builtin/push.c:450 msgid "push tags (can't be used with --all or --mirror)" msgstr "sänd taggar (kan inte användas med --all eller --mirror)" -#: builtin/push.c:427 +#: builtin/push.c:453 msgid "force updates" msgstr "tvinga uppdateringar" -#: builtin/push.c:428 +#: builtin/push.c:454 msgid "check" msgstr "kontrollera" -#: builtin/push.c:429 +#: builtin/push.c:455 msgid "control recursive pushing of submodules" msgstr "styr rekursiv insändning av undermoduler" -#: builtin/push.c:431 +#: builtin/push.c:457 msgid "use thin pack" msgstr "använd tunna paket" -#: builtin/push.c:432 builtin/push.c:433 +#: builtin/push.c:458 builtin/push.c:459 msgid "receive pack program" msgstr "program för att ta emot paket" -#: builtin/push.c:434 +#: builtin/push.c:460 msgid "set upstream for git pull/status" msgstr "ställ in uppström för git pull/status" -#: builtin/push.c:437 +#: builtin/push.c:463 msgid "prune locally removed refs" msgstr "ta bort lokalt borttagna referenser" -#: builtin/push.c:439 +#: builtin/push.c:465 msgid "bypass pre-push hook" msgstr "förbigÃ¥ pre-push-krok" -#: builtin/push.c:440 +#: builtin/push.c:466 msgid "push missing but relevant tags" msgstr "sänd in saknade men relevanta taggar" -#: builtin/push.c:450 +#: builtin/push.c:476 msgid "--delete is incompatible with --all, --mirror and --tags" msgstr "--delete är imkompatibel med --all, --mirror och --tags" -#: builtin/push.c:452 +#: builtin/push.c:478 msgid "--delete doesn't make sense without any refs" msgstr "--delete kan inte användas utan referenser" @@ -7546,70 +7776,80 @@ msgstr "" "[-u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--" "index-output=<fil>] (--empty | <träd-igt1> [<träd-igt2> [<träd-igt3>]])" -#: builtin/read-tree.c:108 +#: builtin/read-tree.c:109 msgid "write resulting index to <file>" msgstr "skriv resulterande index till <fil>" -#: builtin/read-tree.c:111 +#: builtin/read-tree.c:112 msgid "only empty the index" msgstr "töm bara indexet" -#: builtin/read-tree.c:113 +#: builtin/read-tree.c:114 msgid "Merging" msgstr "Sammanslagning" -#: builtin/read-tree.c:115 +#: builtin/read-tree.c:116 msgid "perform a merge in addition to a read" msgstr "utför en sammanslagning i tillägg till en läsning" -#: builtin/read-tree.c:117 +#: builtin/read-tree.c:118 msgid "3-way merge if no file level merging required" msgstr "3-vägssammanslagning om sammanslagning pÃ¥ filnivÃ¥ ej krävs" -#: builtin/read-tree.c:119 +#: builtin/read-tree.c:120 msgid "3-way merge in presence of adds and removes" msgstr "3-vägssammanslagning när det finns tillägg och borttagningar" -#: builtin/read-tree.c:121 +#: builtin/read-tree.c:122 msgid "same as -m, but discard unmerged entries" msgstr "som -m, men kasta bort ej sammanslagna poster" -#: builtin/read-tree.c:122 +#: builtin/read-tree.c:123 msgid "<subdirectory>/" msgstr "<underkatalog>/" -#: builtin/read-tree.c:123 +#: builtin/read-tree.c:124 msgid "read the tree into the index under <subdirectory>/" msgstr "läs in trädet i indexet under <underkatalog>/" -#: builtin/read-tree.c:126 +#: builtin/read-tree.c:127 msgid "update working tree with merge result" msgstr "uppdatera arbetskatalogen med resultatet frÃ¥n sammanslagningen" -#: builtin/read-tree.c:128 +#: builtin/read-tree.c:129 msgid "gitignore" msgstr "gitignore" -#: builtin/read-tree.c:129 +#: builtin/read-tree.c:130 msgid "allow explicitly ignored files to be overwritten" msgstr "tillÃ¥t explicit ignorerade filer att skrivas över" -#: builtin/read-tree.c:132 +#: builtin/read-tree.c:133 msgid "don't check the working tree after merging" msgstr "kontrollera inte arbetskatalogen efter sammanslagning" -#: builtin/read-tree.c:133 +#: builtin/read-tree.c:134 msgid "don't update the index or the work tree" msgstr "uppdatera inte indexet eller arbetskatalogen" -#: builtin/read-tree.c:135 +#: builtin/read-tree.c:136 msgid "skip applying sparse checkout filter" msgstr "hoppa över att applicera filter för gles utcheckning" -#: builtin/read-tree.c:137 +#: builtin/read-tree.c:138 msgid "debug unpack-trees" msgstr "felsök unpack-trees" +#: builtin/reflog.c:500 +#, c-format +msgid "%s' for '%s' is not a valid timestamp" +msgstr "\"%s\" för \"%s\" är inte en giltig tidsstämpel" + +#: builtin/reflog.c:616 builtin/reflog.c:621 +#, c-format +msgid "'%s' is not a valid timestamp" +msgstr "\"%s\" är inte en giltig tidsstämpel" + #: builtin/remote.c:11 msgid "git remote [-v | --verbose]" msgstr "git remote [-v | --verbose]" @@ -8183,96 +8423,96 @@ msgstr "Kunde inte hitta träder för HEAD." msgid "Failed to find tree of %s." msgstr "Kunde inte hitta träder för %s." -#: builtin/reset.c:98 +#: builtin/reset.c:99 #, c-format msgid "HEAD is now at %s" msgstr "HEAD är nu pÃ¥ %s" -#: builtin/reset.c:169 +#: builtin/reset.c:172 #, c-format msgid "Cannot do a %s reset in the middle of a merge." msgstr "Kan inte utföra en %s Ã¥terställning mitt i en sammanslagning." -#: builtin/reset.c:248 +#: builtin/reset.c:251 msgid "be quiet, only report errors" msgstr "var tyst, rapportera endast fel" -#: builtin/reset.c:250 +#: builtin/reset.c:253 msgid "reset HEAD and index" msgstr "Ã¥terställ HEAD och index" -#: builtin/reset.c:251 +#: builtin/reset.c:254 msgid "reset only HEAD" msgstr "Ã¥terställ endast HEAD" -#: builtin/reset.c:253 builtin/reset.c:255 +#: builtin/reset.c:256 builtin/reset.c:258 msgid "reset HEAD, index and working tree" msgstr "Ã¥terställ HEAD, index och arbetskatalog" -#: builtin/reset.c:257 +#: builtin/reset.c:260 msgid "reset HEAD but keep local changes" msgstr "Ã¥terställ HEAD men behÃ¥ll lokala ändringar" -#: builtin/reset.c:275 +#: builtin/reset.c:278 #, c-format msgid "Failed to resolve '%s' as a valid revision." msgstr "Kunde inte slÃ¥ upp \"%s\" som en giltig revision." -#: builtin/reset.c:278 builtin/reset.c:286 +#: builtin/reset.c:281 builtin/reset.c:289 #, c-format msgid "Could not parse object '%s'." msgstr "Kan inte tolka objektet \"%s\"" -#: builtin/reset.c:283 +#: builtin/reset.c:286 #, c-format msgid "Failed to resolve '%s' as a valid tree." msgstr "Kunde inte slÃ¥ upp \"%s\" som ett giltigt träd." -#: builtin/reset.c:292 +#: builtin/reset.c:295 msgid "--patch is incompatible with --{hard,mixed,soft}" msgstr "--patch är inkompatibel med --{hard,mixed,soft}" -#: builtin/reset.c:301 +#: builtin/reset.c:304 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead." msgstr "" "--mixed rekommenderas inte med sökvägar; använd \"git reset -- <sökvägar>\"." -#: builtin/reset.c:303 +#: builtin/reset.c:306 #, c-format msgid "Cannot do %s reset with paths." msgstr "Kan inte göra %s Ã¥terställning med sökvägar." -#: builtin/reset.c:313 +#: builtin/reset.c:316 #, c-format msgid "%s reset is not allowed in a bare repository" msgstr "%s Ã¥terställning tillÃ¥ts inte i ett naket arkiv" -#: builtin/reset.c:333 +#: builtin/reset.c:336 #, c-format msgid "Could not reset index file to revision '%s'." msgstr "Kunde inte Ã¥terställa indexfilen till versionen \"%s\"." -#: builtin/reset.c:339 +#: builtin/reset.c:342 msgid "Unstaged changes after reset:" msgstr "Oköade ändringar efter Ã¥terställning:" -#: builtin/reset.c:344 +#: builtin/reset.c:347 msgid "Could not write new index file." msgstr "Kunde inte skriva ny indexfil." -#: builtin/rev-parse.c:339 +#: builtin/rev-parse.c:345 msgid "git rev-parse --parseopt [options] -- [<args>...]" msgstr "git rev-parse --parseopt [options] -- [<argument>...]" -#: builtin/rev-parse.c:344 +#: builtin/rev-parse.c:350 msgid "keep the `--` passed as an arg" msgstr "behÃ¥ll \"--\" sänt som argument" -#: builtin/rev-parse.c:346 +#: builtin/rev-parse.c:352 msgid "stop parsing after the first non-option argument" msgstr "sluta tolka efter första argument som inte är flagga" -#: builtin/rev-parse.c:464 +#: builtin/rev-parse.c:470 msgid "" "git rev-parse --parseopt [options] -- [<args>...]\n" " or: git rev-parse --sq-quote [<arg>...]\n" @@ -8303,146 +8543,171 @@ msgstr "git cherry-pick [flaggor] <incheckning-igt>..." msgid "git cherry-pick <subcommand>" msgstr "git cherry-pick <underkommando>" -#: builtin/revert.c:70 builtin/revert.c:92 +#: builtin/revert.c:71 builtin/revert.c:94 #, c-format msgid "%s: %s cannot be used with %s" msgstr "%s: %s kan inte användas med %s" -#: builtin/revert.c:103 +#: builtin/revert.c:105 msgid "end revert or cherry-pick sequence" msgstr "avsluta revert- eller cherry-pick-sekvens" -#: builtin/revert.c:104 +#: builtin/revert.c:106 msgid "resume revert or cherry-pick sequence" msgstr "Ã¥teruppta revert- eller cherry-pick-sekvens" -#: builtin/revert.c:105 +#: builtin/revert.c:107 msgid "cancel revert or cherry-pick sequence" msgstr "avbryt revert- eller cherry-pick-sekvens" -#: builtin/revert.c:106 +#: builtin/revert.c:108 msgid "don't automatically commit" msgstr "checka inte in automatiskt" -#: builtin/revert.c:107 +#: builtin/revert.c:109 msgid "edit the commit message" msgstr "redigera incheckningsmeddelandet" -#: builtin/revert.c:110 +#: builtin/revert.c:112 msgid "parent number" msgstr "nummer pÃ¥ förälder" -#: builtin/revert.c:112 +#: builtin/revert.c:114 msgid "merge strategy" msgstr "sammanslagninsstrategi" -#: builtin/revert.c:113 +#: builtin/revert.c:115 msgid "option" msgstr "alternativ" -#: builtin/revert.c:114 +#: builtin/revert.c:116 msgid "option for merge strategy" msgstr "alternativ för sammanslagningsstrategi" -#: builtin/revert.c:125 +#: builtin/revert.c:127 msgid "append commit name" msgstr "lägg till incheckningsnamn" -#: builtin/revert.c:126 +#: builtin/revert.c:128 msgid "allow fast-forward" msgstr "tillÃ¥t snabbspolning" -#: builtin/revert.c:127 +#: builtin/revert.c:129 msgid "preserve initially empty commits" msgstr "behÃ¥ll incheckningar som börjar som tomma" -#: builtin/revert.c:128 +#: builtin/revert.c:130 msgid "allow commits with empty messages" msgstr "tillÃ¥t incheckningar med tomt meddelande" -#: builtin/revert.c:129 +#: builtin/revert.c:131 msgid "keep redundant, empty commits" msgstr "behÃ¥ll redundanta, tomma incheckningar" -#: builtin/revert.c:133 +#: builtin/revert.c:135 msgid "program error" msgstr "programfel" -#: builtin/revert.c:223 +#: builtin/revert.c:225 msgid "revert failed" msgstr "\"revert\" misslyckades" -#: builtin/revert.c:238 +#: builtin/revert.c:240 msgid "cherry-pick failed" msgstr "\"cherry-pick\" misslyckades" -#: builtin/rm.c:15 +#: builtin/rm.c:16 msgid "git rm [options] [--] <file>..." msgstr "git rm [flaggor] [--] <fil>..." -#: builtin/rm.c:64 builtin/rm.c:186 -#, c-format +#: builtin/rm.c:64 +msgid "" +"the following submodule (or one of its nested submodules)\n" +"uses a .git directory:" +msgid_plural "" +"the following submodules (or one of its nested submodules)\n" +"use a .git directory:" +msgstr[0] "" +"följande undermodul (eller en av dess nästlade undermoduler)\n" +"använder en .git-katalog:" +msgstr[1] "" +"följande undermoduler (eller en av deras nästlade undermoduler)\n" +"använder en .git-katalog:" + +#: builtin/rm.c:70 msgid "" -"submodule '%s' (or one of its nested submodules) uses a .git directory\n" +"\n" "(use 'rm -rf' if you really want to remove it including all of its history)" msgstr "" -"undermodulen \"%s\" (eller en av dess undermoduler) använder en .git-" -"katalog\n" +"\n" "(använd \"rm -rf\" om du verkligen vill ta bort den och all dess historik)" -#: builtin/rm.c:174 -#, c-format +#: builtin/rm.c:230 msgid "" -"'%s' has staged content different from both the file and the HEAD\n" +"the following file has staged content different from both the\n" +"file and the HEAD:" +msgid_plural "" +"the following files have staged content different from both the\n" +"file and the HEAD:" +msgstr[0] "" +"följande fil har köat innehÃ¥ll som skiljer sig bÃ¥de frÃ¥n filen och HEAD:" +msgstr[1] "" +"följande filer har köat innehÃ¥ll som skiljer sig bÃ¥de frÃ¥n filen och HEAD:" + +#: builtin/rm.c:235 +msgid "" +"\n" "(use -f to force removal)" msgstr "" -"\"%s\" har köat ändringar som skiljer sig bÃ¥de frÃ¥n filen och HEAD\n" +"\n" "(använd -f för att tvinga borttagning)" -#: builtin/rm.c:180 -#, c-format -msgid "" -"'%s' has changes staged in the index\n" -"(use --cached to keep the file, or -f to force removal)" -msgstr "" -"\"%s\" har köade ändringar i indexet\n" -"(använd --cached för att behÃ¥lla filen eller -f för att tvinga borttagning)" +#: builtin/rm.c:239 +msgid "the following file has changes staged in the index:" +msgid_plural "the following files have changes staged in the index:" +msgstr[0] "följande fil har ändringar köade i indexet:" +msgstr[1] "följande filer har ändringar köade i indexet:" -#: builtin/rm.c:191 -#, c-format +#: builtin/rm.c:243 builtin/rm.c:254 msgid "" -"'%s' has local modifications\n" +"\n" "(use --cached to keep the file, or -f to force removal)" msgstr "" -"\"%s\" har lokala ändringar\n" +"\n" "(använd --cached för att behÃ¥lla filen eller -f för att tvinga borttagning)" -#: builtin/rm.c:207 +#: builtin/rm.c:251 +msgid "the following file has local modifications:" +msgid_plural "the following files have local modifications:" +msgstr[0] "följande fil har lokala ändringar:" +msgstr[1] "följande filer har lokala ändringar:" + +#: builtin/rm.c:269 msgid "do not list removed files" msgstr "lista inte borttagna filer" -#: builtin/rm.c:208 +#: builtin/rm.c:270 msgid "only remove from the index" msgstr "ta bara bort frÃ¥n indexet" -#: builtin/rm.c:209 +#: builtin/rm.c:271 msgid "override the up-to-date check" msgstr "överstyr à jour-testet" -#: builtin/rm.c:210 +#: builtin/rm.c:272 msgid "allow recursive removal" msgstr "tillÃ¥t rekursiv borttagning" -#: builtin/rm.c:212 +#: builtin/rm.c:274 msgid "exit with a zero status even if nothing matched" msgstr "avsluta med nollstatus även om inget träffades" -#: builtin/rm.c:283 +#: builtin/rm.c:345 #, c-format msgid "not removing '%s' recursively without -r" msgstr "tar inte bort \"%s\" rekursivt utan -r" -#: builtin/rm.c:322 +#: builtin/rm.c:384 #, c-format msgid "git rm: unable to remove %s" msgstr "git rm: kan inte ta bort %s" @@ -8456,23 +8721,23 @@ msgstr "git shortlog [<flaggor>] [<versionsintervall>] [[--] <sökväg>...]" msgid "Missing author: %s" msgstr "Författare saknas: %s" -#: builtin/shortlog.c:227 +#: builtin/shortlog.c:228 msgid "sort output according to the number of commits per author" msgstr "sortera utdata enligt antal incheckningar per författare" -#: builtin/shortlog.c:229 +#: builtin/shortlog.c:230 msgid "Suppress commit descriptions, only provides commit count" msgstr "Undertryck beskrivningar, visa bara antal incheckningar" -#: builtin/shortlog.c:231 +#: builtin/shortlog.c:232 msgid "Show the email address of each author" msgstr "Visa e-postadress för varje författare" -#: builtin/shortlog.c:232 +#: builtin/shortlog.c:233 msgid "w[,i1[,i2]]" msgstr "w[,i1[,i2]]" -#: builtin/shortlog.c:233 +#: builtin/shortlog.c:234 msgid "Linewrap output" msgstr "Radbryt utdata" @@ -8536,23 +8801,23 @@ msgstr "visa referenser som inte kan nÃ¥s frÃ¥n nÃ¥gon annan referens" msgid "show commits in topological order" msgstr "visa incheckningar i topologisk ordning" -#: builtin/show-branch.c:671 +#: builtin/show-branch.c:672 msgid "show only commits not on the first branch" msgstr "visa endast incheckningar inte pÃ¥ den första grenen" -#: builtin/show-branch.c:673 +#: builtin/show-branch.c:674 msgid "show merges reachable from only one tip" msgstr "visa sammanslagningar som endast kan nÃ¥s frÃ¥n en spets" -#: builtin/show-branch.c:675 -msgid "show commits where no parent comes before its children" -msgstr "visa incheckningar där ingen förälder kommer före dess barn" +#: builtin/show-branch.c:676 +msgid "topologically sort, maintaining date order where possible" +msgstr "sortera topologiskt, behÃ¥ll datumordning när möjligt" -#: builtin/show-branch.c:677 +#: builtin/show-branch.c:679 msgid "<n>[,<base>]" msgstr "<n>[,<bas>]" -#: builtin/show-branch.c:678 +#: builtin/show-branch.c:680 msgid "show <n> most recent ref-log entries starting at base" msgstr "visa <n> nyaste refloggposter med början pÃ¥ bas" @@ -8568,35 +8833,35 @@ msgstr "" msgid "git show-ref --exclude-existing[=pattern] < ref-list" msgstr "git show-ref --exclude-existing[=mönster] < reflista" -#: builtin/show-ref.c:165 +#: builtin/show-ref.c:168 msgid "only show tags (can be combined with heads)" msgstr "visa endast taggar (kan kombineras med huvuden)" -#: builtin/show-ref.c:166 +#: builtin/show-ref.c:169 msgid "only show heads (can be combined with tags)" msgstr "visa endast huvuden (kan kombineras med taggar)" -#: builtin/show-ref.c:167 +#: builtin/show-ref.c:170 msgid "stricter reference checking, requires exact ref path" msgstr "striktare referenskontroll, kräver exakt referenssökväg" -#: builtin/show-ref.c:170 builtin/show-ref.c:172 -msgid "show the HEAD reference" -msgstr "visa HEAD-referensen" +#: builtin/show-ref.c:173 builtin/show-ref.c:176 +msgid "show the HEAD reference, even if it would be filtered out" +msgstr "visa HEAD-refrens, även när den skulle filtreras ut" -#: builtin/show-ref.c:174 +#: builtin/show-ref.c:178 msgid "dereference tags into object IDs" msgstr "avreferera taggar till objekt-id" -#: builtin/show-ref.c:176 +#: builtin/show-ref.c:180 msgid "only show SHA1 hash using <n> digits" msgstr "visa SHA1-hash endast med <n> siffror" -#: builtin/show-ref.c:180 +#: builtin/show-ref.c:184 msgid "do not print results to stdout (useful with --verify)" msgstr "visa inte resultat pÃ¥ standard ut (användbart med --verify)" -#: builtin/show-ref.c:182 +#: builtin/show-ref.c:186 msgid "show refs from stdin that aren't in local repository" msgstr "visa referenser frÃ¥n standard in som inte finns i lokalt arkiv" @@ -9011,7 +9276,7 @@ msgstr "visa trädobjekt för underkatalogen <prefix>" msgid "only useful for debugging" msgstr "endast användbart vid felsökning" -#: git.c:16 +#: git.c:17 msgid "" "'git help -a' and 'git help -g' lists available subcommands and some\n" "concept guides. See 'git help <command>' or 'git help <concept>'\n" @@ -9021,19 +9286,23 @@ msgstr "" "nÃ¥gra konceptvägledningar. Se \"git help <kommando>\" eller \"git help\n" "<koncept>\" för att läsa mer om specifika underkommandon och koncept." -#: parse-options.h:156 +#: parse-options.h:144 +msgid "expiry date" +msgstr "giltig till" + +#: parse-options.h:159 msgid "no-op (backward compatibility)" msgstr "ingen funktion (bakÃ¥tkompatibilitet)" -#: parse-options.h:232 +#: parse-options.h:236 msgid "be more verbose" msgstr "var mer pratsam" -#: parse-options.h:234 +#: parse-options.h:238 msgid "be more quiet" msgstr "var mer tyst" -#: parse-options.h:240 +#: parse-options.h:244 msgid "use <n> digits to display SHA-1s" msgstr "använd <n> siffror för att visa SHA-1:or" @@ -9090,8 +9359,8 @@ msgid "Move or rename a file, a directory, or a symlink" msgstr "Flytta eller byt namn pÃ¥ en fil, katalog eller symbolisk länk" #: common-cmds.h:21 -msgid "Fetch from and merge with another repository or a local branch" -msgstr "Hämta frÃ¥n och slÃ¥ ihop med annat arkiv eller en lokal gren" +msgid "Fetch from and integrate with another repository or a local branch" +msgstr "Hämta frÃ¥n och integrera med annat arkiv eller en lokal gren" #: common-cmds.h:22 msgid "Update remote refs along with associated objects" @@ -9136,11 +9405,11 @@ msgstr "" #: git-am.sh:105 #, sh-format msgid "" -"When you have resolved this problem, run \"$cmdline --resolved\".\n" +"When you have resolved this problem, run \"$cmdline --continue\".\n" "If you prefer to skip this patch, run \"$cmdline --skip\" instead.\n" "To restore the original branch and stop patching, run \"$cmdline --abort\"." msgstr "" -"När du har löst problemet kör du \"$cmdline --resolved\".\n" +"När du har löst problemet kör du \"$cmdline --continue\".\n" "Om du vill hoppa över patchen kör du istället \"$cmdline --skip\".\n" "För att Ã¥terställa originalgrenen och avbryta kör du \"$cmdline --abort\"." @@ -9196,25 +9465,34 @@ msgstr "" "Flaggan -b/--binary har varit utan funktion länge, och\n" "kommer tas bort. Vi ber dig att inte använda den längre." -#: git-am.sh:477 +#: git-am.sh:479 #, sh-format msgid "previous rebase directory $dotest still exists but mbox given." msgstr "tidigare rebase-katalog $dotest finns fortfarande, men mbox angavs." -#: git-am.sh:482 +#: git-am.sh:484 msgid "Please make up your mind. --skip or --abort?" msgstr "Bestäm dig. --skip eller --abort?" -#: git-am.sh:509 +#: git-am.sh:520 +#, sh-format +msgid "" +"Stray $dotest directory found.\n" +"Use \"git am --abort\" to remove it." +msgstr "" +"Kvarbliven katalog $dotest hittades.\n" +"Använd \"git am --abort\" för att ta bort den." + +#: git-am.sh:528 msgid "Resolve operation not in progress, we are not resuming." msgstr "Lösningsoperation pÃ¥gÃ¥r inte, vi Ã¥terupptar inte." -#: git-am.sh:575 +#: git-am.sh:594 #, sh-format msgid "Dirty index: cannot apply patches (dirty: $files)" msgstr "Smutsigt index: kan inte tillämpa patchar (smutsiga: $files)" -#: git-am.sh:679 +#: git-am.sh:698 #, sh-format msgid "" "Patch is empty. Was it split wrong?\n" @@ -9225,32 +9503,32 @@ msgstr "" "Om du vill hoppa över patchen kör du istället \"$cmdline --skip\".\n" "För att Ã¥terställa originalgrenen och avbryta kör du \"$cmdline --abort\"." -#: git-am.sh:706 +#: git-am.sh:725 msgid "Patch does not have a valid e-mail address." msgstr "Patchen har inte nÃ¥gon giltig e-postadress." -#: git-am.sh:753 +#: git-am.sh:772 msgid "cannot be interactive without stdin connected to a terminal." msgstr "" "kan inte vara interaktiv om standard in inte är ansluten till en terminal." -#: git-am.sh:757 +#: git-am.sh:776 msgid "Commit Body is:" msgstr "Incheckningskroppen är:" #. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a] #. in your translation. The program will only accept English #. input at this point. -#: git-am.sh:764 +#: git-am.sh:783 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " msgstr "Tillämpa? Y=ja/N=nej/E=redigera/V=visa patch/A=godta alla " -#: git-am.sh:800 +#: git-am.sh:819 #, sh-format msgid "Applying: $FIRSTLINE" msgstr "Tillämpar: $FIRSTLINE" -#: git-am.sh:821 +#: git-am.sh:840 msgid "" "No changes - did you forget to use 'git add'?\n" "If there is nothing left to stage, chances are that something else\n" @@ -9260,7 +9538,7 @@ msgstr "" "Om det inte är nÃ¥got kvar att köa kan det hända att nÃ¥got annat redan\n" "introducerat samma ändringar; kanske du bör hoppa över patchen." -#: git-am.sh:829 +#: git-am.sh:848 msgid "" "You still have unmerged paths in your index\n" "did you forget to use 'git add'?" @@ -9268,16 +9546,16 @@ msgstr "" "Du har fortfarande sökvägar som inte slagits samman i ditt index\n" "glömde du använda \"git add\"?" -#: git-am.sh:845 +#: git-am.sh:864 msgid "No changes -- Patch already applied." msgstr "Inga ändringar -- Patchen har redan tillämpats." -#: git-am.sh:855 +#: git-am.sh:874 #, sh-format msgid "Patch failed at $msgnum $FIRSTLINE" msgstr "Patchen misslyckades vid $msgnum $FIRSTLINE" -#: git-am.sh:858 +#: git-am.sh:877 #, sh-format msgid "" "The copy of the patch that failed is found in:\n" @@ -9286,7 +9564,7 @@ msgstr "" "En kopia av patchen som misslyckades finns i:\n" " $dotest/patch" -#: git-am.sh:876 +#: git-am.sh:895 msgid "applying to an empty history" msgstr "tillämpar pÃ¥ en tom historik" @@ -9489,7 +9767,7 @@ msgstr "Kan inte slÃ¥ ihop flera grenar i ett tomt huvud." msgid "Cannot rebase onto multiple branches" msgstr "Kan inte utföra en \"rebase\" ovanpÃ¥ flera grenar" -#: git-rebase.sh:53 +#: git-rebase.sh:54 msgid "" "When you have resolved this problem, run \"git rebase --continue\".\n" "If you prefer to skip this patch, run \"git rebase --skip\" instead.\n" @@ -9500,31 +9778,50 @@ msgstr "" "Om du vill hoppa över patchen kör du istället \"git rebase --skip\".\n" "För att Ã¥terställa originalgrenen och avbryta kör du \"git rebase --abort\"." +#: git-rebase.sh:156 +msgid "Applied autostash." +msgstr "Tillämpade autostash." + +#: git-rebase.sh:159 +#, sh-format +msgid "Cannot store $stash_sha1" +msgstr "Kan inte spara $stash_sha1" + #: git-rebase.sh:160 +msgid "" +"Applying autostash resulted in conflicts.\n" +"Your changes are safe in the stash.\n" +"You can run \"git stash pop\" or \"git stash drop\" at any time.\n" +msgstr "" +"Tillämpning av autostash gav konflikter.\n" +"Dina ändringar är säkra i stashen.\n" +"Du kan när som helst använda \"git stash pop\" eller \"git stash drop\".\n" + +#: git-rebase.sh:190 msgid "The pre-rebase hook refused to rebase." msgstr "Kroken pre-rebase vägrade ombaseringen." -#: git-rebase.sh:165 +#: git-rebase.sh:195 msgid "It looks like git-am is in progress. Cannot rebase." msgstr "Det verkar som en git-am körs. Kan inte ombasera." -#: git-rebase.sh:296 +#: git-rebase.sh:329 msgid "The --exec option must be used with the --interactive option" msgstr "Flaggan --exec mÃ¥ste användas tillsammans med flaggan --interactive" -#: git-rebase.sh:301 +#: git-rebase.sh:334 msgid "No rebase in progress?" msgstr "Ingen ombasering pÃ¥gÃ¥r?" -#: git-rebase.sh:312 +#: git-rebase.sh:345 msgid "The --edit-todo action can only be used during interactive rebase." msgstr "Ã…tgärden --edit-todo kan endast användas under interaktiv ombasering." -#: git-rebase.sh:319 +#: git-rebase.sh:352 msgid "Cannot read HEAD" msgstr "Kan inte läsa HEAD" -#: git-rebase.sh:322 +#: git-rebase.sh:355 msgid "" "You must edit all merge conflicts and then\n" "mark them as resolved using git add" @@ -9532,12 +9829,12 @@ msgstr "" "Du mÃ¥ste redigera alla sammanslagningskonflikter och\n" "därefter markera dem som lösta med git add" -#: git-rebase.sh:340 +#: git-rebase.sh:373 #, sh-format msgid "Could not move back to $head_name" msgstr "Kunde inte flytta tillbaka till $head_name" -#: git-rebase.sh:359 +#: git-rebase.sh:392 #, sh-format msgid "" "It seems that there is already a $state_dir_base directory, and\n" @@ -9558,57 +9855,66 @@ msgstr "" "och kör programmet igen. Jag avslutar ifall du fortfarande har\n" "nÃ¥got av värde där." -#: git-rebase.sh:404 +#: git-rebase.sh:437 #, sh-format msgid "invalid upstream $upstream_name" msgstr "ogiltig uppström $upstream_name" -#: git-rebase.sh:428 +#: git-rebase.sh:461 #, sh-format msgid "$onto_name: there are more than one merge bases" msgstr "$onto_name: mer än en sammanslagningsbas finns" -#: git-rebase.sh:431 git-rebase.sh:435 +#: git-rebase.sh:464 git-rebase.sh:468 #, sh-format msgid "$onto_name: there is no merge base" msgstr "$onto_name: ingen sammanslagningsbas finns" -#: git-rebase.sh:440 +#: git-rebase.sh:473 #, sh-format msgid "Does not point to a valid commit: $onto_name" msgstr "Peka pÃ¥ en giltig incheckning: $onto_name" -#: git-rebase.sh:463 +#: git-rebase.sh:496 #, sh-format msgid "fatal: no such branch: $branch_name" msgstr "ödesdigert: ingen sÃ¥dan gren: $branch_name" -#: git-rebase.sh:483 +#: git-rebase.sh:519 +msgid "Cannot autostash" +msgstr "Kan inte utföra \"autostash\"" + +#: git-rebase.sh:524 +#, sh-format +msgid "Created autostash: $stash_abbrev" +msgstr "Skapade autostash: $stash_abbrev" + +#: git-rebase.sh:528 msgid "Please commit or stash them." msgstr "Checka in eller använd \"stash\" pÃ¥ dem." -#: git-rebase.sh:501 +#: git-rebase.sh:548 #, sh-format msgid "Current branch $branch_name is up to date." msgstr "Aktuell gren $branch_name är à jour." -#: git-rebase.sh:504 +#: git-rebase.sh:552 #, sh-format msgid "Current branch $branch_name is up to date, rebase forced." msgstr "Aktuell gren $branch_name är à jour, ombasering framtvingad." -#: git-rebase.sh:515 +#: git-rebase.sh:563 #, sh-format msgid "Changes from $mb to $onto:" msgstr "Ändringar frÃ¥n $mb till $onto:" #. Detach HEAD and reset the tree -#: git-rebase.sh:524 +#: git-rebase.sh:572 msgid "First, rewinding head to replay your work on top of it..." msgstr "" "Först, spolar tillbaka huvudet för att spela av ditt arbete ovanpÃ¥ det..." -#: git-rebase.sh:532 +#: git-rebase.sh:582 #, sh-format msgid "Fast-forwarded $branch_name to $onto_name." msgstr "Snabbspolade $branch_name till $onto_name." @@ -9641,6 +9947,11 @@ msgstr "Kan inte ta bort temporärt index (kan inte inträffa)" msgid "Cannot record working tree state" msgstr "Kan inte registrera tillstÃ¥nd för arbetskatalog" +#: git-stash.sh:190 +#, sh-format +msgid "Cannot update $ref_stash with $w_commit" +msgstr "Kan inte uppdatera $ref_stash med $w_commit" + #. TRANSLATORS: $option is an invalid option, like #. `--blah-blah'. The 7 spaces at the beginning of the #. second line correspond to "error: ". So you should line @@ -9651,7 +9962,7 @@ msgstr "Kan inte registrera tillstÃ¥nd för arbetskatalog" #. $ git stash save --blah-blah 2>&1 | head -n 2 #. error: unknown option for 'stash save': --blah-blah #. To provide a message, use git stash save -- '--blah-blah' -#: git-stash.sh:202 +#: git-stash.sh:241 #, sh-format msgid "" "error: unknown option for 'stash save': $option\n" @@ -9660,120 +9971,139 @@ msgstr "" "fel: felaktig flagga för \"stash save\": $option\n" " För att ange ett meddelande, använd git stash save -- \"$option\"" -#: git-stash.sh:223 +#: git-stash.sh:262 msgid "No local changes to save" msgstr "Inga lokala ändringar att spara" -#: git-stash.sh:227 +#: git-stash.sh:268 +msgid "" +"The following untracked files would NOT be saved but need to be removed by " +"stash save:" +msgstr "" +"Följande ospÃ¥rade ändringar skulle INTE sparas utan mÃ¥ste tas bort med " +"\"stash save\":" + +#: git-stash.sh:270 +msgid "" +"Aborting. Consider using either the --force or --include-untracked option." +msgstr "" +"Avbryter. Överväg att använda antingen flaggan --force eller --include-" +"untracked." + +#: git-stash.sh:274 msgid "Cannot initialize stash" msgstr "Kan inte initiera \"stash\"" -#: git-stash.sh:235 +#: git-stash.sh:278 msgid "Cannot save the current status" msgstr "Kan inte spara aktuell status" -#: git-stash.sh:253 +#: git-stash.sh:296 msgid "Cannot remove worktree changes" msgstr "Kan inte ta bort ändringar i arbetskatalogen" -#: git-stash.sh:352 +#: git-stash.sh:395 msgid "No stash found." msgstr "Ingen \"stash\" hittades." -#: git-stash.sh:359 +#: git-stash.sh:402 #, sh-format msgid "Too many revisions specified: $REV" msgstr "För mÃ¥nga revisioner angivna: $REV" -#: git-stash.sh:365 +#: git-stash.sh:408 #, sh-format msgid "$reference is not valid reference" msgstr "$reference är inte en giltig referens." -#: git-stash.sh:393 +#: git-stash.sh:436 #, sh-format msgid "'$args' is not a stash-like commit" msgstr "\"$args\" är inte en \"stash\"-liknande incheckning" -#: git-stash.sh:404 +#: git-stash.sh:447 #, sh-format msgid "'$args' is not a stash reference" msgstr "\"$args\" är inte en \"stash\"-referens" -#: git-stash.sh:412 +#: git-stash.sh:455 msgid "unable to refresh index" msgstr "kan inte uppdatera indexet" -#: git-stash.sh:416 +#: git-stash.sh:459 msgid "Cannot apply a stash in the middle of a merge" msgstr "Kan inte tillämpa en \"stash\" mitt i en sammanslagning" -#: git-stash.sh:424 +#: git-stash.sh:467 msgid "Conflicts in index. Try without --index." msgstr "Konflikter i indexet. Testa utan --index." -#: git-stash.sh:426 +#: git-stash.sh:469 msgid "Could not save index tree" msgstr "Kunde inte spara indexträd" -#: git-stash.sh:460 +#: git-stash.sh:503 msgid "Cannot unstage modified files" msgstr "Kan inte ta bort ändrade filer ur kön" -#: git-stash.sh:475 +#: git-stash.sh:518 msgid "Index was not unstashed." msgstr "Indexet har inte tagits ur kön." -#: git-stash.sh:492 +#: git-stash.sh:535 #, sh-format msgid "Dropped ${REV} ($s)" msgstr "Kastade ${REV} ($s)" -#: git-stash.sh:493 +#: git-stash.sh:536 #, sh-format msgid "${REV}: Could not drop stash entry" msgstr "${REV}: Kunde inte kasta \"stash\"-post" -#: git-stash.sh:500 +#: git-stash.sh:543 msgid "No branch name specified" msgstr "Inget grennamn angavs" -#: git-stash.sh:571 +#: git-stash.sh:615 msgid "(To restore them type \"git stash apply\")" msgstr "(För att Ã¥terställa dem, skriv \"git stash apply\")" -#: git-submodule.sh:91 +#: git-submodule.sh:95 #, sh-format msgid "cannot strip one component off url '$remoteurl'" msgstr "kan inte ta bort en komponent frÃ¥n url:en \"$remoteurl\"" -#: git-submodule.sh:196 +#: git-submodule.sh:237 #, sh-format msgid "No submodule mapping found in .gitmodules for path '$sm_path'" msgstr "" "Hittade ingen undermodulmappning i .gitmodules för sökvägen \"$sm_path\"" -#: git-submodule.sh:239 +#: git-submodule.sh:281 #, sh-format msgid "Clone of '$url' into submodule path '$sm_path' failed" msgstr "Misslyckades klona \"$url\" till undermodulsökvägen \"$sm_path\"" -#: git-submodule.sh:251 +#: git-submodule.sh:293 #, sh-format msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa" -msgstr "Gitkatalog \"$a\" ingÃ¥r i underkatalogsökvägen \"$b\" eller omvänt" +msgstr "Gitkatalog \"$a\" ingÃ¥r i undermodulsökvägen \"$b\" eller omvänt" + +#: git-submodule.sh:403 +msgid "Relative path can only be used from the toplevel of the working tree" +msgstr "Relativ sökväg kan enfast användas frÃ¥n arbetskatalogens toppnivÃ¥" -#: git-submodule.sh:349 +#: git-submodule.sh:413 #, sh-format msgid "repo URL: '$repo' must be absolute or begin with ./|../" msgstr "arkiv-URL: \"$repo\" mÃ¥ste vara absolut eller börja med ./|../" -#: git-submodule.sh:366 +#: git-submodule.sh:430 #, sh-format msgid "'$sm_path' already exists in the index" msgstr "\"$sm_path\" finns redan i indexet" -#: git-submodule.sh:370 +#: git-submodule.sh:434 #, sh-format msgid "" "The following path is ignored by one of your .gitignore files:\n" @@ -9784,22 +10114,22 @@ msgstr "" "$sm_path\n" "Använd -f om du verkligen vill lägga till den" -#: git-submodule.sh:388 +#: git-submodule.sh:452 #, sh-format msgid "Adding existing repo at '$sm_path' to the index" msgstr "Lägger till befintligt arkiv i \"$sm_path\" i indexet" -#: git-submodule.sh:390 +#: git-submodule.sh:454 #, sh-format msgid "'$sm_path' already exists and is not a valid git repo" msgstr "\"$sm_path\" finns redan och är inte ett giltigt git-arkiv" -#: git-submodule.sh:398 +#: git-submodule.sh:462 #, sh-format msgid "A git directory for '$sm_name' is found locally with remote(s):" msgstr "En git-katalog för \"$sm_name\" hittades lokalt med fjärr(ar):" -#: git-submodule.sh:400 +#: git-submodule.sh:464 #, sh-format msgid "" "If you want to reuse this local git directory instead of cloning again from" @@ -9807,14 +10137,14 @@ msgstr "" "För att Ã¥teranvända den lokala git-katalogen istället för att pÃ¥ nytt klona " "frÃ¥n" -#: git-submodule.sh:402 +#: git-submodule.sh:466 #, sh-format msgid "" "use the '--force' option. If the local git directory is not the correct repo" msgstr "" "använd flaggan \"--force\". Om den lokala git-katalogen inte är riktigt arkiv" -#: git-submodule.sh:403 +#: git-submodule.sh:467 #, sh-format msgid "" "or you are unsure what this means choose another name with the '--name' " @@ -9823,210 +10153,270 @@ msgstr "" "eller om du är osäker pÃ¥ vad det innebär, välj nytt namn med flaggan \"--name" "\"." -#: git-submodule.sh:405 +#: git-submodule.sh:469 #, sh-format msgid "Reactivating local git directory for submodule '$sm_name'." msgstr "Aktiverar lokal git-katalog för undermodulen \"$sm_name\" pÃ¥ nytt." -#: git-submodule.sh:417 +#: git-submodule.sh:481 #, sh-format msgid "Unable to checkout submodule '$sm_path'" msgstr "Kan inte checka ut undermodulen \"$sm_path\"" -#: git-submodule.sh:422 +#: git-submodule.sh:486 #, sh-format msgid "Failed to add submodule '$sm_path'" msgstr "Misslyckades lägga till undermodulen \"$sm_path\"" -#: git-submodule.sh:431 +#: git-submodule.sh:495 #, sh-format msgid "Failed to register submodule '$sm_path'" msgstr "Misslyckades registrera undermodulen \"$sm_path\"" -#: git-submodule.sh:474 +#: git-submodule.sh:539 #, sh-format -msgid "Entering '$prefix$sm_path'" -msgstr "GÃ¥r in i \"$prefix$sm_path\"" +msgid "Entering '$prefix$displaypath'" +msgstr "GÃ¥r in i \"$prefix$displaypath\"" -#: git-submodule.sh:488 +#: git-submodule.sh:554 #, sh-format -msgid "Stopping at '$sm_path'; script returned non-zero status." +msgid "Stopping at '$prefix$displaypath'; script returned non-zero status." msgstr "" -"Stoppar pÃ¥ \"$sm_path\"; skriptet returnerade en status skild frÃ¥n noll." +"Stoppar pÃ¥ \"$prefix$displaypath\"; skriptet returnerade en status skild " +"frÃ¥n noll." -#: git-submodule.sh:532 +#: git-submodule.sh:600 #, sh-format -msgid "No url found for submodule path '$sm_path' in .gitmodules" -msgstr "Hittade ingen url för undermodulsökvägen \"$sm_path\" i .gitmodules" +msgid "No url found for submodule path '$displaypath' in .gitmodules" +msgstr "" +"Hittade ingen url för undermodulsökvägen \"$displaypath\" i .gitmodules" -#: git-submodule.sh:541 +#: git-submodule.sh:609 #, sh-format -msgid "Failed to register url for submodule path '$sm_path'" -msgstr "Misslyckades registrera url för underkatalogsökväg \"$sm_path\"" +msgid "Failed to register url for submodule path '$displaypath'" +msgstr "Misslyckades registrera url för undermodulsökväg \"$displaypath\"" -#: git-submodule.sh:543 +#: git-submodule.sh:611 #, sh-format -msgid "Submodule '$name' ($url) registered for path '$sm_path'" -msgstr "Undermodulen \"$name\" ($url) registrerad för sökvägen \"$sm_path\"" +msgid "Submodule '$name' ($url) registered for path '$displaypath'" +msgstr "" +"Undermodulen \"$name\" ($url) registrerad för sökvägen \"$displaypath\"" -#: git-submodule.sh:551 +#: git-submodule.sh:619 #, sh-format -msgid "Failed to register update mode for submodule path '$sm_path'" +msgid "Failed to register update mode for submodule path '$displaypath'" msgstr "" -"Misslyckades registrera uppdateringsläge för undermodulsökväg \"$sm_path\"" +"Misslyckades registrera uppdateringsläge för undermodulsökväg \"$displaypath" +"\"" -#: git-submodule.sh:588 +#: git-submodule.sh:656 #, sh-format msgid "Use '.' if you really want to deinitialize all submodules" msgstr "Använd \".\" om du verkligen vill avinitiera alla undermoduler" -#: git-submodule.sh:603 +#: git-submodule.sh:673 #, sh-format -msgid "Submodule work tree '$sm_path' contains a .git directory" -msgstr "Undermodulens arbetskatalog \"$sm_path\" innehÃ¥ller katalogen \".git\"" +msgid "Submodule work tree '$displaypath' contains a .git directory" +msgstr "" +"Undermodulens arbetskatalog \"$displaypath\" innehÃ¥ller katalogen \".git\"" -#: git-submodule.sh:604 +#: git-submodule.sh:674 #, sh-format msgid "" "(use 'rm -rf' if you really want to remove it including all of its history)" msgstr "" "(använd \"rm -rf\" om du verkligen vill ta bort den och all dess historik)" -#: git-submodule.sh:610 +#: git-submodule.sh:680 #, sh-format msgid "" -"Submodule work tree '$sm_path' contains local modifications; use '-f' to " +"Submodule work tree '$displaypath' contains local modifications; use '-f' to " "discard them" msgstr "" -"Undermodulens arbetskatalog \"$sm_path\" har lokala ändringar; \"-f\" kastar " -"bort dem" +"Undermodulens arbetskatalog \"$displaypath\" har lokala ändringar; \"-f\" " +"kastar bort dem" -#: git-submodule.sh:613 +#: git-submodule.sh:683 #, sh-format -msgid "Cleared directory '$sm_path'" -msgstr "Rensade katalogen \"$sm_path\"" +msgid "Cleared directory '$displaypath'" +msgstr "Rensade katalogen \"$displaypath\"" -#: git-submodule.sh:614 +#: git-submodule.sh:684 #, sh-format -msgid "Could not remove submodule work tree '$sm_path'" -msgstr "Kunde inte ta bort underkatalogens arbetskatalog \"$sm_path\"" +msgid "Could not remove submodule work tree '$displaypath'" +msgstr "Kunde inte ta bort undermodulens arbetskatalog \"$displaypath\"" -#: git-submodule.sh:617 +#: git-submodule.sh:687 #, sh-format -msgid "Could not create empty submodule directory '$sm_path'" -msgstr "Kunde inte skapa tom undermodulskatalog \"$sm_path\"" +msgid "Could not create empty submodule directory '$displaypath'" +msgstr "Kunde inte skapa tom undermodulskatalog \"$displaypath\"" -#: git-submodule.sh:626 +#: git-submodule.sh:696 #, sh-format -msgid "Submodule '$name' ($url) unregistered for path '$sm_path'" -msgstr "Undermodulen \"$name\" ($url) avregistrerad för sökvägen \"$sm_path\"" +msgid "Submodule '$name' ($url) unregistered for path '$displaypath'" +msgstr "" +"Undermodulen \"$name\" ($url) avregistrerad för sökvägen \"$displaypath\"" -#: git-submodule.sh:731 +#: git-submodule.sh:811 #, sh-format msgid "" -"Submodule path '$prefix$sm_path' not initialized\n" +"Submodule path '$displaypath' not initialized\n" "Maybe you want to use 'update --init'?" msgstr "" -"Undermodulen \"$prefix$sm_path\" har inte initierats\n" +"Undermodulen \"$displaypath\" har inte initierats\n" "Kanske du vill köra \"update --init\"?" -#: git-submodule.sh:744 +#: git-submodule.sh:824 #, sh-format -msgid "Unable to find current revision in submodule path '$prefix$sm_path'" -msgstr "" -"Kan inte hitta aktuell revision i undermodulsökvägen \"$prefix$sm_path\"" +msgid "Unable to find current revision in submodule path '$displaypath'" +msgstr "Kan inte hitta aktuell revision i undermodulsökvägen \"$displaypath\"" -#: git-submodule.sh:753 +#: git-submodule.sh:833 #, sh-format msgid "Unable to fetch in submodule path '$sm_path'" msgstr "Kan inte hämta i undermodulsökväg \"$sm_path\"" -#: git-submodule.sh:777 +#: git-submodule.sh:857 +#, sh-format +msgid "Unable to fetch in submodule path '$displaypath'" +msgstr "Kan inte hämta i undermodulsökväg \"$displaypath\"" + +#: git-submodule.sh:871 +#, sh-format +msgid "Unable to rebase '$sha1' in submodule path '$displaypath'" +msgstr "Kan inte ombasera \"$sha1\" i undermodulsökvägen \"$displaypath\"" + +#: git-submodule.sh:872 #, sh-format -msgid "Unable to fetch in submodule path '$prefix$sm_path'" -msgstr "Kan inte hämta i undermodulsökväg \"$prefix$sm_path\"" +msgid "Submodule path '$displaypath': rebased into '$sha1'" +msgstr "Undermodulsökvägen \"$displaypath\": ombaserade in i \"$sha1\"" -#: git-submodule.sh:791 +#: git-submodule.sh:877 #, sh-format -msgid "Unable to rebase '$sha1' in submodule path '$prefix$sm_path'" -msgstr "Kan inte ombasera \"$sha1\" i undermodulsökvägen \"$prefix$sm_path\"" +msgid "Unable to merge '$sha1' in submodule path '$displaypath'" +msgstr "Kan inte slÃ¥ ihop \"$sha1\" i undermodulsökvägen \"$displaypath\"" -#: git-submodule.sh:792 +#: git-submodule.sh:878 #, sh-format -msgid "Submodule path '$prefix$sm_path': rebased into '$sha1'" -msgstr "Undermodulsökvägen \"$prefix$sm_path\": ombaserade in i \"$sha1\"" +msgid "Submodule path '$displaypath': merged in '$sha1'" +msgstr "Undermodulsökvägen \"$displaypath\": sammanslagen i \"$sha1\"" -#: git-submodule.sh:797 +#: git-submodule.sh:883 #, sh-format -msgid "Unable to merge '$sha1' in submodule path '$prefix$sm_path'" -msgstr "Kan inte slÃ¥ ihop \"$sha1\" i undermodulsökvägen \"$prefix$sm_path\"" +msgid "" +"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'" +msgstr "" +"Misslyckades köra \"$command $sha1\" i undermodulsökvägen \"$prefix$sm_path\"" -#: git-submodule.sh:798 +#: git-submodule.sh:884 #, sh-format -msgid "Submodule path '$prefix$sm_path': merged in '$sha1'" -msgstr "Undermodulsökvägen \"$prefix$sm_path\": sammanslagen i \"$sha1\"" +msgid "Submodule path '$prefix$sm_path': '$command $sha1'" +msgstr "Undermodulsökvägen \"$prefix$sm_path\": \"$command $sha1\"" -#: git-submodule.sh:803 +#: git-submodule.sh:889 #, sh-format -msgid "Unable to checkout '$sha1' in submodule path '$prefix$sm_path'" -msgstr "Kan inte checka ut \"$sha1\" i undermodulsökvägen \"$prefix$sm_path\"" +msgid "Unable to checkout '$sha1' in submodule path '$displaypath'" +msgstr "Kan inte checka ut \"$sha1\" i undermodulsökvägen \"$displaypath\"" -#: git-submodule.sh:804 +#: git-submodule.sh:890 #, sh-format -msgid "Submodule path '$prefix$sm_path': checked out '$sha1'" -msgstr "Undermodulsökvägen \"$prefix$sm_path\": checkade ut \"$sha1\"" +msgid "Submodule path '$displaypath': checked out '$sha1'" +msgstr "Undermodulsökvägen \"$displaypath\": checkade ut \"$sha1\"" -#: git-submodule.sh:831 +#: git-submodule.sh:917 #, sh-format -msgid "Failed to recurse into submodule path '$prefix$sm_path'" -msgstr "Misslyckades rekursera in i undermodulsökvägen \"$prefix$sm_path\"" +msgid "Failed to recurse into submodule path '$displaypath'" +msgstr "Misslyckades rekursera in i undermodulsökvägen \"$displaypath\"" -#: git-submodule.sh:939 +#: git-submodule.sh:1025 msgid "The --cached option cannot be used with the --files option" msgstr "Flaggan --cached kan inte användas med flaggan --files" #. unexpected type -#: git-submodule.sh:979 +#: git-submodule.sh:1066 #, sh-format msgid "unexpected mode $mod_dst" msgstr "oväntat läge $mod_dst" -#: git-submodule.sh:997 +#: git-submodule.sh:1086 #, sh-format -msgid " Warn: $name doesn't contain commit $sha1_src" -msgstr " Varning: $name innehÃ¥ller inte incheckning $sha1_src" +msgid " Warn: $display_name doesn't contain commit $sha1_src" +msgstr " Varning: $display_name innehÃ¥ller inte incheckningen $sha1_src" -#: git-submodule.sh:1000 +#: git-submodule.sh:1089 #, sh-format -msgid " Warn: $name doesn't contain commit $sha1_dst" -msgstr " Varning: $name innehÃ¥ller inte incheckning $sha1_dst" +msgid " Warn: $display_name doesn't contain commit $sha1_dst" +msgstr " Varning: $display_name innehÃ¥ller inte incheckningen $sha1_dst" -#: git-submodule.sh:1003 +#: git-submodule.sh:1092 #, sh-format -msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst" -msgstr " Varning: $name innehÃ¥ller inte incheckningar $sha1_src och $sha1_dst" +msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst" +msgstr "" +" Varning: $display_name innehÃ¥ller inte incheckningarna $sha1_src och " +"$sha1_dst" -#: git-submodule.sh:1028 +#: git-submodule.sh:1117 msgid "blob" msgstr "blob" -#: git-submodule.sh:1066 +#: git-submodule.sh:1155 msgid "Submodules changed but not updated:" msgstr "Undermoduler ändrade men inte uppdaterade:" -#: git-submodule.sh:1068 +#: git-submodule.sh:1157 msgid "Submodule changes to be committed:" msgstr "Undermodulers ändringar att checka in:" -#: git-submodule.sh:1153 +#: git-submodule.sh:1242 #, sh-format msgid "Failed to recurse into submodule path '$sm_path'" msgstr "Misslyckades rekursera in i undermodulsökvägen \"$sm_path\"" -#: git-submodule.sh:1216 +#: git-submodule.sh:1306 #, sh-format -msgid "Synchronizing submodule url for '$prefix$sm_path'" -msgstr "Synkroniserar undermodul-url för \"$prefix$sm_path\"" +msgid "Synchronizing submodule url for '$displaypath'" +msgstr "Synkroniserar undermodul-url för \"$displaypath\"" + +#~ msgid " (fix conflicts and then run \"git am --resolved\")" +#~ msgstr " (rätta konflikter och kör sedan \"git am --resolved\")" + +#~ msgid " (all conflicts fixed: run \"git commit\")" +#~ msgstr " (alla konflikter har rättats: kör \"git commit\")" + +#~ msgid "more than %d trees given: '%s'" +#~ msgstr "mer än %d träd angavs: \"%s\"" + +#~ msgid "You cannot combine --no-ff with --ff-only." +#~ msgstr "Du kan inte kombinera --no-ff med --ff-only." + +#~ msgid "" +#~ "submodule '%s' (or one of its nested submodules) uses a .git directory\n" +#~ "(use 'rm -rf' if you really want to remove it including all of its " +#~ "history)" +#~ msgstr "" +#~ "undermodulen \"%s\" (eller en av dess undermoduler) använder en .git-" +#~ "katalog\n" +#~ "(använd \"rm -rf\" om du verkligen vill ta bort den och all dess historik)" + +#~ msgid "" +#~ "'%s' has changes staged in the index\n" +#~ "(use --cached to keep the file, or -f to force removal)" +#~ msgstr "" +#~ "\"%s\" har köade ändringar i indexet\n" +#~ "(använd --cached för att behÃ¥lla filen eller -f för att tvinga " +#~ "borttagning)" + +#~ msgid "show commits where no parent comes before its children" +#~ msgstr "visa incheckningar där ingen förälder kommer före dess barn" + +#~ msgid "show the HEAD reference" +#~ msgstr "visa HEAD-referensen" + +#~ msgid "Unable to fetch in submodule path '$prefix$sm_path'" +#~ msgstr "Kan inte hämta i undermodulsökväg \"$prefix$sm_path\"" + +#~ msgid "Failed to recurse into submodule path '$prefix$sm_path'" +#~ msgstr "Misslyckades rekursera in i undermodulsökvägen \"$prefix$sm_path\"" #~ msgid "It took %.2f seconds to enumerate untracked files. 'status -uno'" #~ msgstr "Det tog %.2f sekunder att räkna ospÃ¥rade filer. \"status -uno\"" @@ -10187,70 +10577,3 @@ msgstr "Synkroniserar undermodul-url för \"$prefix$sm_path\"" #~ msgid "Failed to write current notes tree to database" #~ msgstr "Kunde inte skriva aktuellt anteckningsträd till databasen" - -# FIXME: Untranslatable! -# -#~ msgid "Refusing to %s notes in %s (outside of refs/notes/)" -#~ msgstr "Vägrar %s anteckningar i %s (utanför refs/notes/)" - -#~ msgid "add" -#~ msgstr "add" - -#~ msgid "copy" -#~ msgstr "copy" - -#~ msgid "show" -#~ msgstr "show" - -#~ msgid "remove" -#~ msgstr "remove" - -#~ msgid "prune" -#~ msgstr "prune" - -#~ msgid "The current branch %s is not tracking anything." -#~ msgstr "Den aktuella grenen %s spÃ¥rar ingenting." - -#~ msgid "No destination configured to push to." -#~ msgstr "Har inte ställt in nÃ¥gon destination att sända till." - -#~ msgid "Reflog action message too long: %.*s..." -#~ msgstr "Reflog-händelsemeddelande för lÃ¥ngt: %.*s..." - -#~ msgid "Could not read commit message of %s" -#~ msgstr "Kunde inte läsa incheckningsmeddelandet för %s" - -#~ msgid "Could not extract author email from %s" -#~ msgstr "Kunde inte hämta författarens e-postadress frÃ¥n %s" - -#~ msgid "Could not extract author time from %s" -#~ msgstr "Kunde inte hämta författartid frÃ¥n %s" - -#~ msgid "cherry-pick --ff cannot be used with --signoff" -#~ msgstr "cherry-pick --ff kan inte användas med --signoff" - -#~ msgid "cherry-pick --ff cannot be used with --no-commit" -#~ msgstr "cherry-pick --ff kan inte användas med --no-commit" - -#~ msgid "cherry-pick --ff cannot be used with -x" -#~ msgstr "cherry-pick --ff kan inte användas med -x" - -#~ msgid "cherry-pick --ff cannot be used with --edit" -#~ msgstr "cherry-pick --ff kan inte användas med --edit" - -#~ msgid "committer info too long." -#~ msgstr "incheckarinformation för lÃ¥ng." - -#~ msgid "" -#~ "\n" -#~ "#\n" -#~ "# Write a tag message\n" -#~ "#\n" -#~ msgstr "" -#~ "\n" -#~ "#\n" -#~ "# Skriv ett taggmeddelande\n" -#~ "#\n" - -#~ msgid "signing key value too long (%.10s...)" -#~ msgstr "signeringsnyckelvärdet för lÃ¥ngt (%.10s...)" @@ -1,15 +1,14 @@ # Vietnamese translation for GIT-CORE. -# Copyright (C) 2012-2013 Trần Ngá»c Quân. # This file is distributed under the same license as the git-core package. # First translated by Trần Ngá»c Quân <vnwildman@gmail.com>, 2012-2013. # Nguyá»…n Thái Ngá»c Duy <pclouds@gmail.com>, 2012. # msgid "" msgstr "" -"Project-Id-Version: git-v1.8.3-rc0-20-gc6bc7\n" +"Project-Id-Version: git-v1.8.4-rc1-22-gb8ecf23\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2013-04-30 08:25+0800\n" -"PO-Revision-Date: 2013-05-01 14:26+0700\n" +"POT-Creation-Date: 2013-08-06 14:10+0800\n" +"PO-Revision-Date: 2013-08-06 14:28+0700\n" "Last-Translator: Trần Ngá»c Quân <vnwildman@gmail.com>\n" "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n" "Language: vi\n" @@ -22,7 +21,7 @@ msgstr "" "X-Poedit-Basepath: ../\n" "X-Generator: Poedit 1.5.5\n" -#: advice.c:53 +#: advice.c:57 #, c-format msgid "hint: %.*s\n" msgstr "gợi ý: %.*s\n" @@ -31,7 +30,7 @@ msgstr "gợi ý: %.*s\n" #. * Message used both when 'git commit' fails and when #. * other commands doing a merge do. #. -#: advice.c:83 +#: advice.c:87 msgid "" "Fix them up in the work tree,\n" "and then use 'git add/rm <file>' as\n" @@ -39,9 +38,9 @@ msgid "" "or use 'git commit -a'." msgstr "" "Sá»a chúng trong cây là m việc,\n" -"và sau đó dùng lệnh “git add/rm <táºp-tin>†dà nh riêng\n" +"và sau đó dùng lệnh \"git add/rm <táºp-tin>\" dà nh riêng\n" "cho việc đánh dấu táºp tin cần giải quyết và tạo lần chuyển giao,\n" -"hoặc là dùng lệnh “git commit -aâ€." +"hoặc là dùng lệnh \"git commit -a\"." #: archive.c:10 msgid "git archive [options] <tree-ish> [<path>...]" @@ -70,7 +69,7 @@ msgstr "fmt" msgid "archive format" msgstr "định dạng lÆ°u trữ" -#: archive.c:324 builtin/log.c:1126 +#: archive.c:324 builtin/log.c:1173 msgid "prefix" msgstr "tiá»n tố" @@ -78,11 +77,11 @@ msgstr "tiá»n tố" msgid "prepend prefix to each pathname in the archive" msgstr "nối thêm tiá»n tố và o từng Ä‘Æ°á»ng dẫn táºp tin trong kho lÆ°u" -#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2371 -#: builtin/blame.c:2372 builtin/config.c:55 builtin/fast-export.c:665 -#: builtin/fast-export.c:667 builtin/grep.c:715 builtin/hash-object.c:77 -#: builtin/ls-files.c:490 builtin/ls-files.c:493 builtin/notes.c:536 -#: builtin/notes.c:693 builtin/read-tree.c:107 parse-options.h:149 +#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2292 +#: builtin/blame.c:2293 builtin/config.c:56 builtin/fast-export.c:673 +#: builtin/fast-export.c:675 builtin/grep.c:714 builtin/hash-object.c:77 +#: builtin/ls-files.c:496 builtin/ls-files.c:499 builtin/notes.c:408 +#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:152 msgid "file" msgstr "táºp-tin" @@ -114,7 +113,7 @@ msgstr "nén nhá» hÆ¡n" msgid "list supported archive formats" msgstr "liệt kê các kiểu nén được há»— trợ" -#: archive.c:345 builtin/archive.c:90 builtin/clone.c:86 +#: archive.c:345 builtin/archive.c:90 builtin/clone.c:85 msgid "repo" msgstr "kho" @@ -122,7 +121,7 @@ msgstr "kho" msgid "retrieve the archive from remote repository <repo>" msgstr "nháºn kho lÆ°u từ kho chứa <kho> trên máy chủ" -#: archive.c:347 builtin/archive.c:92 builtin/notes.c:615 +#: archive.c:347 builtin/archive.c:92 builtin/notes.c:487 msgid "command" msgstr "lệnh" @@ -209,19 +208,19 @@ msgstr "Äã có nhánh mang tên “%sâ€." msgid "Cannot force update the current branch." msgstr "Không thể ép buá»™c cáºp nháºt nhánh hiện hà nh." -#: branch.c:201 +#: branch.c:216 #, c-format msgid "Cannot setup tracking information; starting point '%s' is not a branch." msgstr "" "Không thể cà i đặt thông tin theo vết; Ä‘iểm bắt đầu “%s†không phải là má»™t " "nhánh." -#: branch.c:203 +#: branch.c:218 #, c-format msgid "the requested upstream branch '%s' does not exist" msgstr "nhánh dòng ngược đã yêu cầu “%s†chÆ°a sẵn có" -#: branch.c:205 +#: branch.c:220 msgid "" "\n" "If you are planning on basing your work on an upstream\n" @@ -241,26 +240,26 @@ msgstr "" "sẽ theo dõi bản đối chiếu máy chủ của nó, bạn cần dùng lệnh\n" "\"git push -u\" để đặt cấu hình dòng ngược bạn muốn push." -#: branch.c:250 +#: branch.c:265 #, c-format msgid "Not a valid object name: '%s'." msgstr "Không phải tên đối tượng hợp lệ: “%sâ€." -#: branch.c:270 +#: branch.c:285 #, c-format msgid "Ambiguous object name: '%s'." msgstr "Tên đối tượng chÆ°a rõ rà ng: “%sâ€." -#: branch.c:275 +#: branch.c:290 #, c-format msgid "Not a valid branch point: '%s'." msgstr "Nhánh không hợp lệ: “%sâ€." -#: branch.c:281 +#: branch.c:296 msgid "Failed to lock ref for update" msgstr "Gặp lá»—i khi khóa tham chiếu (ref) để cáºp nháºt" -#: branch.c:299 +#: branch.c:314 msgid "Failed to write ref" msgstr "Gặp lá»—i khi ghi tham chiếu (ref)" @@ -274,7 +273,7 @@ msgstr "“%s†không giống nhÆ° táºp tin v2 bundle (định dạng dump cá msgid "unrecognized header: %s%s (%d)" msgstr "phần đầu (header) không được thừa nháºn: %s%s (%d)" -#: bundle.c:89 builtin/commit.c:676 +#: bundle.c:89 builtin/commit.c:697 #, c-format msgid "could not open '%s'" msgstr "không thể mở “%sâ€" @@ -283,11 +282,11 @@ msgstr "không thể mở “%sâ€" msgid "Repository lacks these prerequisite commits:" msgstr "Kho chứa thiếu những lần chuyển giao (commit) cần trÆ°á»›c hết nà y:" -#: bundle.c:164 sequencer.c:651 sequencer.c:1101 builtin/log.c:300 -#: builtin/log.c:770 builtin/log.c:1344 builtin/log.c:1570 builtin/merge.c:349 -#: builtin/shortlog.c:155 +#: bundle.c:164 sequencer.c:661 sequencer.c:1111 builtin/log.c:331 +#: builtin/log.c:801 builtin/log.c:1399 builtin/log.c:1625 builtin/merge.c:364 +#: builtin/shortlog.c:156 msgid "revision walk setup failed" -msgstr "cà i đặt việc di chuyển qua các Ä‘iểm xét lại gặp lá»—i" +msgstr "cà i đặt việc di chuyển qua các Ä‘iểm xét duyệt gặp lá»—i" #: bundle.c:186 #, c-format @@ -311,7 +310,7 @@ msgstr[1] "Lệnh bundle yêu cầu %d tham chiếu (refs) nà y:" msgid "rev-list died" msgstr "rev-list đã chết" -#: bundle.c:300 builtin/log.c:1255 builtin/shortlog.c:258 +#: bundle.c:300 builtin/log.c:1310 builtin/shortlog.c:259 #, c-format msgid "unrecognized argument: %s" msgstr "đối số không được thừa nháºn: %s" @@ -342,12 +341,12 @@ msgstr "không thể tạo “%sâ€" msgid "index-pack died" msgstr "index-pack đã chết" -#: commit.c:50 +#: commit.c:53 #, c-format msgid "could not parse %s" -msgstr "không thể phân tÃch %s" +msgstr "không thể phân tÃch cú pháp %s" -#: commit.c:52 +#: commit.c:55 #, c-format msgid "%s %s is not a commit!" msgstr "%s %s không phải là má»™t lần commit!" @@ -356,16 +355,16 @@ msgstr "%s %s không phải là má»™t lần commit!" msgid "memory exhausted" msgstr "hết bá»™ nhá»›" -#: connected.c:39 +#: connected.c:60 msgid "Could not run 'git rev-list'" msgstr "Không thể chạy “git rev-listâ€" -#: connected.c:48 +#: connected.c:80 #, c-format msgid "failed write to rev-list: %s" msgstr "gặp lá»—i khi ghi và o rev-list: %s" -#: connected.c:56 +#: connected.c:88 #, c-format msgid "failed to close rev-list's stdin: %s" msgstr "gặp lá»—i khi đóng đầu và o chuẩn stdin của rev-list: %s" @@ -461,7 +460,7 @@ msgstr "" "Tìm thấy các lá»—i trong biến cấu hình “diff.dirstatâ€:\n" "%s" -#: diff.c:3481 +#: diff.c:3487 #, c-format msgid "" "Failed to parse --dirstat/-X option parameter:\n" @@ -470,7 +469,7 @@ msgstr "" "Gặp lá»—i khi phân tÃch đối số tùy chá»n --dirstat/-X:\n" "%s" -#: diff.c:3495 +#: diff.c:3501 #, c-format msgid "Failed to parse --submodule option parameter: '%s'" msgstr "Gặp lá»—i khi phân tÃch đối số tùy chá»n --submodule: “%sâ€" @@ -512,20 +511,20 @@ msgstr "“%sâ€: %s" msgid "'%s': short read %s" msgstr "“%sâ€: Ä‘á»c ngắn %s" -#: help.c:212 +#: help.c:210 #, c-format msgid "available git commands in '%s'" -msgstr "các lệnh git sẵn sà ng để dùng trong “%sâ€" +msgstr "các lệnh git sẵn có trong thÆ° mục “%sâ€:" -#: help.c:219 +#: help.c:217 msgid "git commands available from elsewhere on your $PATH" msgstr "các lệnh git sẵn sà ng để dùng từ má»™t nÆ¡i khác trong $PATH của bạn" -#: help.c:235 +#: help.c:233 msgid "The most commonly used git commands are:" msgstr "Những lệnh git hay được sá» dụng nhất là :" -#: help.c:292 +#: help.c:290 #, c-format msgid "" "'%s' appears to be a git command, but we were not\n" @@ -534,11 +533,11 @@ msgstr "" "“%s†trông nhÆ° là má»™t lệnh git, nhÆ°ng chúng tôi không\n" "thể thá»±c thi nó. Có lẽ là lệnh git-%s đã bị há»ng?" -#: help.c:349 +#: help.c:347 msgid "Uh oh. Your system reports no Git commands at all." msgstr "á»i chà . Hệ thống của bạn báo rằng chẳng có lệnh Git nà o cả." -#: help.c:371 +#: help.c:369 #, c-format msgid "" "WARNING: You called a Git command named '%s', which does not exist.\n" @@ -547,17 +546,17 @@ msgstr "" "CẢNH BÃO: Bạn đã gá»i lệnh Git có tên “%sâ€, mà nó lại không có sẵn.\n" "Giả định rằng ý bạn là “%sâ€" -#: help.c:376 +#: help.c:374 #, c-format msgid "in %0.1f seconds automatically..." msgstr "trong %0.1f giây má»™t cách tá»± Ä‘á»™ng..." -#: help.c:383 +#: help.c:381 #, c-format msgid "git: '%s' is not a git command. See 'git --help'." msgstr "git: “%s†không phải là má»™t lệnh của git. Xem “git --helpâ€." -#: help.c:387 +#: help.c:385 help.c:444 msgid "" "\n" "Did you mean this?" @@ -571,12 +570,17 @@ msgstr[1] "" "\n" "Có phải ý bạn là má»™t trong số những cái nà y không?" +#: help.c:440 +#, c-format +msgid "%s: %s - %s" +msgstr "%s: %s - %s" + #: merge.c:56 msgid "failed to read the cache" msgstr "gặp lá»—i khi Ä‘á»c bá»™ nhá»› tạm" #: merge.c:110 builtin/checkout.c:365 builtin/checkout.c:566 -#: builtin/clone.c:645 +#: builtin/clone.c:656 msgid "unable to write new index file" msgstr "không thể ghi táºp tin lÆ°u bảng mục lục má»›i" @@ -590,70 +594,70 @@ msgstr "(commit sai)\n" msgid "addinfo_cache failed for path '%s'" msgstr "addinfo_cache gặp lá»—i đối vá»›i Ä‘Æ°á»ng dẫn “%sâ€" -#: merge-recursive.c:268 +#: merge-recursive.c:269 msgid "error building trees" msgstr "gặp lá»—i khi xây dá»±ng cây" -#: merge-recursive.c:672 +#: merge-recursive.c:673 #, c-format msgid "failed to create path '%s'%s" msgstr "gặp lá»—i khi tạo Ä‘Æ°á»ng dẫn “%sâ€%s" -#: merge-recursive.c:683 +#: merge-recursive.c:684 #, c-format msgid "Removing %s to make room for subdirectory\n" msgstr "Gỡ bá» %s để tạo chá»— (room) cho thÆ° mục con\n" #. something else exists #. .. but not some other error (who really cares what?) -#: merge-recursive.c:697 merge-recursive.c:718 +#: merge-recursive.c:698 merge-recursive.c:719 msgid ": perhaps a D/F conflict?" msgstr ": có lẽ là má»™t xung Ä‘á»™t D/F?" -#: merge-recursive.c:708 +#: merge-recursive.c:709 #, c-format msgid "refusing to lose untracked file at '%s'" msgstr "từ chối đóng táºp tin không được theo vết tại “%sâ€" -#: merge-recursive.c:748 +#: merge-recursive.c:749 #, c-format msgid "cannot read object %s '%s'" msgstr "không thể Ä‘á»c đối tượng %s “%sâ€" -#: merge-recursive.c:750 +#: merge-recursive.c:751 #, c-format msgid "blob expected for %s '%s'" msgstr "đối tượng blob được mong đợi cho %s “%sâ€" -#: merge-recursive.c:773 builtin/clone.c:313 +#: merge-recursive.c:774 builtin/clone.c:312 #, c-format msgid "failed to open '%s'" msgstr "gặp lá»—i khi mở “%sâ€" -#: merge-recursive.c:781 +#: merge-recursive.c:782 #, c-format msgid "failed to symlink '%s'" msgstr "gặp lá»—i khi tạo liên kết tượng trÆ°ng (symlink) “%sâ€" -#: merge-recursive.c:784 +#: merge-recursive.c:785 #, c-format msgid "do not know what to do with %06o %s '%s'" msgstr "không hiểu phải là m gì vá»›i %06o %s “%sâ€" -#: merge-recursive.c:922 +#: merge-recursive.c:923 msgid "Failed to execute internal merge" msgstr "Gặp lá»—i khi thá»±c hiện trá»™n ná»™i bá»™" -#: merge-recursive.c:926 +#: merge-recursive.c:927 #, c-format msgid "Unable to add %s to database" msgstr "Không thể thêm %s và o cÆ¡ sở dữ liệu" -#: merge-recursive.c:942 +#: merge-recursive.c:943 msgid "unsupported object type in the tree" msgstr "kiểu đối tượng không được há»— trợ trong cây (tree)" -#: merge-recursive.c:1021 merge-recursive.c:1035 +#: merge-recursive.c:1022 merge-recursive.c:1036 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " @@ -662,7 +666,7 @@ msgstr "" "XUNG ÄỘT (%s/xóa): %s bị xóa trong %s và %s trong %s. Phiên bản %s của %s " "còn lại trong cây (tree)." -#: merge-recursive.c:1027 merge-recursive.c:1040 +#: merge-recursive.c:1028 merge-recursive.c:1041 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " @@ -671,20 +675,20 @@ msgstr "" "XUNG ÄỘT (%s/xóa): %s bị xóa trong %s và %s trong %s. Phiên bản %s của %s " "còn lại trong cây (tree) tại %s." -#: merge-recursive.c:1081 +#: merge-recursive.c:1082 msgid "rename" msgstr "đổi tên" -#: merge-recursive.c:1081 +#: merge-recursive.c:1082 msgid "renamed" msgstr "đã đổi tên" -#: merge-recursive.c:1137 +#: merge-recursive.c:1138 #, c-format msgid "%s is a directory in %s adding as %s instead" msgstr "%s là má»™t thÆ° mục trong %s thay và o đó thêm và o nhÆ° là %s" -#: merge-recursive.c:1159 +#: merge-recursive.c:1160 #, c-format msgid "" "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s" @@ -693,150 +697,173 @@ msgstr "" "XUNG ÄỘT (đổi-tên/đổi-tên): Äổi tên \"%s\"->\"%s\" trong nhánh \"%s\" đổi " "tên \"%s\"->\"%s\" trong \"%s\"%s" -#: merge-recursive.c:1164 +#: merge-recursive.c:1165 msgid " (left unresolved)" msgstr " (cần giải quyết)" -#: merge-recursive.c:1218 +#: merge-recursive.c:1219 #, c-format msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s" msgstr "" "XUNG ÄỘT (đổi-tên/đổi-tên): Äổi tên %s->%s trong %s. Äổi tên %s->%s trong %s" -#: merge-recursive.c:1248 +#: merge-recursive.c:1249 #, c-format msgid "Renaming %s to %s and %s to %s instead" msgstr "Äang đổi tên %s thà nh %s thay vì %s thà nh %s" -#: merge-recursive.c:1447 +#: merge-recursive.c:1448 #, c-format msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s" msgstr "" "XUNG ÄỘT (đổi-tên/thêm): Äổi tên %s->%s trong %s. %s được thêm và o trong %s" -#: merge-recursive.c:1457 +#: merge-recursive.c:1458 #, c-format msgid "Adding merged %s" msgstr "Thêm hòa trá»™n %s" -#: merge-recursive.c:1462 merge-recursive.c:1660 +#: merge-recursive.c:1463 merge-recursive.c:1661 #, c-format msgid "Adding as %s instead" msgstr "Thay và o đó thêm và o %s" -#: merge-recursive.c:1513 +#: merge-recursive.c:1514 #, c-format msgid "cannot read object %s" msgstr "không thể Ä‘á»c đối tượng %s" -#: merge-recursive.c:1516 +#: merge-recursive.c:1517 #, c-format msgid "object %s is not a blob" msgstr "đối tượng %s không phải là má»™t blob" -#: merge-recursive.c:1564 +#: merge-recursive.c:1565 msgid "modify" msgstr "sá»a đổi" -#: merge-recursive.c:1564 +#: merge-recursive.c:1565 msgid "modified" msgstr "đã sá»a" -#: merge-recursive.c:1574 +#: merge-recursive.c:1575 msgid "content" msgstr "ná»™i dung" -#: merge-recursive.c:1581 +#: merge-recursive.c:1582 msgid "add/add" msgstr "thêm/thêm" -#: merge-recursive.c:1615 +#: merge-recursive.c:1616 #, c-format msgid "Skipped %s (merged same as existing)" msgstr "Äã bá» qua %s (đã có sẵn lần hòa trá»™n nà y)" -#: merge-recursive.c:1629 +#: merge-recursive.c:1630 #, c-format msgid "Auto-merging %s" msgstr "Tá»±-Ä‘á»™ng-hòa-trá»™n %s" -#: merge-recursive.c:1633 git-submodule.sh:1029 +#: merge-recursive.c:1634 git-submodule.sh:1118 msgid "submodule" msgstr "mô-Ä‘un-con" -#: merge-recursive.c:1634 +#: merge-recursive.c:1635 #, c-format msgid "CONFLICT (%s): Merge conflict in %s" msgstr "XUNG ÄỘT (%s): Xung Ä‘á»™t hòa trá»™n trong %s" -#: merge-recursive.c:1724 +#: merge-recursive.c:1725 #, c-format msgid "Removing %s" msgstr "Äang xóa %s" -#: merge-recursive.c:1749 +#: merge-recursive.c:1750 msgid "file/directory" msgstr "táºp-tin/thÆ°-mục" -#: merge-recursive.c:1755 +#: merge-recursive.c:1756 msgid "directory/file" msgstr "thÆ°-mục/táºp tin" -#: merge-recursive.c:1760 +#: merge-recursive.c:1761 #, c-format msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s" msgstr "" "XUNG ÄỘT (%s): Ở đây không có thÆ° mục nà o có tên %s trong %s. Thêm %s nhÆ° là " "%s" -#: merge-recursive.c:1770 +#: merge-recursive.c:1771 #, c-format msgid "Adding %s" msgstr "Thêm \"%s\"" -#: merge-recursive.c:1787 +#: merge-recursive.c:1788 msgid "Fatal merge failure, shouldn't happen." msgstr "Việc hòa trá»™n há»ng nghiêm trá»ng, không nên để xảy ra." -#: merge-recursive.c:1806 +#: merge-recursive.c:1807 msgid "Already up-to-date!" msgstr "Äã cáºp nháºt rồi!" -#: merge-recursive.c:1815 +#: merge-recursive.c:1816 #, c-format msgid "merging of trees %s and %s failed" msgstr "hòa trá»™n cây (tree) %s và %s gặp lá»—i" -#: merge-recursive.c:1845 +#: merge-recursive.c:1846 #, c-format msgid "Unprocessed path??? %s" msgstr "ÄÆ°á»ng dẫn chÆ°a được xá» lý??? %s" -#: merge-recursive.c:1890 +#: merge-recursive.c:1891 msgid "Merging:" msgstr "Äang trá»™n:" -#: merge-recursive.c:1903 +#: merge-recursive.c:1904 #, c-format msgid "found %u common ancestor:" msgid_plural "found %u common ancestors:" msgstr[0] "tìm thấy %u tổ tiên chung:" msgstr[1] "tìm thấy %u tổ tiên chung:" -#: merge-recursive.c:1940 +#: merge-recursive.c:1941 msgid "merge returned no commit" msgstr "hòa trá»™n không trả vá» lần chuyển giao (commit) nà o" -#: merge-recursive.c:1997 +#: merge-recursive.c:1998 #, c-format msgid "Could not parse object '%s'" msgstr "Không thể phân tÃch đối tượng “%sâ€" -#: merge-recursive.c:2009 builtin/merge.c:658 +#: merge-recursive.c:2010 builtin/merge.c:672 msgid "Unable to write index." msgstr "Không thể ghi bảng mục lục" -#: object.c:195 +#: notes-utils.c:40 +msgid "Cannot commit uninitialized/unreferenced notes tree" +msgstr "" +"Không thể chuyển giao (commit) chÆ°a được khởi tạo hoặc không được tham chiếu " +"cây ghi chú" + +#: notes-utils.c:81 +#, c-format +msgid "Bad notes.rewriteMode value: '%s'" +msgstr "Giá trị notes.rewriteMode sai: “%sâ€" + +#: notes-utils.c:91 +#, c-format +msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" +msgstr "Từ chối ghi đè ghi chú trong %s (nằm ngoà i của refs/notes/)" + +#. TRANSLATORS: The first %s is the name of the +#. environment variable, the second %s is its value +#: notes-utils.c:118 +#, c-format +msgid "Bad %s value: '%s'" +msgstr "Giá trị %s sai: “%sâ€" + +#: object.c:204 #, c-format msgid "unable to parse object: %s" msgstr "không thể phân tÃch đối tượng: “%sâ€" @@ -876,18 +903,18 @@ msgstr "ÄÆ°á»ng dẫn “%s†thì ở trong mô-Ä‘un-con “%.*sâ€" msgid "'%s' is beyond a symbolic link" msgstr "“%s†nằm ngoà i má»™t liên kết tượng trÆ°ng" -#: remote.c:1781 +#: remote.c:1788 #, c-format msgid "Your branch is ahead of '%s' by %d commit.\n" msgid_plural "Your branch is ahead of '%s' by %d commits.\n" msgstr[0] "Nhánh của bạn là đầu của “%s†bởi %d lần chuyển giao (commit).\n" msgstr[1] "Nhánh của bạn là đầu của “%s†bởi %d lần chuyển giao (commit).\n" -#: remote.c:1787 +#: remote.c:1794 msgid " (use \"git push\" to publish your local commits)\n" msgstr " (dùng \"git push\" để xuất bản các lần chuyển giao ná»™i bá»™ của bạn)\n" -#: remote.c:1790 +#: remote.c:1797 #, c-format msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n" msgid_plural "" @@ -899,11 +926,11 @@ msgstr[1] "" "Nhánh của bạn thì ở đằng sau “%s†bởi %d lần chuyển giao (commit), và có thể " "được fast-forward.\n" -#: remote.c:1798 +#: remote.c:1805 msgid " (use \"git pull\" to update your local branch)\n" msgstr " (dùng \"git pull\" để cáºp nháºt nhánh ná»™i bá»™ của bạn)\n" -#: remote.c:1801 +#: remote.c:1808 #, c-format msgid "" "Your branch and '%s' have diverged,\n" @@ -919,20 +946,29 @@ msgstr[1] "" "Your branch and “%s†have diverged,\n" "and have %d and %d different commit each, respectively.\n" -#: remote.c:1811 +#: remote.c:1818 msgid " (use \"git pull\" to merge the remote branch into yours)\n" msgstr "" " (dùng \"git pull\" để hòa trá»™n nhánh trên máy chủ và o trong nhánh của " "bạn)\n" -#: sequencer.c:206 builtin/merge.c:776 builtin/merge.c:889 builtin/merge.c:999 -#: builtin/merge.c:1009 +#: run-command.c:80 +msgid "open /dev/null failed" +msgstr "gặp lá»—i khi mở /dev/null" + +#: run-command.c:82 +#, c-format +msgid "dup2(%d,%d) failed" +msgstr "dup2(%d,%d) gặp lá»—i" + +#: sequencer.c:206 builtin/merge.c:790 builtin/merge.c:903 +#: builtin/merge.c:1013 builtin/merge.c:1023 #, c-format msgid "Could not open '%s' for writing" msgstr "Không thể mở “%s†để ghi" -#: sequencer.c:208 builtin/merge.c:335 builtin/merge.c:779 -#: builtin/merge.c:1001 builtin/merge.c:1014 +#: sequencer.c:208 builtin/merge.c:350 builtin/merge.c:793 +#: builtin/merge.c:1015 builtin/merge.c:1028 #, c-format msgid "Could not write to '%s'" msgstr "Không thể ghi và o “%sâ€" @@ -955,7 +991,7 @@ msgstr "" "vá»›i lệnh “git add <Ä‘Æ°á»ng_dẫn>†hoặc “git rm <Ä‘Æ°á»ng_dẫn>â€\n" "và chuyển giao (commit) kết quả bằng lệnh “git commitâ€" -#: sequencer.c:245 sequencer.c:859 sequencer.c:942 +#: sequencer.c:245 sequencer.c:869 sequencer.c:952 #, c-format msgid "Could not write to %s" msgstr "Không thể ghi và o %s" @@ -978,46 +1014,46 @@ msgid "Commit your changes or stash them to proceed." msgstr "Chuyển giao (commit) các thay đổi của bạn hay stash chúng để xá» lý." #. TRANSLATORS: %s will be "revert" or "cherry-pick" -#: sequencer.c:319 +#: sequencer.c:324 #, c-format msgid "%s: Unable to write new index file" msgstr "%s: Không thể ghi táºp tin lÆ°u bảng mục lục má»›i" -#: sequencer.c:350 +#: sequencer.c:355 msgid "Could not resolve HEAD commit\n" msgstr "Không thể phân giải commit (lần chuyển giao) HEAD\n" -#: sequencer.c:371 +#: sequencer.c:377 msgid "Unable to update cache tree\n" msgstr "Không thể cáºp nháºt cây bá»™ nhá»› đệm\n" -#: sequencer.c:416 +#: sequencer.c:422 #, c-format msgid "Could not parse commit %s\n" msgstr "Không thể phân tÃch commit (lần chuyển giao) %s\n" -#: sequencer.c:421 +#: sequencer.c:427 #, c-format msgid "Could not parse parent commit %s\n" msgstr "Không thể phân tÃch commit (lần chuyển giao) cha mẹ %s\n" -#: sequencer.c:487 +#: sequencer.c:493 msgid "Your index file is unmerged." msgstr "Táºp tin lÆ°u mục lục của bạn không được hòa trá»™n." -#: sequencer.c:506 +#: sequencer.c:512 #, c-format msgid "Commit %s is a merge but no -m option was given." msgstr "" "Lần chuyển giao (commit) %s là má»™t lần hòa trá»™n nhÆ°ng không Ä‘Æ°a ra tùy chá»n -" "m." -#: sequencer.c:514 +#: sequencer.c:520 #, c-format msgid "Commit %s does not have parent %d" msgstr "Lần chuyển giao (commit) %s không có cha mẹ %d" -#: sequencer.c:518 +#: sequencer.c:524 #, c-format msgid "Mainline was specified but commit %s is not a merge." msgstr "" @@ -1026,171 +1062,195 @@ msgstr "" #. TRANSLATORS: The first %s will be "revert" or #. "cherry-pick", the second %s a SHA1 -#: sequencer.c:531 +#: sequencer.c:537 #, c-format msgid "%s: cannot parse parent commit %s" msgstr "%s: không thể phân tÃch lần chuyển giao mẹ của %s" -#: sequencer.c:535 +#: sequencer.c:541 #, c-format msgid "Cannot get commit message for %s" msgstr "Không thể lấy thông Ä‘iệp lần chuyển giao (commit) cho %s" -#: sequencer.c:621 +#: sequencer.c:627 #, c-format msgid "could not revert %s... %s" msgstr "không thể revert %s... %s" -#: sequencer.c:622 +#: sequencer.c:628 #, c-format msgid "could not apply %s... %s" msgstr "không thể apply (áp dụng miếng vá) %s... %s" -#: sequencer.c:654 +#: sequencer.c:664 msgid "empty commit set passed" msgstr "lần chuyển giao (commit) trống rá»—ng đặt là hợp quy cách" -#: sequencer.c:662 +#: sequencer.c:672 #, c-format msgid "git %s: failed to read the index" msgstr "git %s: gặp lá»—i Ä‘á»c bảng mục lục" -#: sequencer.c:667 +#: sequencer.c:677 #, c-format msgid "git %s: failed to refresh the index" msgstr "git %s: gặp lá»—i khi là m tÆ°Æ¡i má»›i bảng mục lục" -#: sequencer.c:725 +#: sequencer.c:735 #, c-format msgid "Cannot %s during a %s" msgstr "Không thể %s trong khi %s" -#: sequencer.c:747 +#: sequencer.c:757 #, c-format msgid "Could not parse line %d." msgstr "Không phân tÃch được dòng %d." -#: sequencer.c:752 +#: sequencer.c:762 msgid "No commits parsed." msgstr "Không có lần chuyển giao (commit) nà o được phân tÃch." -#: sequencer.c:765 +#: sequencer.c:775 #, c-format msgid "Could not open %s" msgstr "Không thể mở %s" -#: sequencer.c:769 +#: sequencer.c:779 #, c-format msgid "Could not read %s." msgstr "Không thể Ä‘á»c %s." -#: sequencer.c:776 +#: sequencer.c:786 #, c-format msgid "Unusable instruction sheet: %s" msgstr "Bảng chỉ thị không thể dùng được: %s" -#: sequencer.c:804 +#: sequencer.c:814 #, c-format msgid "Invalid key: %s" msgstr "Khóa không đúng: %s" -#: sequencer.c:807 +#: sequencer.c:817 #, c-format msgid "Invalid value for %s: %s" msgstr "Giá trị không hợp lệ %s: %s" -#: sequencer.c:819 +#: sequencer.c:829 #, c-format msgid "Malformed options sheet: %s" msgstr "Bảng tùy chá»n dị hình: %s" -#: sequencer.c:840 +#: sequencer.c:850 msgid "a cherry-pick or revert is already in progress" msgstr "má»™t thao tác cherry-pick hoặc revert Ä‘ang được thá»±c hiện" -#: sequencer.c:841 +#: sequencer.c:851 msgid "try \"git cherry-pick (--continue | --quit | --abort)\"" msgstr "hãy thá» \"git cherry-pick (--continue | --quit | --abort)\"" -#: sequencer.c:845 +#: sequencer.c:855 #, c-format msgid "Could not create sequencer directory %s" msgstr "Không thể tạo thÆ° mục xếp dãy %s" -#: sequencer.c:861 sequencer.c:946 +#: sequencer.c:871 sequencer.c:956 #, c-format msgid "Error wrapping up %s." msgstr "Lá»—i bao bá»c %s." -#: sequencer.c:880 sequencer.c:1014 +#: sequencer.c:890 sequencer.c:1024 msgid "no cherry-pick or revert in progress" msgstr "không cherry-pick hay revert trong tiến trình" -#: sequencer.c:882 +#: sequencer.c:892 msgid "cannot resolve HEAD" msgstr "không thể phân giải HEAD" -#: sequencer.c:884 +#: sequencer.c:894 msgid "cannot abort from a branch yet to be born" msgstr "không thể hủy bá» từ má»™t nhánh mà nó còn chÆ°a được tạo ra" -#: sequencer.c:906 builtin/apply.c:4060 +#: sequencer.c:916 builtin/apply.c:4061 #, c-format msgid "cannot open %s: %s" msgstr "không thể mở %s: %s" -#: sequencer.c:909 +#: sequencer.c:919 #, c-format msgid "cannot read %s: %s" msgstr "không thể Ä‘á»c %s: %s" -#: sequencer.c:910 +#: sequencer.c:920 msgid "unexpected end of file" msgstr "kết thúc táºp tin Ä‘á»™t xuất" -#: sequencer.c:916 +#: sequencer.c:926 #, c-format msgid "stored pre-cherry-pick HEAD file '%s' is corrupt" msgstr "táºp tin HEAD “pre-cherry-pick†đã lÆ°u “%s†bị há»ng" -#: sequencer.c:939 +#: sequencer.c:949 #, c-format msgid "Could not format %s." msgstr "Không thể định dạng %s." -#: sequencer.c:1083 +#: sequencer.c:1092 #, c-format msgid "%s: can't cherry-pick a %s" msgstr "%s: không thể cherry-pick má»™t %s" -#: sequencer.c:1085 +#: sequencer.c:1095 #, c-format msgid "%s: bad revision" msgstr "%s: Ä‘iểm xét duyệt sai" -#: sequencer.c:1119 +#: sequencer.c:1129 msgid "Can't revert as initial commit" msgstr "Không thể revert má»™t lần chuyển giao (commit) khởi tạo" -#: sequencer.c:1120 +#: sequencer.c:1130 msgid "Can't cherry-pick into empty head" msgstr "Không thể cherry-pick và o má»™t đầu (head) trống rá»—ng" -#: sha1_name.c:1036 +#: sha1_name.c:440 +msgid "" +"Git normally never creates a ref that ends with 40 hex characters\n" +"because it will be ignored when you just specify 40-hex. These refs\n" +"may be created by mistake. For example,\n" +"\n" +" git checkout -b $br $(git rev-parse ...)\n" +"\n" +"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" +"examine these refs and maybe delete them. Turn this message off by\n" +"running \"git config advice.objectNameWarning false\"" +msgstr "" +"Git thÆ°á»ng không bao giá» tạo tham chiếu mà nó kết thúc vá»›i 40 ký tá»± hex\n" +"bởi vì nó sẽ bị bá» qua khi bạn chỉ định 40-hex. Những tham chiếu nà y\n" +"có lẽ được tạo ra bởi má»™t sai sót nà o đó. Và dụ,\n" +"\n" +" git checkout -b $br $(git rev-parse ...)\n" +"\n" +"vá»›i \"$br\" không hiểu lý do vì sao trống rá»—ng và má»™t tham chiếu 40-hex được " +"tạo ra.\n" +"Xin hãy kiểm tra những tham chiếu nà y và có thể xóa chúng Ä‘i. Tắt lá»i nhắn " +"nà y\n" +"bằng cách chạy lệnh \"git config advice.objectNameWarning false\"" + +#: sha1_name.c:1097 msgid "HEAD does not point to a branch" msgstr "HEAD không chỉ đến má»™t nhánh nà o cả" -#: sha1_name.c:1039 +#: sha1_name.c:1100 #, c-format msgid "No such branch: '%s'" msgstr "Không có nhánh nà o nhÆ° thế: “%sâ€" -#: sha1_name.c:1041 +#: sha1_name.c:1102 #, c-format msgid "No upstream configured for branch '%s'" msgstr "Không có thượng nguồn (upstream) được cấu hình cho nhánh “%sâ€" -#: sha1_name.c:1044 +#: sha1_name.c:1106 #, c-format msgid "Upstream branch '%s' not stored as a remote-tracking branch" msgstr "" @@ -1202,172 +1262,172 @@ msgstr "" msgid "unable to access '%s': %s" msgstr "không thể truy cáºp “%sâ€: %s" -#: wrapper.c:423 +#: wrapper.c:429 #, c-format msgid "unable to access '%s'" msgstr "không thể truy cáºp “%sâ€" -#: wrapper.c:434 +#: wrapper.c:440 #, c-format msgid "unable to look up current user in the passwd file: %s" msgstr "không tìm thấy ngÆ°á»i dùng hiện tại trong táºp tin passwd: %s" -#: wrapper.c:435 +#: wrapper.c:441 msgid "no such user" msgstr "không có ngÆ°á»i dùng nhÆ° váºy" -#: wt-status.c:140 +#: wt-status.c:141 msgid "Unmerged paths:" msgstr "Những Ä‘Æ°á»ng dẫn chÆ°a được hòa trá»™n:" -#: wt-status.c:167 wt-status.c:194 +#: wt-status.c:168 wt-status.c:195 #, c-format msgid " (use \"git reset %s <file>...\" to unstage)" msgstr " (dùng \"git reset %s <táºp-tin>...\" để bá» má»™t stage (trạng thái))" -#: wt-status.c:169 wt-status.c:196 +#: wt-status.c:170 wt-status.c:197 msgid " (use \"git rm --cached <file>...\" to unstage)" msgstr " (dùng \"git rm --cached <táºp-tin>...\" để bá» trạng thái (stage))" -#: wt-status.c:173 +#: wt-status.c:174 msgid " (use \"git add <file>...\" to mark resolution)" msgstr " (dùng \"git add <táºp-tin>...\" để đánh dấu là cần giải quyết)" -#: wt-status.c:175 wt-status.c:179 +#: wt-status.c:176 wt-status.c:180 msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)" msgstr "" " (dùng \"git add/rm <táºp-tin>...\" nhÆ° là má»™t cách thÃch hợp để đánh dấu " "là cần được giải quyết)" -#: wt-status.c:177 +#: wt-status.c:178 msgid " (use \"git rm <file>...\" to mark resolution)" msgstr " (dùng \"git rm <táºp-tin>...\" để đánh dấu là cần giải quyết)" -#: wt-status.c:188 +#: wt-status.c:189 msgid "Changes to be committed:" msgstr "Những thay đổi sẽ được chuyển giao:" -#: wt-status.c:206 +#: wt-status.c:207 msgid "Changes not staged for commit:" msgstr "" "Các thay đổi không được đặt trạng thái (stage) cho lần chuyển giao (commit):" -#: wt-status.c:210 +#: wt-status.c:211 msgid " (use \"git add <file>...\" to update what will be committed)" msgstr "" " (dùng \"git add <táºp-tin>...\" để cáºp nháºt những gì cần chuyển giao " "(commit))" -#: wt-status.c:212 +#: wt-status.c:213 msgid " (use \"git add/rm <file>...\" to update what will be committed)" msgstr "" " (dùng \"git add/rm <táºp-tin>...\" để cáºp nháºt những gì sẽ được chuyển giao)" -#: wt-status.c:213 +#: wt-status.c:214 msgid "" " (use \"git checkout -- <file>...\" to discard changes in working directory)" msgstr "" " (dùng \"git checkout -- <táºp-tin>...\" để bá» thay đổi trong thÆ° mục là m " "việc)" -#: wt-status.c:215 +#: wt-status.c:216 msgid " (commit or discard the untracked or modified content in submodules)" msgstr "" " (chuyển giao (commit) hoặc là loại bá» các ná»™i dung không-bị-theo-vết hay " "đã bị chỉnh sá»a trong mô-Ä‘un-con)" -#: wt-status.c:227 +#: wt-status.c:228 #, c-format msgid " (use \"git %s <file>...\" to include in what will be committed)" msgstr "" " (dùng \"git %s <táºp-tin>...\" để thêm và o những gì cần chuyển giao " "(commit))" -#: wt-status.c:244 +#: wt-status.c:245 msgid "bug" msgstr "lá»—i" -#: wt-status.c:249 +#: wt-status.c:250 msgid "both deleted:" msgstr "bị xóa bởi cả hai:" -#: wt-status.c:250 +#: wt-status.c:251 msgid "added by us:" msgstr "được thêm và o bởi chúng ta:" -#: wt-status.c:251 +#: wt-status.c:252 msgid "deleted by them:" msgstr "bị xóa Ä‘i bởi há»:" -#: wt-status.c:252 +#: wt-status.c:253 msgid "added by them:" msgstr "được thêm và o bởi há»:" -#: wt-status.c:253 +#: wt-status.c:254 msgid "deleted by us:" msgstr "bị xóa bởi chúng ta:" -#: wt-status.c:254 +#: wt-status.c:255 msgid "both added:" msgstr "được thêm và o bởi cả hai:" -#: wt-status.c:255 +#: wt-status.c:256 msgid "both modified:" msgstr "bị sá»a bởi cả hai:" -#: wt-status.c:285 +#: wt-status.c:286 msgid "new commits, " msgstr "lần chuyển giao (commit) má»›i, " -#: wt-status.c:287 +#: wt-status.c:288 msgid "modified content, " msgstr "ná»™i dung bị sá»a đổi, " -#: wt-status.c:289 +#: wt-status.c:290 msgid "untracked content, " msgstr "ná»™i dung chÆ°a được theo dõi, " -#: wt-status.c:306 +#: wt-status.c:307 #, c-format msgid "new file: %s" msgstr "táºp tin má»›i: %s" -#: wt-status.c:309 +#: wt-status.c:310 #, c-format msgid "copied: %s -> %s" msgstr "đã sao chép: %s -> %s" -#: wt-status.c:312 +#: wt-status.c:313 #, c-format msgid "deleted: %s" msgstr "đã xóa: %s" -#: wt-status.c:315 +#: wt-status.c:316 #, c-format msgid "modified: %s" msgstr "đã sá»a đổi: %s" -#: wt-status.c:318 +#: wt-status.c:319 #, c-format msgid "renamed: %s -> %s" msgstr "đã đổi tên: %s -> %s" -#: wt-status.c:321 +#: wt-status.c:322 #, c-format msgid "typechange: %s" msgstr "đổi-kiểu: %s" -#: wt-status.c:324 +#: wt-status.c:325 #, c-format msgid "unknown: %s" msgstr "không hiểu: %s" -#: wt-status.c:327 +#: wt-status.c:328 #, c-format msgid "unmerged: %s" msgstr "chÆ°a hòa trá»™n: %s" -#: wt-status.c:330 +#: wt-status.c:331 #, c-format msgid "bug: unhandled diff status %c" msgstr "lá»—i: không lấy được trạng thái lệnh diff %c" @@ -1376,7 +1436,7 @@ msgstr "lá»—i: không lấy được trạng thái lệnh diff %c" msgid "You have unmerged paths." msgstr "Bạn có những Ä‘Æ°á»ng dẫn chÆ°a được hòa trá»™n." -#: wt-status.c:806 wt-status.c:958 +#: wt-status.c:806 msgid " (fix conflicts and run \"git commit\")" msgstr " (sá»a các xung Ä‘á»™t sau đó chạy \"git commit\")" @@ -1397,8 +1457,8 @@ msgid "The current patch is empty." msgstr "Miếng vá hiện tại bị trống rá»—ng." #: wt-status.c:829 -msgid " (fix conflicts and then run \"git am --resolved\")" -msgstr " (sá»a các xung Ä‘á»™t và sau đó chạy lệnh \"git am --resolved\")" +msgid " (fix conflicts and then run \"git am --continue\")" +msgstr " (sá»a các xung Ä‘á»™t và sau đó chạy lệnh \"git am --continue\")" #: wt-status.c:831 msgid " (use \"git am --skip\" to skip this patch)" @@ -1481,40 +1541,51 @@ msgstr "" msgid "You are currently cherry-picking." msgstr "Bạn hiện nay Ä‘ang thá»±c hiện việc cherry-pick." +#: wt-status.c:958 +msgid " (fix conflicts and run \"git cherry-pick --continue\")" +msgstr "" +" (sá»a các xung Ä‘á»™t và sau đó chạy lệnh \"git cherry-pick --continue\")" + #: wt-status.c:961 -msgid " (all conflicts fixed: run \"git commit\")" -msgstr " (khi tất cả các xung Ä‘á»™t đã sá»a xong: chạy lệnh \"git commit\")" +msgid " (all conflicts fixed: run \"git cherry-pick --continue\")" +msgstr "" +" (khi tất cả các xung Ä‘á»™t đã sá»a xong: chạy lệnh \"git cherry-pick --" +"continue\")" -#: wt-status.c:970 +#: wt-status.c:963 +msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)" +msgstr " (dùng \"git cherry-pick --abort\" để hủy bá» thao tác cherry-pick)" + +#: wt-status.c:972 #, c-format msgid "You are currently reverting commit %s." msgstr "Bạn hiện nay Ä‘ang thá»±c hiện thao tác revert lần chuyển giao “%sâ€." -#: wt-status.c:975 +#: wt-status.c:977 msgid " (fix conflicts and run \"git revert --continue\")" msgstr " (sá»a các xung Ä‘á»™t và sau đó chạy lệnh \"git revert --continue\")" -#: wt-status.c:978 +#: wt-status.c:980 msgid " (all conflicts fixed: run \"git revert --continue\")" msgstr "" " (khi tất cả các xung Ä‘á»™t đã sá»a xong: chạy lệnh \"git revert --continue\")" -#: wt-status.c:980 +#: wt-status.c:982 msgid " (use \"git revert --abort\" to cancel the revert operation)" msgstr " (dùng \"git revert --abort\" để hủy bá» thao tác revert)" -#: wt-status.c:991 +#: wt-status.c:993 #, c-format msgid "You are currently bisecting, started from branch '%s'." msgstr "" "Bạn hiện nay Ä‘ang thá»±c hiện thao tác di chuyển ná»a bÆ°á»›c (bisect), bắt đầu từ " "nhánh “%sâ€." -#: wt-status.c:995 +#: wt-status.c:997 msgid "You are currently bisecting." msgstr "Bạn hiện tại Ä‘ang thá»±c hiện việc bisect (chia đôi)." -#: wt-status.c:998 +#: wt-status.c:1000 msgid " (use \"git bisect reset\" to get back to the original branch)" msgstr " (dùng \"git bisect reset\" để quay trở lại nhánh nguyên thủy)" @@ -1522,31 +1593,35 @@ msgstr " (dùng \"git bisect reset\" để quay trở lại nhánh nguyên thá» msgid "On branch " msgstr "Trên nhánh " -#: wt-status.c:1184 +#: wt-status.c:1180 +msgid "rebase in progress; onto " +msgstr "rebase Ä‘ang được thá»±c hiện: lên trên" + +#: wt-status.c:1187 msgid "HEAD detached at " msgstr "HEAD được tách rá»i tại" -#: wt-status.c:1186 +#: wt-status.c:1189 msgid "HEAD detached from " msgstr "HEAD được tách rá»i từ" -#: wt-status.c:1189 +#: wt-status.c:1192 msgid "Not currently on any branch." msgstr "Hiện tại chẳng ở nhánh nà o cả." -#: wt-status.c:1206 +#: wt-status.c:1209 msgid "Initial commit" msgstr "Lần chuyển giao (commit) khởi đầu" -#: wt-status.c:1220 +#: wt-status.c:1223 msgid "Untracked files" msgstr "Những táºp tin chÆ°a được theo dõi" -#: wt-status.c:1222 +#: wt-status.c:1225 msgid "Ignored files" msgstr "Những táºp tin bị lá» Ä‘i" -#: wt-status.c:1226 +#: wt-status.c:1229 #, c-format msgid "" "It took %.2f seconds to enumerate untracked files. 'status -uno'\n" @@ -1558,32 +1633,32 @@ msgstr "" "có lẽ là m nó nhanh hÆ¡n, nhÆ°ng bạn phải cẩn tháºn đừng quên mình phải\n" "tá»± thêm các táºp tin má»›i (xem “git help statusâ€.." -#: wt-status.c:1232 +#: wt-status.c:1235 #, c-format msgid "Untracked files not listed%s" msgstr "Những táºp tin không bị theo vết không được liệt kê ra %s" -#: wt-status.c:1234 +#: wt-status.c:1237 msgid " (use -u option to show untracked files)" msgstr " (dùng tùy chá»n -u để hiển thị các táºp tin chÆ°a được theo dõi)" -#: wt-status.c:1240 +#: wt-status.c:1243 msgid "No changes" msgstr "Không có thay đổi nà o" -#: wt-status.c:1245 +#: wt-status.c:1248 #, c-format msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n" msgstr "" "không có thay đổi nà o được thêm và o commit (dùng \"git add\" và /hoặc \"git " "commit -a\")\n" -#: wt-status.c:1248 +#: wt-status.c:1251 #, c-format msgid "no changes added to commit\n" msgstr "không có thay đổi nà o được thêm và o lần chuyển giao (commit)\n" -#: wt-status.c:1251 +#: wt-status.c:1254 #, c-format msgid "" "nothing added to commit but untracked files present (use \"git add\" to " @@ -1592,58 +1667,58 @@ msgstr "" "không có gì được thêm và o lần chuyển giao (commit) nhÆ°ng có những táºp tin " "không được theo dấu vết hiện diện (dùng \"git add\" để Ä‘Æ°a và o theo dõi)\n" -#: wt-status.c:1254 +#: wt-status.c:1257 #, c-format msgid "nothing added to commit but untracked files present\n" msgstr "" "không có gì được thêm và o lần chuyển giao (commit) nhÆ°ng có những táºp tin " "không được theo dấu vết hiện diện\n" -#: wt-status.c:1257 +#: wt-status.c:1260 #, c-format msgid "nothing to commit (create/copy files and use \"git add\" to track)\n" msgstr "" " không có gì để commit (tạo/sao-chép các táºp tin và dùng \"git add\" để theo " "dõi dấu vết)\n" -#: wt-status.c:1260 wt-status.c:1265 +#: wt-status.c:1263 wt-status.c:1268 #, c-format msgid "nothing to commit\n" msgstr "không có gì để chuyển giao (commit)\n" -#: wt-status.c:1263 +#: wt-status.c:1266 #, c-format msgid "nothing to commit (use -u to show untracked files)\n" msgstr "" "không có gì để chuyển giao (commit) (dùng -u để bá» các táºp tin cần theo dấu " "vết)\n" -#: wt-status.c:1267 +#: wt-status.c:1270 #, c-format msgid "nothing to commit, working directory clean\n" msgstr "không có gì để chuyển giao (commit), thÆ° mục là m việc sạch sẽ\n" -#: wt-status.c:1375 +#: wt-status.c:1378 msgid "HEAD (no branch)" msgstr "HEAD (không nhánh)" -#: wt-status.c:1381 +#: wt-status.c:1384 msgid "Initial commit on " msgstr "Lần chuyển giao (commit) khởi tạo trên " -#: wt-status.c:1396 +#: wt-status.c:1399 msgid "behind " msgstr "đằng sau " -#: wt-status.c:1399 wt-status.c:1402 +#: wt-status.c:1402 wt-status.c:1405 msgid "ahead " msgstr "phÃa trÆ°á»›c " -#: wt-status.c:1404 +#: wt-status.c:1407 msgid ", behind " msgstr ", đằng sau " -#: compat/precompose_utf8.c:58 builtin/clone.c:352 +#: compat/precompose_utf8.c:58 builtin/clone.c:351 #, c-format msgid "failed to unlink '%s'" msgstr "bá» liên kết (unlink) %s không thà nh công" @@ -1731,7 +1806,7 @@ msgstr "" msgid "unexpected diff status %c" msgstr "trạng thái lệnh diff không nhÆ° mong đợi %c" -#: builtin/add.c:149 builtin/commit.c:233 +#: builtin/add.c:149 builtin/commit.c:252 msgid "updating files failed" msgstr "Cáºp nháºt táºp tin gặp lá»—i" @@ -1745,7 +1820,7 @@ msgid "Unstaged changes after refreshing the index:" msgstr "" "Các thay đổi không được lÆ°u trạng thái sau khi là m tÆ°Æ¡i má»›i lại bảng mục lục:" -#: builtin/add.c:256 builtin/add.c:572 builtin/rm.c:275 +#: builtin/add.c:256 builtin/add.c:573 builtin/rm.c:337 #, c-format msgid "pathspec '%s' did not match any files" msgstr "pathspec “%s†không khá»›p vá»›i bất kỳ táºp tin nà o" @@ -1754,133 +1829,133 @@ msgstr "pathspec “%s†không khá»›p vá»›i bất kỳ táºp tin nà o" msgid "Could not read the index" msgstr "Không thể Ä‘á»c bảng mục lục" -#: builtin/add.c:349 +#: builtin/add.c:350 #, c-format msgid "Could not open '%s' for writing." msgstr "Không thể mở “%s†để ghi." -#: builtin/add.c:353 +#: builtin/add.c:354 msgid "Could not write patch" msgstr "Không thể ghi ra miếng vá" -#: builtin/add.c:358 +#: builtin/add.c:359 #, c-format msgid "Could not stat '%s'" msgstr "không thể lấy trạng thái vỠ“%sâ€" -#: builtin/add.c:360 +#: builtin/add.c:361 msgid "Empty patch. Aborted." msgstr "Miếng vá trống rá»—ng. Äã bá» qua." -#: builtin/add.c:366 +#: builtin/add.c:367 #, c-format msgid "Could not apply '%s'" msgstr "Không thể apply (áp dụng miếng vá) “%sâ€" -#: builtin/add.c:376 +#: builtin/add.c:377 msgid "The following paths are ignored by one of your .gitignore files:\n" msgstr "" "Các Ä‘Æ°á»ng dẫn theo sau đây sẽ bị lá» Ä‘i bởi má»™t trong các táºp tin .gitignore " "của bạn:\n" -#: builtin/add.c:393 builtin/clean.c:161 builtin/fetch.c:78 builtin/mv.c:63 -#: builtin/prune-packed.c:76 builtin/push.c:425 builtin/remote.c:1253 -#: builtin/rm.c:206 +#: builtin/add.c:394 builtin/clean.c:875 builtin/fetch.c:78 builtin/mv.c:63 +#: builtin/prune-packed.c:73 builtin/push.c:451 builtin/remote.c:1253 +#: builtin/rm.c:268 msgid "dry run" msgstr "chạy thá»" -#: builtin/add.c:394 builtin/apply.c:4409 builtin/check-ignore.c:19 -#: builtin/commit.c:1152 builtin/count-objects.c:95 builtin/fsck.c:613 -#: builtin/log.c:1518 builtin/mv.c:62 builtin/read-tree.c:112 +#: builtin/add.c:395 builtin/apply.c:4410 builtin/check-ignore.c:19 +#: builtin/commit.c:1220 builtin/count-objects.c:95 builtin/fsck.c:613 +#: builtin/log.c:1573 builtin/mv.c:62 builtin/read-tree.c:113 msgid "be verbose" msgstr "chi tiết" -#: builtin/add.c:396 +#: builtin/add.c:397 msgid "interactive picking" msgstr "sá»a bằng cách tÆ°Æ¡ng tác" -#: builtin/add.c:397 builtin/checkout.c:1063 builtin/reset.c:258 +#: builtin/add.c:398 builtin/checkout.c:1073 builtin/reset.c:261 msgid "select hunks interactively" msgstr "chá»n “hunks†má»™t cách tÆ°Æ¡ng tác" -#: builtin/add.c:398 +#: builtin/add.c:399 msgid "edit current diff and apply" msgstr "sá»a diff hiện nay và áp dụng nó" -#: builtin/add.c:399 +#: builtin/add.c:400 msgid "allow adding otherwise ignored files" msgstr "cho phép thêm các táºp tin bị bá» qua khác" -#: builtin/add.c:400 +#: builtin/add.c:401 msgid "update tracked files" msgstr "cáºp nháºt các táºp tin được theo vết" -#: builtin/add.c:401 +#: builtin/add.c:402 msgid "record only the fact that the path will be added later" msgstr "chỉ ghi lại sá»± việc mà đưá»ng dẫn sẽ được thêm và o sau" -#: builtin/add.c:402 +#: builtin/add.c:403 msgid "add changes from all tracked and untracked files" msgstr "" "thêm các thay đổi từ tất cả các táºp tin có cÅ©ng nhÆ° không được theo dõi dấu " "vết" #. takes no arguments -#: builtin/add.c:405 +#: builtin/add.c:406 msgid "ignore paths removed in the working tree (same as --no-all)" msgstr "" "lá» Ä‘i các Ä‘Æ°á»ng dẫn bị gỡ bá» trong cây thÆ° mục là m việc (giống vá»›i --no-all)" -#: builtin/add.c:407 +#: builtin/add.c:408 msgid "don't add, only refresh the index" msgstr "không thêm, chỉ là m tÆ°Æ¡i má»›i bảng mục lục" -#: builtin/add.c:408 +#: builtin/add.c:409 msgid "just skip files which cannot be added because of errors" msgstr "chie bá» qua những táºp tin mà nó không thể được thêm và o bởi vì gặp lá»—i" -#: builtin/add.c:409 +#: builtin/add.c:410 msgid "check if - even missing - files are ignored in dry run" msgstr "" "kiểm tra xem - tháºm chà thiếu - táºp tin bị bá» qua trong quá trình chạy thá»" -#: builtin/add.c:431 +#: builtin/add.c:432 #, c-format msgid "Use -f if you really want to add them.\n" msgstr "Sá» dụng tùy chá»n -f nếu bạn thá»±c sá»± muốn thêm chúng và o.\n" -#: builtin/add.c:432 +#: builtin/add.c:433 msgid "no files added" msgstr "chÆ°a có táºp tin nà o được thêm và o" -#: builtin/add.c:438 +#: builtin/add.c:439 msgid "adding files failed" msgstr "thêm táºp tin gặp lá»—i" -#: builtin/add.c:477 +#: builtin/add.c:478 msgid "-A and -u are mutually incompatible" msgstr "-A và -u xung khắc nhau" -#: builtin/add.c:495 +#: builtin/add.c:496 msgid "Option --ignore-missing can only be used together with --dry-run" msgstr "Tùy chá»n --ignore-missing chỉ có thể được dùng cùng vá»›i --dry-run" -#: builtin/add.c:525 +#: builtin/add.c:526 #, c-format msgid "Nothing specified, nothing added.\n" msgstr "Không có gì được chỉ ra, không có gì được thêm và o.\n" -#: builtin/add.c:526 +#: builtin/add.c:527 #, c-format msgid "Maybe you wanted to say 'git add .'?\n" msgstr "Có lẽ bạn muốn là “git add .†phải không?\n" -#: builtin/add.c:532 builtin/check-ignore.c:66 builtin/clean.c:204 -#: builtin/commit.c:293 builtin/mv.c:82 builtin/rm.c:235 +#: builtin/add.c:533 builtin/check-ignore.c:161 builtin/clean.c:919 +#: builtin/commit.c:312 builtin/mv.c:82 builtin/rm.c:297 msgid "index file corrupt" msgstr "táºp tin ghi bảng mục lục bị há»ng" -#: builtin/add.c:604 builtin/apply.c:4505 builtin/mv.c:229 builtin/rm.c:370 +#: builtin/add.c:605 builtin/apply.c:4506 builtin/mv.c:229 builtin/rm.c:432 msgid "Unable to write new index file" msgstr "Không thể ghi táºp tin lÆ°u bảng mục lục má»›i" @@ -2067,298 +2142,298 @@ msgstr "vá gặp lá»—i: %s:%ld" msgid "cannot checkout %s" msgstr "không thể \"checkout\" %s" -#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3193 +#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3194 #, c-format msgid "read of %s failed" msgstr "Ä‘á»c %s gặp lá»—i" -#: builtin/apply.c:3173 builtin/apply.c:3395 +#: builtin/apply.c:3174 builtin/apply.c:3396 #, c-format msgid "path %s has been renamed/deleted" msgstr "Ä‘Æ°á»ng dẫn %s đã bị xóa/đổi tên" -#: builtin/apply.c:3254 builtin/apply.c:3409 +#: builtin/apply.c:3255 builtin/apply.c:3410 #, c-format msgid "%s: does not exist in index" msgstr "%s: không tồn tại trong bảng mục lục" -#: builtin/apply.c:3258 builtin/apply.c:3401 builtin/apply.c:3423 +#: builtin/apply.c:3259 builtin/apply.c:3402 builtin/apply.c:3424 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: builtin/apply.c:3263 builtin/apply.c:3417 +#: builtin/apply.c:3264 builtin/apply.c:3418 #, c-format msgid "%s: does not match index" msgstr "%s: không khá»›p trong mục lục" -#: builtin/apply.c:3365 +#: builtin/apply.c:3366 msgid "removal patch leaves file contents" msgstr "loại bá» miếng vá để lại ná»™i dung táºp tin" -#: builtin/apply.c:3434 +#: builtin/apply.c:3435 #, c-format msgid "%s: wrong type" msgstr "%s: sai kiểu" -#: builtin/apply.c:3436 +#: builtin/apply.c:3437 #, c-format msgid "%s has type %o, expected %o" msgstr "%s có kiểu %o, mong chá» %o" -#: builtin/apply.c:3537 +#: builtin/apply.c:3538 #, c-format msgid "%s: already exists in index" msgstr "%s: đã có từ trÆ°á»›c trong bảng mục lục" -#: builtin/apply.c:3540 +#: builtin/apply.c:3541 #, c-format msgid "%s: already exists in working directory" msgstr "%s: đã sẵn có trong thÆ° mục Ä‘ang là m việc" -#: builtin/apply.c:3560 +#: builtin/apply.c:3561 #, c-format msgid "new mode (%o) of %s does not match old mode (%o)" msgstr "chế Ä‘á»™ má»›i (%o) của %s không khá»›p vá»›i chế Ä‘á»™ cÅ© (%o)" -#: builtin/apply.c:3565 +#: builtin/apply.c:3566 #, c-format msgid "new mode (%o) of %s does not match old mode (%o) of %s" msgstr "chế Ä‘á»™ má»›i (%o) của %s không khá»›p vá»›i chế Ä‘á»™ cÅ© (%o) của %s" -#: builtin/apply.c:3573 +#: builtin/apply.c:3574 #, c-format msgid "%s: patch does not apply" msgstr "%s: miếng vá không được áp dụng" -#: builtin/apply.c:3586 +#: builtin/apply.c:3587 #, c-format msgid "Checking patch %s..." msgstr "Äang kiểm tra miếng vá %s..." -#: builtin/apply.c:3679 builtin/checkout.c:216 builtin/reset.c:124 +#: builtin/apply.c:3680 builtin/checkout.c:216 builtin/reset.c:127 #, c-format msgid "make_cache_entry failed for path '%s'" msgstr "make_cache_entry gặp lá»—i đối vá»›i Ä‘Æ°á»ng dẫn “%sâ€" -#: builtin/apply.c:3822 +#: builtin/apply.c:3823 #, c-format msgid "unable to remove %s from index" msgstr "không thể gỡ bá» %s từ mục lục" -#: builtin/apply.c:3850 +#: builtin/apply.c:3851 #, c-format -msgid "corrupt patch for subproject %s" -msgstr "miếng vá sai há»ng cho dá»± án con (subproject) %s" +msgid "corrupt patch for submodule %s" +msgstr "miếng vá sai há»ng cho mô-Ä‘un-con (subproject) %s" -#: builtin/apply.c:3854 +#: builtin/apply.c:3855 #, c-format msgid "unable to stat newly created file '%s'" msgstr "không thể lấy trạng thái vá» táºp tin %s má»›i hÆ¡n đã được tạo" -#: builtin/apply.c:3859 +#: builtin/apply.c:3860 #, c-format msgid "unable to create backing store for newly created file %s" msgstr "không thể tạo “backing store†cho táºp tin được tạo má»›i hÆ¡n %s" -#: builtin/apply.c:3862 builtin/apply.c:3970 +#: builtin/apply.c:3863 builtin/apply.c:3971 #, c-format msgid "unable to add cache entry for %s" msgstr "không thể thêm mục nhá»› tạm cho %s" -#: builtin/apply.c:3895 +#: builtin/apply.c:3896 #, c-format msgid "closing file '%s'" msgstr "Ä‘ang đóng táºp tin “%sâ€" -#: builtin/apply.c:3944 +#: builtin/apply.c:3945 #, c-format msgid "unable to write file '%s' mode %o" msgstr "không thể ghi và o táºp tin “%s†chế Ä‘á»™ (mode) %o" -#: builtin/apply.c:4031 +#: builtin/apply.c:4032 #, c-format msgid "Applied patch %s cleanly." msgstr "Äã áp dụng miếng và %s má»™t cách sạch sẽ." -#: builtin/apply.c:4039 +#: builtin/apply.c:4040 msgid "internal error" msgstr "lá»—i ná»™i bá»™" #. Say this even without --verbose -#: builtin/apply.c:4042 +#: builtin/apply.c:4043 #, c-format msgid "Applying patch %%s with %d reject..." msgid_plural "Applying patch %%s with %d rejects..." msgstr[0] "Äang áp dụng miếng vá %%s vá»›i %d lần từ chối..." msgstr[1] "Äang áp dụng miếng vá %%s vá»›i %d lần từ chối..." -#: builtin/apply.c:4052 +#: builtin/apply.c:4053 #, c-format msgid "truncating .rej filename to %.*s.rej" msgstr "Ä‘ang cắt cụt tên táºp tin .rej thà nh %.*s.rej" -#: builtin/apply.c:4073 +#: builtin/apply.c:4074 #, c-format msgid "Hunk #%d applied cleanly." msgstr "Khối nhá»› #%d được áp dụng gá»n gà ng." -#: builtin/apply.c:4076 +#: builtin/apply.c:4077 #, c-format msgid "Rejected hunk #%d." msgstr "hunk #%d bị từ chối." -#: builtin/apply.c:4226 +#: builtin/apply.c:4227 msgid "unrecognized input" msgstr "không thừa nháºn đầu và o" -#: builtin/apply.c:4237 +#: builtin/apply.c:4238 msgid "unable to read index file" msgstr "không thể Ä‘á»c táºp tin lÆ°u bảng mục lục" -#: builtin/apply.c:4356 builtin/apply.c:4359 builtin/clone.c:92 +#: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:91 #: builtin/fetch.c:63 msgid "path" msgstr "Ä‘Æ°á»ng-dẫn" -#: builtin/apply.c:4357 +#: builtin/apply.c:4358 msgid "don't apply changes matching the given path" msgstr "không áp dụng các thay đổi khá»›p vá»›i Ä‘Æ°á»ng dẫn đã cho" -#: builtin/apply.c:4360 +#: builtin/apply.c:4361 msgid "apply changes matching the given path" msgstr "áp dụng các thay đổi khá»›p vá»›i Ä‘Æ°á»ng dẫn đã cho" -#: builtin/apply.c:4362 +#: builtin/apply.c:4363 msgid "num" msgstr "số" -#: builtin/apply.c:4363 +#: builtin/apply.c:4364 msgid "remove <num> leading slashes from traditional diff paths" msgstr "gỡ bá» <số> phần dẫn đầu (slashe) từ Ä‘Æ°á»ng dẫn diff cổ Ä‘iển" -#: builtin/apply.c:4366 +#: builtin/apply.c:4367 msgid "ignore additions made by the patch" msgstr "lá» Ä‘i phần phụ thêm tạo ra bởi miếng vá" -#: builtin/apply.c:4368 +#: builtin/apply.c:4369 msgid "instead of applying the patch, output diffstat for the input" msgstr "" "thay vì áp dụng má»™t miếng vá, kết xuất kết quả từ lệnh diffstat cho đầu ra" -#: builtin/apply.c:4372 +#: builtin/apply.c:4373 msgid "show number of added and deleted lines in decimal notation" msgstr "" "hiển thị số lượng các dòng được thêm và o và xóa Ä‘i theo ký hiệu tháºp phân" -#: builtin/apply.c:4374 +#: builtin/apply.c:4375 msgid "instead of applying the patch, output a summary for the input" msgstr "thay vì áp dụng má»™t miếng vá, kết xuất kết quả cho đầu và o" -#: builtin/apply.c:4376 +#: builtin/apply.c:4377 msgid "instead of applying the patch, see if the patch is applicable" msgstr "thay vì áp dụng miếng vá, hãy xem xem miếng vá có thÃch hợp không" -#: builtin/apply.c:4378 +#: builtin/apply.c:4379 msgid "make sure the patch is applicable to the current index" msgstr "hãy chắc chắn là miếng vá thÃch hợp vá»›i bảng mục lục hiện hà nh" -#: builtin/apply.c:4380 +#: builtin/apply.c:4381 msgid "apply a patch without touching the working tree" msgstr "áp dụng má»™t miếng vá mà không Ä‘á»™ng chạm đến cây là m việc" -#: builtin/apply.c:4382 +#: builtin/apply.c:4383 msgid "also apply the patch (use with --stat/--summary/--check)" msgstr "" "đồng thá»i áp dụng miếng vá (dùng vá»›i tùy chá»n --stat/--summary/--check)" -#: builtin/apply.c:4384 +#: builtin/apply.c:4385 msgid "attempt three-way merge if a patch does not apply" msgstr "thá» hòa trá»™n kiểu three-way nếu việc vá không thể thá»±c hiện được" -#: builtin/apply.c:4386 +#: builtin/apply.c:4387 msgid "build a temporary index based on embedded index information" msgstr "" "xây dá»±ng bảng mục lục tạm thá»i trên cÆ¡ sở thông tin bảng mục lục được nhúng" -#: builtin/apply.c:4388 builtin/checkout-index.c:197 builtin/ls-files.c:456 +#: builtin/apply.c:4389 builtin/checkout-index.c:197 builtin/ls-files.c:462 msgid "paths are separated with NUL character" msgstr "các Ä‘Æ°á»ng dẫn bị ngăn cách bởi ký tá»± NULL" -#: builtin/apply.c:4391 +#: builtin/apply.c:4392 msgid "ensure at least <n> lines of context match" msgstr "đảm bảo rằng có Ãt nhất <n> dòng ná»™i dung khá»›p" -#: builtin/apply.c:4392 +#: builtin/apply.c:4393 msgid "action" msgstr "hà nh Ä‘á»™ng" -#: builtin/apply.c:4393 +#: builtin/apply.c:4394 msgid "detect new or modified lines that have whitespace errors" msgstr "tìm thấy má»™t dòng má»›i hoặc bị sá»a đổi mà nó có lá»—i do khoảng trắng" -#: builtin/apply.c:4396 builtin/apply.c:4399 +#: builtin/apply.c:4397 builtin/apply.c:4400 msgid "ignore changes in whitespace when finding context" msgstr "lá» Ä‘i sá»± thay đổi do khoảng trắng khi quét ná»™i dung" -#: builtin/apply.c:4402 +#: builtin/apply.c:4403 msgid "apply the patch in reverse" msgstr "áp dụng miếng vá theo chiá»u ngược" -#: builtin/apply.c:4404 +#: builtin/apply.c:4405 msgid "don't expect at least one line of context" msgstr "đừng hy vá»ng có Ãt nhất má»™t dòng ná»™i dung" -#: builtin/apply.c:4406 +#: builtin/apply.c:4407 msgid "leave the rejected hunks in corresponding *.rej files" msgstr "để lại khối dữ liệu bị từ chối trong các táºp tin *.rej tÆ°Æ¡ng ứng" -#: builtin/apply.c:4408 +#: builtin/apply.c:4409 msgid "allow overlapping hunks" msgstr "cho phép chồng khối nhá»›" -#: builtin/apply.c:4411 +#: builtin/apply.c:4412 msgid "tolerate incorrectly detected missing new-line at the end of file" msgstr "" "đã dò tìm thấy dung sai không chÃnh xác thiếu dòng má»›i tại cuối táºp tin" -#: builtin/apply.c:4414 +#: builtin/apply.c:4415 msgid "do not trust the line counts in the hunk headers" msgstr "không tin số lượng dòng trong phần đầu khối dữ liệu" -#: builtin/apply.c:4416 +#: builtin/apply.c:4417 msgid "root" msgstr "root" -#: builtin/apply.c:4417 +#: builtin/apply.c:4418 msgid "prepend <root> to all filenames" msgstr "treo thêm <root> và o tất cả các tên táºp tin" -#: builtin/apply.c:4439 +#: builtin/apply.c:4440 msgid "--3way outside a repository" msgstr "--3way ở ngoà i má»™t kho chứa" -#: builtin/apply.c:4447 +#: builtin/apply.c:4448 msgid "--index outside a repository" msgstr "--index ở ngoà i má»™t kho chứa" -#: builtin/apply.c:4450 +#: builtin/apply.c:4451 msgid "--cached outside a repository" msgstr "--cached ở ngoà i má»™t kho chứa" -#: builtin/apply.c:4466 +#: builtin/apply.c:4467 #, c-format msgid "can't open patch '%s'" msgstr "không thể mở miếng vá “%sâ€" -#: builtin/apply.c:4480 +#: builtin/apply.c:4481 #, c-format msgid "squelched %d whitespace error" msgid_plural "squelched %d whitespace errors" msgstr[0] "đã chấm dứt %d lá»—i khoảng trắng" msgstr[1] "đã chấm dứt %d lá»—i khoảng trắng" -#: builtin/apply.c:4486 builtin/apply.c:4496 +#: builtin/apply.c:4487 builtin/apply.c:4497 #, c-format msgid "%d line adds whitespace errors." msgid_plural "%d lines add whitespace errors." @@ -2414,105 +2489,105 @@ msgstr "" "cáºp nháºt BISECT_HEAD thay vì lấy ra (checking out) lần chuyển giao (commit) " "hiện hà nh" -#: builtin/blame.c:25 +#: builtin/blame.c:26 msgid "git blame [options] [rev-opts] [rev] [--] file" msgstr "git blame [các-tùy-chá»n] [rev-opts] [rev] [--] táºp-tin" -#: builtin/blame.c:30 +#: builtin/blame.c:31 msgid "[rev-opts] are documented in git-rev-list(1)" msgstr "[rev-opts] được mô tả trong git-rev-list(1)" -#: builtin/blame.c:2355 +#: builtin/blame.c:2276 msgid "Show blame entries as we find them, incrementally" msgstr "Hiển thị các mục “blame†nhÆ° là chúng ta thấy chúng, tăng dần" -#: builtin/blame.c:2356 +#: builtin/blame.c:2277 msgid "Show blank SHA-1 for boundary commits (Default: off)" msgstr "" "Hiển thị SHA-1 trắng cho những lần chuyển giao biên giá»›i (Mặc định: off)" -#: builtin/blame.c:2357 +#: builtin/blame.c:2278 msgid "Do not treat root commits as boundaries (Default: off)" msgstr "Không coi các lần chuyển giao gốc là giá»›i hạn (Mặc định: off)" -#: builtin/blame.c:2358 +#: builtin/blame.c:2279 msgid "Show work cost statistics" msgstr "Hiển thị thống kê công sức là m việc" -#: builtin/blame.c:2359 +#: builtin/blame.c:2280 msgid "Show output score for blame entries" msgstr "Hiển thị kết xuất Ä‘iểm số có các mục tin “blameâ€" -#: builtin/blame.c:2360 +#: builtin/blame.c:2281 msgid "Show original filename (Default: auto)" msgstr "Hiển thị tên táºp tin gốc (Mặc định: auto)" -#: builtin/blame.c:2361 +#: builtin/blame.c:2282 msgid "Show original linenumber (Default: off)" msgstr "Hiển thị số dòng gốc (Mặc định: off)" -#: builtin/blame.c:2362 +#: builtin/blame.c:2283 msgid "Show in a format designed for machine consumption" msgstr "Hiển thị ở định dạng đã thiết kế cho sá»± tiêu dùng bằng máy" -#: builtin/blame.c:2363 +#: builtin/blame.c:2284 msgid "Show porcelain format with per-line commit information" msgstr "Hiển thị định dạng “porcelain†vá»›i thông tin chuyển giao má»—i dòng" -#: builtin/blame.c:2364 +#: builtin/blame.c:2285 msgid "Use the same output mode as git-annotate (Default: off)" msgstr "Dùng cùng chế Ä‘á»™ xuất ra vóigit-annotate (Mặc định: off)" -#: builtin/blame.c:2365 +#: builtin/blame.c:2286 msgid "Show raw timestamp (Default: off)" msgstr "Hiển thị dấu vết thá»i gian dạng thô (Mặc định: off)" -#: builtin/blame.c:2366 +#: builtin/blame.c:2287 msgid "Show long commit SHA1 (Default: off)" msgstr "Hiển thị SHA1 của lần chuyển giao (commit) dạng dà i (Mặc định: off)" -#: builtin/blame.c:2367 +#: builtin/blame.c:2288 msgid "Suppress author name and timestamp (Default: off)" msgstr "Không hiển thị tên tác giả và dấu vết thá»i gian (Mặc định: off)" -#: builtin/blame.c:2368 +#: builtin/blame.c:2289 msgid "Show author email instead of name (Default: off)" msgstr "Hiển thị thÆ° Ä‘iện tá» của tác giả thay vì tên (Mặc định: off)" -#: builtin/blame.c:2369 +#: builtin/blame.c:2290 msgid "Ignore whitespace differences" msgstr "Bá» qua các khác biệt do khoảng trắng gây ra" -#: builtin/blame.c:2370 +#: builtin/blame.c:2291 msgid "Spend extra cycles to find better match" msgstr "Tiêu thụ thêm năng tà i nguyên máy móc để tìm kiếm tốt hÆ¡n nữa" -#: builtin/blame.c:2371 +#: builtin/blame.c:2292 msgid "Use revisions from <file> instead of calling git-rev-list" msgstr "" "Sá» dụng Ä‘iểm xét duyệt (revision) từ <táºp tin> thay vì gá»i “git-rev-listâ€" -#: builtin/blame.c:2372 +#: builtin/blame.c:2293 msgid "Use <file>'s contents as the final image" msgstr "Sá» dụng ná»™i dung của <táºp tin> nhÆ° là ảnh cuối cùng" -#: builtin/blame.c:2373 builtin/blame.c:2374 +#: builtin/blame.c:2294 builtin/blame.c:2295 msgid "score" msgstr "Ä‘iểm số" -#: builtin/blame.c:2373 +#: builtin/blame.c:2294 msgid "Find line copies within and across files" msgstr "Tìm các bản sao chép dòng trong và ngang qua táºp tin" -#: builtin/blame.c:2374 +#: builtin/blame.c:2295 msgid "Find line movements within and across files" msgstr "Tìm các di chuyển dòng trong và ngang qua táºp tin" -#: builtin/blame.c:2375 +#: builtin/blame.c:2296 msgid "n,m" msgstr "n,m" -#: builtin/blame.c:2375 +#: builtin/blame.c:2296 msgid "Process only line range n,m, counting from 1" msgstr "Xá» lý chỉ dòng vùng n,m, tÃnh từ 1" @@ -2744,8 +2819,8 @@ msgid "act on remote-tracking branches" msgstr "thao tác trên nhánh “remote-trackingâ€" #: builtin/branch.c:805 builtin/branch.c:811 builtin/branch.c:832 -#: builtin/branch.c:838 builtin/commit.c:1368 builtin/commit.c:1369 -#: builtin/commit.c:1370 builtin/commit.c:1371 builtin/tag.c:468 +#: builtin/branch.c:838 builtin/commit.c:1433 builtin/commit.c:1434 +#: builtin/commit.c:1435 builtin/commit.c:1436 builtin/tag.c:468 msgid "commit" msgstr "commit" @@ -2809,7 +2884,7 @@ msgstr "liệt kê các nhánh trong các cá»™t" msgid "Failed to resolve HEAD as a valid ref." msgstr "Gặp lá»—i khi phân giải HEAD nhÆ° là má»™t tham chiếu (ref) hợp lệ." -#: builtin/branch.c:860 builtin/clone.c:619 +#: builtin/branch.c:860 builtin/clone.c:630 msgid "HEAD not found below refs/heads!" msgstr "không tìm thấy HEAD ở dÆ°á»›i refs/heads!" @@ -2933,44 +3008,44 @@ msgstr "Cần má»™t kho chứa để mà tạo má»™t bundle." msgid "Need a repository to unbundle." msgstr "Cần má»™t kho chứa để mà bung má»™t bundle." -#: builtin/cat-file.c:176 +#: builtin/cat-file.c:285 msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>" msgstr "git cat-file (-t|-s|-e|-p|<kiểu>|--textconv) <đối tượng>" -#: builtin/cat-file.c:177 +#: builtin/cat-file.c:286 msgid "git cat-file (--batch|--batch-check) < <list_of_objects>" msgstr "git cat-file (--batch|--batch-check) < <danh-sách-đối-tượng>" -#: builtin/cat-file.c:195 +#: builtin/cat-file.c:323 msgid "<type> can be one of: blob, tree, commit, tag" msgstr "<kiểu> là má»™t trong số: blob, tree, commit, tag" -#: builtin/cat-file.c:196 +#: builtin/cat-file.c:324 msgid "show object type" msgstr "hiển thị kiểu đối tượng" -#: builtin/cat-file.c:197 +#: builtin/cat-file.c:325 msgid "show object size" msgstr "hiển thị kÃch thÆ°á»›c đối tượng" -#: builtin/cat-file.c:199 +#: builtin/cat-file.c:327 msgid "exit with zero when there's no error" msgstr "thoát vá»›i 0 khi không có lá»—i" -#: builtin/cat-file.c:200 +#: builtin/cat-file.c:328 msgid "pretty-print object's content" msgstr "in ná»™i dung đối tượng dạng dá»… Ä‘á»c" -#: builtin/cat-file.c:202 +#: builtin/cat-file.c:330 msgid "for blob objects, run textconv on object's content" msgstr "vá»›i đối tượng blob, chạy lệnh textconv trên ná»™i dung của đối tượng" -#: builtin/cat-file.c:204 +#: builtin/cat-file.c:332 msgid "show info and content of objects fed from the standard input" msgstr "" "hiển thị thông tin và ná»™i dung của các đối tượng lấy từ đầu và o tiêu chuẩn" -#: builtin/cat-file.c:207 +#: builtin/cat-file.c:335 msgid "show info about objects fed from the standard input" msgstr "hiển thị các thông tin vỠđối tượng fed từ đầu và o tiêu chuẩn" @@ -2999,30 +3074,55 @@ msgstr "Ä‘á»c tên táºp tin từ đầu và o tiêu chuẩn" msgid "input paths are terminated by a null character" msgstr "các Ä‘Æ°á»ng dẫn được ngăn cách bởi ký tá»± null" -#: builtin/check-ignore.c:18 builtin/checkout.c:1044 builtin/gc.c:177 +#: builtin/check-ignore.c:18 builtin/checkout.c:1054 builtin/gc.c:177 msgid "suppress progress reporting" msgstr "chặn các báo cáo tiến trình hoạt Ä‘á»™ng" -#: builtin/check-ignore.c:146 +#: builtin/check-ignore.c:26 +msgid "show non-matching input paths" +msgstr "hiển thị những Ä‘Æ°á»ng dẫn đầu và o không khá»›p vá»›i mẫu" + +#: builtin/check-ignore.c:143 msgid "cannot specify pathnames with --stdin" msgstr "không thể chỉ định các tên Ä‘Æ°á»ng dẫn vá»›i --stdin" -#: builtin/check-ignore.c:149 +#: builtin/check-ignore.c:146 msgid "-z only makes sense with --stdin" msgstr "-z chỉ hợp lý vá»›i --stdin" -#: builtin/check-ignore.c:151 +#: builtin/check-ignore.c:148 msgid "no path specified" msgstr "chÆ°a ghi rõ Ä‘Æ°á»ng dẫn" -#: builtin/check-ignore.c:155 +#: builtin/check-ignore.c:152 msgid "--quiet is only valid with a single pathname" msgstr "--quiet chỉ hợp lệ vá»›i tên Ä‘Æ°á»ng dẫn Ä‘Æ¡n" -#: builtin/check-ignore.c:157 +#: builtin/check-ignore.c:154 msgid "cannot have both --quiet and --verbose" msgstr "không thể dùng cả hai tùy chá»n --quiet và --verbose" +#: builtin/check-ignore.c:157 +msgid "--non-matching is only valid with --verbose" +msgstr "tùy-chá»n --non-matching chỉ hợp lệ khi dùng vá»›i --verbose" + +#: builtin/check-mailmap.c:8 +msgid "git check-mailmap [options] <contact>..." +msgstr "git check-mailmap [các-tùy-chá»n] <danh-bạ>..." + +#: builtin/check-mailmap.c:13 +msgid "also read contacts from stdin" +msgstr "đồng thá»i Ä‘á»c các danh bạ từ đầu và o tiêu chuẩn" + +#: builtin/check-mailmap.c:24 +#, c-format +msgid "unable to parse contact: %s" +msgstr "không thể phân tÃch danh bạ: “%sâ€" + +#: builtin/check-mailmap.c:47 +msgid "no contacts specified" +msgstr "chÆ°a chỉ ra danh bạ" + #: builtin/checkout-index.c:126 msgid "git checkout-index [options] [--] [<file>...]" msgstr "git checkout-index [các-tùy-chá»n] [--] [<táºp-tin>...]" @@ -3141,42 +3241,42 @@ msgstr "bạn cần phải phân giải bảng mục lục hiện tại của bá msgid "Can not do reflog for '%s'\n" msgstr "Không thể thá»±c hiện reflog cho “%sâ€\n" -#: builtin/checkout.c:634 +#: builtin/checkout.c:639 msgid "HEAD is now at" msgstr "HEAD hiện giá» tại" -#: builtin/checkout.c:641 +#: builtin/checkout.c:646 #, c-format msgid "Reset branch '%s'\n" msgstr "Äặt lại nhánh “%sâ€\n" -#: builtin/checkout.c:644 +#: builtin/checkout.c:649 #, c-format msgid "Already on '%s'\n" msgstr "Äã sẵn sà ng trên “%sâ€\n" -#: builtin/checkout.c:648 +#: builtin/checkout.c:653 #, c-format msgid "Switched to and reset branch '%s'\n" msgstr "Äã chuyển tá»›i và reset nhánh “%sâ€\n" -#: builtin/checkout.c:650 builtin/checkout.c:987 +#: builtin/checkout.c:655 builtin/checkout.c:997 #, c-format msgid "Switched to a new branch '%s'\n" msgstr "Äã chuyển đến nhánh má»›i “%sâ€\n" -#: builtin/checkout.c:652 +#: builtin/checkout.c:657 #, c-format msgid "Switched to branch '%s'\n" msgstr "Äã chuyển đến nhánh “%sâ€\n" -#: builtin/checkout.c:708 +#: builtin/checkout.c:713 #, c-format msgid " ... and %d more.\n" msgstr " ... và nhiá»u hÆ¡n %d.\n" #. The singular version -#: builtin/checkout.c:714 +#: builtin/checkout.c:719 #, c-format msgid "" "Warning: you are leaving %d commit behind, not connected to\n" @@ -3201,7 +3301,7 @@ msgstr[1] "" "\n" "%s\n" -#: builtin/checkout.c:732 +#: builtin/checkout.c:737 #, c-format msgid "" "If you want to keep them by creating a new branch, this may be a good time\n" @@ -3217,138 +3317,138 @@ msgstr "" " git branch tên_nhánh_má»›i %s\n" "\n" -#: builtin/checkout.c:762 +#: builtin/checkout.c:767 msgid "internal error in revision walk" -msgstr "lá»—i ná»™i bá»™ trong khi di chuyển qua các Ä‘iểm xét lại" +msgstr "lá»—i ná»™i bá»™ trong khi di chuyển qua các Ä‘iểm xét duyệt" -#: builtin/checkout.c:766 +#: builtin/checkout.c:771 msgid "Previous HEAD position was" msgstr "Vị trà kế trÆ°á»›c của HEAD là " -#: builtin/checkout.c:793 builtin/checkout.c:982 +#: builtin/checkout.c:798 builtin/checkout.c:992 msgid "You are on a branch yet to be born" msgstr "Bạn tại nhánh mà nó chÆ°a hỠđược sinh ra" #. case (1) -#: builtin/checkout.c:918 +#: builtin/checkout.c:928 #, c-format msgid "invalid reference: %s" msgstr "tham chiếu sai: %s" #. case (1): want a tree -#: builtin/checkout.c:957 +#: builtin/checkout.c:967 #, c-format msgid "reference is not a tree: %s" msgstr "tham chiếu không phải là má»™t cây (tree):%s" -#: builtin/checkout.c:996 +#: builtin/checkout.c:1006 msgid "paths cannot be used with switching branches" msgstr "các Ä‘Æ°á»ng dẫn không thể dùng cùng vá»›i các nhánh chuyển" -#: builtin/checkout.c:999 builtin/checkout.c:1003 +#: builtin/checkout.c:1009 builtin/checkout.c:1013 #, c-format msgid "'%s' cannot be used with switching branches" msgstr "“%s†không thể được sá» dụng vá»›i các nhánh chuyển" -#: builtin/checkout.c:1007 builtin/checkout.c:1010 builtin/checkout.c:1015 -#: builtin/checkout.c:1018 +#: builtin/checkout.c:1017 builtin/checkout.c:1020 builtin/checkout.c:1025 +#: builtin/checkout.c:1028 #, c-format msgid "'%s' cannot be used with '%s'" msgstr "“%s†không thể được sá» dụng vá»›i “%sâ€" -#: builtin/checkout.c:1023 +#: builtin/checkout.c:1033 #, c-format msgid "Cannot switch branch to a non-commit '%s'" msgstr "Không thể chuyển nhánh đến má»™t non-commit “%sâ€" -#: builtin/checkout.c:1045 builtin/checkout.c:1047 builtin/clone.c:90 +#: builtin/checkout.c:1055 builtin/checkout.c:1057 builtin/clone.c:89 #: builtin/remote.c:169 builtin/remote.c:171 msgid "branch" msgstr "nhánh" -#: builtin/checkout.c:1046 +#: builtin/checkout.c:1056 msgid "create and checkout a new branch" msgstr "tạo và checkout má»™t nhánh má»›i" -#: builtin/checkout.c:1048 +#: builtin/checkout.c:1058 msgid "create/reset and checkout a branch" msgstr "create/reset và checkout má»™t nhánh" -#: builtin/checkout.c:1049 +#: builtin/checkout.c:1059 msgid "create reflog for new branch" msgstr "tạo reflog cho nhánh má»›i" -#: builtin/checkout.c:1050 +#: builtin/checkout.c:1060 msgid "detach the HEAD at named commit" msgstr "rá»i bá» HEAD tại lần chuyển giao danh nghÄ©a" -#: builtin/checkout.c:1051 +#: builtin/checkout.c:1061 msgid "set upstream info for new branch" msgstr "đặt thông tin thượng nguồn (upstream) cho nhánh má»›i" -#: builtin/checkout.c:1053 +#: builtin/checkout.c:1063 msgid "new branch" msgstr "nhánh má»›i" -#: builtin/checkout.c:1053 +#: builtin/checkout.c:1063 msgid "new unparented branch" msgstr "nhánh mồ côi má»›i" -#: builtin/checkout.c:1054 +#: builtin/checkout.c:1064 msgid "checkout our version for unmerged files" msgstr "" "lấy ra (checkout) phiên bản của chúng ta cho các táºp tin chÆ°a được hòa trá»™n" -#: builtin/checkout.c:1056 +#: builtin/checkout.c:1066 msgid "checkout their version for unmerged files" msgstr "" "lấy ra (checkout) phiên bản của chúng há» cho các táºp tin chÆ°a được hòa trá»™n" -#: builtin/checkout.c:1058 +#: builtin/checkout.c:1068 msgid "force checkout (throw away local modifications)" msgstr "ép buá»™c lấy ra (checkout) (bá» Ä‘i những thay đổi ná»™i bá»™)" -#: builtin/checkout.c:1059 +#: builtin/checkout.c:1069 msgid "perform a 3-way merge with the new branch" msgstr "thá»±c hiện hòa trá»™n kiểu 3-way vá»›i nhánh má»›i" -#: builtin/checkout.c:1060 builtin/merge.c:217 +#: builtin/checkout.c:1070 builtin/merge.c:232 msgid "update ignored files (default)" msgstr "cáºp nháºt các táºp tin bị bá» qua (mặc định)" -#: builtin/checkout.c:1061 builtin/log.c:1158 parse-options.h:245 +#: builtin/checkout.c:1071 builtin/log.c:1208 parse-options.h:249 msgid "style" msgstr "kiểu" -#: builtin/checkout.c:1062 +#: builtin/checkout.c:1072 msgid "conflict style (merge or diff3)" msgstr "xung Ä‘á»™t kiểu (hòa trá»™n hay diff3)" -#: builtin/checkout.c:1065 +#: builtin/checkout.c:1075 msgid "do not limit pathspecs to sparse entries only" msgstr "không giá»›i hạn pathspecs chỉ thà nh các mục thÆ°a thá»›t" -#: builtin/checkout.c:1067 +#: builtin/checkout.c:1077 msgid "second guess 'git checkout no-such-branch'" msgstr "gợi ý thứ hai “git checkout không-nhánh-nà o-nhÆ°-váºyâ€" -#: builtin/checkout.c:1091 +#: builtin/checkout.c:1101 msgid "-b, -B and --orphan are mutually exclusive" msgstr "Tùy chá»n -b|-B và --orphan loại từ lẫn nhau" -#: builtin/checkout.c:1108 +#: builtin/checkout.c:1118 msgid "--track needs a branch name" msgstr "--track cần tên má»™t nhánh" -#: builtin/checkout.c:1115 +#: builtin/checkout.c:1125 msgid "Missing branch name; try -b" msgstr "Thiếu tên nhánh; hãy thá» -b" -#: builtin/checkout.c:1150 +#: builtin/checkout.c:1160 msgid "invalid path specification" msgstr "Ä‘Æ°á»ng dẫn đã cho không hợp lệ" -#: builtin/checkout.c:1157 +#: builtin/checkout.c:1167 #, c-format msgid "" "Cannot update paths and switch to branch '%s' at the same time.\n" @@ -3358,12 +3458,12 @@ msgstr "" "Bạn đã có ý định checkout “%s†cái mà không thể được phân giải nhÆ° là lần " "chuyển giao (commit)?" -#: builtin/checkout.c:1162 +#: builtin/checkout.c:1172 #, c-format msgid "git checkout: --detach does not take a path argument '%s'" msgstr "git checkout: --detach không nháºn má»™t đối số Ä‘Æ°á»ng dẫn “%sâ€" -#: builtin/checkout.c:1166 +#: builtin/checkout.c:1176 msgid "" "git checkout: --ours/--theirs, --force and --merge are incompatible when\n" "checking out of the index." @@ -3371,217 +3471,320 @@ msgstr "" "git checkout: --ours/--theirs, --force và --merge là xung khắc vá»›i nhau khi\n" "checkout bảng mục lục (index)." -#: builtin/clean.c:20 -msgid "git clean [-d] [-f] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." -msgstr "git clean [-d] [-f] [-n] [-q] [-e <mẫu>] [-x | -X] [--] <Ä‘Æ°á»ng-dẫn>..." +#: builtin/clean.c:25 +msgid "" +"git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." +msgstr "" +"git clean [-d] [-f] [-i] [-n] [-q] [-e <mẫu>] [-x | -X] [--] <Ä‘Æ°á»ng-dẫn>..." -#: builtin/clean.c:24 +#: builtin/clean.c:29 #, c-format msgid "Removing %s\n" msgstr "Äang gỡ bá» %s\n" -#: builtin/clean.c:25 +#: builtin/clean.c:30 #, c-format msgid "Would remove %s\n" msgstr "Có thể gỡ bá» %s\n" -#: builtin/clean.c:26 +#: builtin/clean.c:31 #, c-format msgid "Skipping repository %s\n" msgstr "Äang bá» qua kho chứa %s\n" -#: builtin/clean.c:27 +#: builtin/clean.c:32 #, c-format msgid "Would skip repository %s\n" msgstr "Nên bá» qua kho chứa %s\n" -#: builtin/clean.c:28 +#: builtin/clean.c:33 #, c-format msgid "failed to remove %s" msgstr "gặp lá»—i khi gỡ bá» %s" -#: builtin/clean.c:160 +#: builtin/clean.c:293 +msgid "" +"Prompt help:\n" +"1 - select a numbered item\n" +"foo - select item based on unique prefix\n" +" - (empty) select nothing" +msgstr "" +"Trợ giúp vá» nhắc:\n" +"1 - chá»n má»™t mục được đánh số\n" +"foo - chá»n mục trên cÆ¡ sở tiá»n tố duy nhất\n" +" - (trống rá»—ng) không chá»n gì cả" + +#: builtin/clean.c:297 +msgid "" +"Prompt help:\n" +"1 - select a single item\n" +"3-5 - select a range of items\n" +"2-3,6-9 - select multiple ranges\n" +"foo - select item based on unique prefix\n" +"-... - unselect specified items\n" +"* - choose all items\n" +" - (empty) finish selecting" +msgstr "" +"Trợ giúp vá» nhắc:\n" +"1 - chá»n má»™t mục Ä‘Æ¡n\n" +"3-5 - chá»n má»™t vùng\n" +"2-3,6-9 - chá»n nhiá»u vùng\n" +"foo - chá»n mục dá»±a trên tiá»n tố duy nhất\n" +"-... - không chá»n các mục đã chỉ ra\n" +"* - chá»n tất\n" +" - (trống rá»—ng) kết thúc việc chá»n" + +#: builtin/clean.c:515 +#, c-format +msgid "Huh (%s)?" +msgstr "Hả (%s)?" + +#: builtin/clean.c:658 +#, c-format +msgid "Input ignore patterns>> " +msgstr "Mẫu để lá»c các táºp tin cần lá» Ä‘i đầu và o>>" + +#: builtin/clean.c:695 +#, c-format +msgid "WARNING: Cannot find items matched by: %s" +msgstr "CẢNH BÃO: Không tìm thấy các mục được khá»›p bởi: %s" + +#: builtin/clean.c:716 +msgid "Select items to delete" +msgstr "Chá»n mục muốn xóa" + +#: builtin/clean.c:756 +#, c-format +msgid "remove %s? " +msgstr "gỡ bỠ“%sâ€?" + +#: builtin/clean.c:781 +msgid "Bye." +msgstr "Tạm biệt." + +#: builtin/clean.c:789 +msgid "" +"clean - start cleaning\n" +"filter by pattern - exclude items from deletion\n" +"select by numbers - select items to be deleted by numbers\n" +"ask each - confirm each deletion (like \"rm -i\")\n" +"quit - stop cleaning\n" +"help - this screen\n" +"? - help for prompt selection" +msgstr "" +"clean - bắt đầu dá»n dẹp\n" +"filter by pattern - loại trừ các mục khá»i việc xóa\n" +"select by numbers - chá»n các mục cần xóa bằng số\n" +"ask each - xác nháºn trÆ°á»›c má»—i lần xóa (giống nhÆ° \"rm -i\")\n" +"quit - dừng việc dá»n dẹp lại\n" +"help - hiển thị chÃnh trợ giúp nà y\n" +"? - trợ giúp dà nh cho chá»n bằng cách nhắc" + +#: builtin/clean.c:816 +msgid "*** Commands ***" +msgstr "*** Lệnh ***" + +#: builtin/clean.c:817 +msgid "What now" +msgstr "Giá» thì sao" + +#: builtin/clean.c:825 +msgid "Would remove the following item:" +msgid_plural "Would remove the following items:" +msgstr[0] "Có muốn gỡ bá» mục sau đây không:" +msgstr[1] "Có muốn gỡ bá» các mục sau đây không:" + +#: builtin/clean.c:842 +msgid "No more files to clean, exiting." +msgstr "Không còn táºp-tin nà o để dá»n dẹp, Ä‘ang thoát ra." + +#: builtin/clean.c:874 msgid "do not print names of files removed" msgstr "không hiển thị tên của các táºp tin đã gỡ bá»" -#: builtin/clean.c:162 +#: builtin/clean.c:876 msgid "force" msgstr "ép buá»™c" -#: builtin/clean.c:164 +#: builtin/clean.c:877 +msgid "interactive cleaning" +msgstr "sá»a bằng cách tÆ°Æ¡ng tác" + +#: builtin/clean.c:879 msgid "remove whole directories" msgstr "gỡ bá» toà n bá»™ thÆ° mục" -#: builtin/clean.c:165 builtin/describe.c:412 builtin/grep.c:717 -#: builtin/ls-files.c:487 builtin/name-rev.c:231 builtin/show-ref.c:182 +#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:716 +#: builtin/ls-files.c:493 builtin/name-rev.c:315 builtin/show-ref.c:186 msgid "pattern" msgstr "mẫu" -#: builtin/clean.c:166 +#: builtin/clean.c:881 msgid "add <pattern> to ignore rules" msgstr "thêm <mẫu> và o trong qui tắc bá» qua" -#: builtin/clean.c:167 +#: builtin/clean.c:882 msgid "remove ignored files, too" msgstr "đồng thá»i gỡ bá» cả các táºp tin bị bá» qua" -#: builtin/clean.c:169 +#: builtin/clean.c:884 msgid "remove only ignored files" msgstr "chỉ gỡ bá» những táºp tin bị bá» qua" -#: builtin/clean.c:187 +#: builtin/clean.c:902 msgid "-x and -X cannot be used together" msgstr "-x và -X không thể dùng cùng má»™t lúc vá»›i nhau" -#: builtin/clean.c:191 +#: builtin/clean.c:906 msgid "" -"clean.requireForce set to true and neither -n nor -f given; refusing to clean" +"clean.requireForce set to true and neither -i, -n nor -f given; refusing to " +"clean" msgstr "" -"clean.requireForce được đặt thà nh true và không Ä‘Æ°a ra tùy chá»n -n mà cÅ©ng " +"clean.requireForce được đặt thà nh true và không Ä‘Æ°a ra tùy chá»n -n mà cÅ©ng " "không -f; từ chối lệnh dá»n dẹp (clean)" -#: builtin/clean.c:194 +#: builtin/clean.c:909 msgid "" -"clean.requireForce defaults to true and neither -n nor -f given; refusing to " -"clean" +"clean.requireForce defaults to true and neither -i, -n nor -f given; " +"refusing to clean" msgstr "" -"clean.requireForce mặc định được đặt thà nh true và không Ä‘Æ°a ra tùy chá»n -n " -"mà cÅ©ng không -f; từ chối lệnh dá»n dẹp (clean)" +"clean.requireForce mặc định được đặt là true và không Ä‘Æ°a ra tùy chá»n -n mà " +"cÅ©ng không -f; từ chối lệnh dá»n dẹp (clean)" -#: builtin/clone.c:37 +#: builtin/clone.c:36 msgid "git clone [options] [--] <repo> [<dir>]" msgstr "git clone [các-tùy-chá»n] [--] <kho> [<t.mục>]" -#: builtin/clone.c:65 builtin/fetch.c:82 builtin/merge.c:214 -#: builtin/push.c:436 +#: builtin/clone.c:64 builtin/fetch.c:82 builtin/merge.c:229 +#: builtin/push.c:462 msgid "force progress reporting" msgstr "ép buá»™c báo cáo tiến trình" -#: builtin/clone.c:67 +#: builtin/clone.c:66 msgid "don't create a checkout" msgstr "không tạo má»™t checkout" -#: builtin/clone.c:68 builtin/clone.c:70 builtin/init-db.c:488 +#: builtin/clone.c:67 builtin/clone.c:69 builtin/init-db.c:488 msgid "create a bare repository" msgstr "tạo kho chứa bare" -#: builtin/clone.c:73 +#: builtin/clone.c:72 msgid "create a mirror repository (implies bare)" msgstr "tạo kho bản sao (mirror) (ngụ ý là bare)" -#: builtin/clone.c:75 +#: builtin/clone.c:74 msgid "to clone from a local repository" msgstr "để nhân bản từ kho ná»™i bá»™" -#: builtin/clone.c:77 +#: builtin/clone.c:76 msgid "don't use local hardlinks, always copy" msgstr "không sá» dụng liên kết cứng ná»™i bá»™, luôn sao chép" -#: builtin/clone.c:79 +#: builtin/clone.c:78 msgid "setup as shared repository" msgstr "cà i đặt đây là kho chia sẻ" -#: builtin/clone.c:81 builtin/clone.c:83 +#: builtin/clone.c:80 builtin/clone.c:82 msgid "initialize submodules in the clone" msgstr "khởi tạo mô-Ä‘un-con trong bản sao" -#: builtin/clone.c:84 builtin/init-db.c:485 +#: builtin/clone.c:83 builtin/init-db.c:485 msgid "template-directory" msgstr "thÆ°-mục-tạm" -#: builtin/clone.c:85 builtin/init-db.c:486 +#: builtin/clone.c:84 builtin/init-db.c:486 msgid "directory from which templates will be used" msgstr "thÆ° mục mà tại đó các mẫu sẽ được dùng" -#: builtin/clone.c:87 +#: builtin/clone.c:86 msgid "reference repository" msgstr "kho tham chiếu" -#: builtin/clone.c:88 builtin/column.c:26 builtin/merge-file.c:44 +#: builtin/clone.c:87 builtin/column.c:26 builtin/merge-file.c:44 msgid "name" msgstr "tên" -#: builtin/clone.c:89 +#: builtin/clone.c:88 msgid "use <name> instead of 'origin' to track upstream" msgstr "dùng <tên> thay vì “origin†để theo dõi thượng nguồn (uptream)" -#: builtin/clone.c:91 +#: builtin/clone.c:90 msgid "checkout <branch> instead of the remote's HEAD" msgstr "lấy ra nhánh (checkout <nhánh>) thay vì HEAD của máy chủ" -#: builtin/clone.c:93 +#: builtin/clone.c:92 msgid "path to git-upload-pack on the remote" msgstr "Ä‘Æ°á»ng dẫn đến git-upload-pack trên máy chủ" -#: builtin/clone.c:94 builtin/fetch.c:83 builtin/grep.c:662 +#: builtin/clone.c:93 builtin/fetch.c:83 builtin/grep.c:661 msgid "depth" msgstr "Ä‘á»™ sâu" -#: builtin/clone.c:95 +#: builtin/clone.c:94 msgid "create a shallow clone of that depth" msgstr "tạo bản sao không đầy đủ cho mức sâu đã cho" -#: builtin/clone.c:97 +#: builtin/clone.c:96 msgid "clone only one branch, HEAD or --branch" msgstr "nhân bản (clone) chỉ má»™t nhánh, HEAD hoặc --branch" -#: builtin/clone.c:98 builtin/init-db.c:494 +#: builtin/clone.c:97 builtin/init-db.c:494 msgid "gitdir" msgstr "gitdir" -#: builtin/clone.c:99 builtin/init-db.c:495 +#: builtin/clone.c:98 builtin/init-db.c:495 msgid "separate git dir from working tree" msgstr "không dùng chung thÆ° mục dà nh riêng cho git và thÆ° mục là m việc" -#: builtin/clone.c:100 +#: builtin/clone.c:99 msgid "key=value" msgstr "khóa=giá trị" -#: builtin/clone.c:101 +#: builtin/clone.c:100 msgid "set config inside the new repository" msgstr "đặt cấu hình bên trong má»™t kho chứa má»›i" -#: builtin/clone.c:254 +#: builtin/clone.c:253 #, c-format msgid "reference repository '%s' is not a local repository." msgstr "kho tham chiếu “%s†không phải là má»™t kho ná»™i bá»™." -#: builtin/clone.c:317 +#: builtin/clone.c:316 #, c-format msgid "failed to create directory '%s'" msgstr "tạo thÆ° mục \"%s\" gặp lá»—i" -#: builtin/clone.c:319 builtin/diff.c:77 +#: builtin/clone.c:318 builtin/diff.c:77 #, c-format msgid "failed to stat '%s'" msgstr "gặp lá»—i stat (lấy trạng thái vá») “%sâ€" -#: builtin/clone.c:321 +#: builtin/clone.c:320 #, c-format msgid "%s exists and is not a directory" msgstr "%s tồn tại nhÆ°ng không phải là má»™t thÆ° mục" -#: builtin/clone.c:335 +#: builtin/clone.c:334 #, c-format msgid "failed to stat %s\n" msgstr "lá»—i stat (lấy trạng thái vá») %s\n" -#: builtin/clone.c:357 +#: builtin/clone.c:356 #, c-format msgid "failed to create link '%s'" msgstr "gặp lá»—i khi tạo được liên kết má»m %s" -#: builtin/clone.c:361 +#: builtin/clone.c:360 #, c-format msgid "failed to copy file to '%s'" msgstr "gặp lá»—i khi chép táºp tin tá»›i “%sâ€" -#: builtin/clone.c:384 +#: builtin/clone.c:383 #, c-format msgid "done.\n" msgstr "hoà n tất.\n" -#: builtin/clone.c:397 +#: builtin/clone.c:396 msgid "" "Clone succeeded, but checkout failed.\n" "You can inspect what was checked out with 'git status'\n" @@ -3591,90 +3794,104 @@ msgstr "" "Bạn kiểm tra kỹ xem cái gì được lấy ra bằng lệnh “git statusâ€\n" "và thá» checkout vá»›i lệnh “git checkout -f HEADâ€\n" -#: builtin/clone.c:476 +#: builtin/clone.c:475 #, c-format msgid "Could not find remote branch %s to clone." msgstr "Không tìm thấy nhánh máy chủ %s để nhân bản (clone)." -#: builtin/clone.c:550 +#: builtin/clone.c:555 +#, c-format +msgid "Checking connectivity... " +msgstr "Äang kiểm tra kết nối..." + +#: builtin/clone.c:558 msgid "remote did not send all necessary objects" msgstr "máy chủ đã không gá»i tất cả các đối tượng cần thiết" -#: builtin/clone.c:610 +#: builtin/clone.c:560 +#, c-format +msgid "done\n" +msgstr "xong.\n" + +#: builtin/clone.c:621 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" msgstr "refers HEAD máy chủ chỉ đến ref không tồn tại, không thể checkout.\n" -#: builtin/clone.c:641 +#: builtin/clone.c:652 msgid "unable to checkout working tree" msgstr "không thể lấy ra (checkout) cây là m việc" -#: builtin/clone.c:749 +#: builtin/clone.c:760 msgid "Too many arguments." msgstr "Có quá nhiá»u đối số." -#: builtin/clone.c:753 +#: builtin/clone.c:764 msgid "You must specify a repository to clone." msgstr "Bạn phải chỉ định má»™t kho để mà nhân bản (clone)." -#: builtin/clone.c:764 +#: builtin/clone.c:775 #, c-format msgid "--bare and --origin %s options are incompatible." msgstr "tùy chá»n --bare và --origin %s xung khắc nhau." -#: builtin/clone.c:767 +#: builtin/clone.c:778 msgid "--bare and --separate-git-dir are incompatible." msgstr "tùy chá»n --bare và --separate-git-dir xung khắc nhau." -#: builtin/clone.c:780 +#: builtin/clone.c:791 #, c-format msgid "repository '%s' does not exist" msgstr "kho chứa “%s†chÆ°a tồn tại" -#: builtin/clone.c:785 +#: builtin/clone.c:796 msgid "--depth is ignored in local clones; use file:// instead." msgstr "--depth bị lá» Ä‘i khi nhân bản ná»™i bá»™; hãy sá» dụng file:// để thay thế." -#: builtin/clone.c:795 +#: builtin/clone.c:798 +msgid "--local is ignored" +msgstr "--local bị lá» Ä‘i" + +#: builtin/clone.c:808 #, c-format msgid "destination path '%s' already exists and is not an empty directory." msgstr "Ä‘Æ°á»ng dẫn Ä‘Ãch “%s†đã có từ trÆ°á»›c và không phải là má»™t thÆ° mục rá»—ng." -#: builtin/clone.c:805 +#: builtin/clone.c:818 #, c-format msgid "working tree '%s' already exists." msgstr "cây là m việc “%s†đã sẵn tồn tại rồi." -#: builtin/clone.c:818 builtin/clone.c:830 +#: builtin/clone.c:831 builtin/clone.c:843 #, c-format msgid "could not create leading directories of '%s'" msgstr "không thể tạo các thÆ° mục dẫn đầu của “%sâ€" -#: builtin/clone.c:821 +#: builtin/clone.c:834 #, c-format msgid "could not create work tree dir '%s'." msgstr "không thể tạo cây thÆ° mục là m việc dir “%sâ€." -#: builtin/clone.c:840 +#: builtin/clone.c:853 #, c-format msgid "Cloning into bare repository '%s'...\n" msgstr "Äang nhân bản thà nh kho chứa bare “%sâ€...\n" -#: builtin/clone.c:842 +#: builtin/clone.c:855 #, c-format msgid "Cloning into '%s'...\n" msgstr "Äang nhân bản thà nh “%sâ€...\n" -#: builtin/clone.c:877 +#: builtin/clone.c:890 #, c-format msgid "Don't know how to clone %s" msgstr "Không biết là m cách nà o để nhân bản (clone) %s" -#: builtin/clone.c:926 +#: builtin/clone.c:942 #, c-format msgid "Remote branch %s not found in upstream %s" msgstr "Nhánh máy chủ %s không tìm thấy trong thượng nguồn (upstream) %s" -#: builtin/clone.c:933 +#: builtin/clone.c:949 msgid "You appear to have cloned an empty repository." msgstr "Bạn hình nhÆ° là đã nhân bản má»™t kho trống rá»—ng." @@ -3710,15 +3927,15 @@ msgstr "Chèn thêm khoảng trắng giữa các cá»™t" msgid "--command must be the first argument" msgstr "--command phải là đối số đầu tiên" -#: builtin/commit.c:34 +#: builtin/commit.c:35 msgid "git commit [options] [--] <pathspec>..." msgstr "git commit [các-tùy-chá»n] [--] <pathspec>..." -#: builtin/commit.c:39 +#: builtin/commit.c:40 msgid "git status [options] [--] <pathspec>..." msgstr "git status [các-tùy-chá»n] [--] <pathspec>..." -#: builtin/commit.c:44 +#: builtin/commit.c:45 msgid "" "Your name and email address were configured automatically based\n" "on your username and hostname. Please check that they are accurate.\n" @@ -3746,7 +3963,7 @@ msgstr "" "\n" " git commit --amend --reset-author\n" -#: builtin/commit.c:56 +#: builtin/commit.c:57 msgid "" "You asked to amend the most recent commit, but doing so would make\n" "it empty. You can repeat your command with --allow-empty, or you can\n" @@ -3759,114 +3976,132 @@ msgstr "" "hoặc là bạn gỡ bá» các lần chuyển giao má»™t cách hoà n toà n bằng lệnh:\n" "\"git reset HEAD^\".\n" -#: builtin/commit.c:61 +#: builtin/commit.c:62 msgid "" "The previous cherry-pick is now empty, possibly due to conflict resolution.\n" "If you wish to commit it anyway, use:\n" "\n" " git commit --allow-empty\n" "\n" -"Otherwise, please use 'git reset'\n" msgstr "" "Lần cherry-pick trÆ°á»›c hiện nay trống rá»—ng, có lẽ là bởi vì sá»± phân giải xung " "Ä‘á»™t.\n" -"Nếu bạn muốn chuyển giao nó cho dù thế nà o Ä‘i nữa, sá» dụng:\n" +"Nếu bạn vẫn muốn chuyển giao nó cho dù thế nà o Ä‘i nữa, sá» dụng:\n" "\n" " git commit --allow-empty\n" "\n" -"Nếu không, hãy thá» dùng “git resetâ€\n" -#: builtin/commit.c:260 +#: builtin/commit.c:69 +msgid "Otherwise, please use 'git reset'\n" +msgstr "Nếu không được thì dùng lệnh \"git reset\"\n" + +#: builtin/commit.c:72 +msgid "" +"If you wish to skip this commit, use:\n" +"\n" +" git reset\n" +"\n" +"Then \"git cherry-pick --continue\" will resume cherry-picking\n" +"the remaining commits.\n" +msgstr "" +"Nếu bạn muốn bá» qua lần chuyển giao nà y thì dùng:\n" +"\n" +" git reset\n" +"\n" +"Thế thì \"git cherry-pick --continue\" sẽ phục hồi lại việc cherry-pick\n" +"những lần chuyển giao còn lại.\n" + +#: builtin/commit.c:279 msgid "failed to unpack HEAD tree object" msgstr "gặp lá»—i khi tháo dỡ HEAD đối tượng cây" -#: builtin/commit.c:302 +#: builtin/commit.c:321 msgid "unable to create temporary index" msgstr "không thể tạo bảng mục lục tạm thá»i" -#: builtin/commit.c:308 +#: builtin/commit.c:327 msgid "interactive add failed" msgstr "việc thêm tÆ°Æ¡ng tác gặp lá»—i" -#: builtin/commit.c:341 builtin/commit.c:362 builtin/commit.c:412 +#: builtin/commit.c:360 builtin/commit.c:381 builtin/commit.c:431 msgid "unable to write new_index file" msgstr "không thể ghi táºp tin lÆ°u bảng mục lục má»›i (new_index)" -#: builtin/commit.c:393 +#: builtin/commit.c:412 msgid "cannot do a partial commit during a merge." msgstr "" "không thể thá»±c hiện việc chuyển giao (commit) cục bá»™ trong khi Ä‘ang được hòa " "trá»™n." -#: builtin/commit.c:395 +#: builtin/commit.c:414 msgid "cannot do a partial commit during a cherry-pick." msgstr "" "không thể thá»±c hiện việc chuyển giao (commit) bá»™ pháºn trong khi Ä‘ang cherry-" "pick." -#: builtin/commit.c:405 +#: builtin/commit.c:424 msgid "cannot read the index" msgstr "không Ä‘á»c được bảng mục lục" -#: builtin/commit.c:425 +#: builtin/commit.c:444 msgid "unable to write temporary index file" msgstr "không thể ghi táºp tin lÆ°u bảng mục lục tạm thá»i" -#: builtin/commit.c:513 builtin/commit.c:519 +#: builtin/commit.c:535 builtin/commit.c:541 #, c-format msgid "invalid commit: %s" msgstr "lần chuyển giao (commit) không hợp lệ: %s" -#: builtin/commit.c:542 +#: builtin/commit.c:563 msgid "malformed --author parameter" msgstr "đối số --author bị dị hình" -#: builtin/commit.c:562 +#: builtin/commit.c:583 #, c-format msgid "Malformed ident string: '%s'" msgstr "Chuá»—i thụt lỠđầu dòng dị hình: “%sâ€" -#: builtin/commit.c:600 builtin/commit.c:633 builtin/commit.c:956 +#: builtin/commit.c:621 builtin/commit.c:654 builtin/commit.c:982 #, c-format msgid "could not lookup commit %s" msgstr "không thể tìm kiếm commit (lần chuyển giao) %s" -#: builtin/commit.c:612 builtin/shortlog.c:270 +#: builtin/commit.c:633 builtin/shortlog.c:271 #, c-format msgid "(reading log message from standard input)\n" msgstr "(Ä‘ang Ä‘á»c thông Ä‘iệp nháºt ký từ đầu và o tiêu chuẩn)\n" -#: builtin/commit.c:614 +#: builtin/commit.c:635 msgid "could not read log from standard input" msgstr "không thể Ä‘á»c nháºt ký từ đầu và o tiêu chuẩn" -#: builtin/commit.c:618 +#: builtin/commit.c:639 #, c-format msgid "could not read log file '%s'" msgstr "không Ä‘á»c được tệp nháºt ký “%sâ€" -#: builtin/commit.c:624 +#: builtin/commit.c:645 msgid "commit has empty message" msgstr "lần chuyển giao (commit) có ghi chú trống rá»—ng" -#: builtin/commit.c:640 +#: builtin/commit.c:661 msgid "could not read MERGE_MSG" msgstr "không thể Ä‘á»c MERGE_MSG" -#: builtin/commit.c:644 +#: builtin/commit.c:665 msgid "could not read SQUASH_MSG" msgstr "không thể Ä‘á»c SQUASH_MSG" -#: builtin/commit.c:648 +#: builtin/commit.c:669 #, c-format msgid "could not read '%s'" msgstr "Không thể Ä‘á»c “%sâ€." -#: builtin/commit.c:709 +#: builtin/commit.c:730 msgid "could not write commit template" msgstr "không thể ghi mẫu commit" -#: builtin/commit.c:720 +#: builtin/commit.c:741 #, c-format msgid "" "\n" @@ -3881,7 +4116,7 @@ msgstr "" "\t%s\n" "và thá» lại.\n" -#: builtin/commit.c:725 +#: builtin/commit.c:746 #, c-format msgid "" "\n" @@ -3896,7 +4131,7 @@ msgstr "" "\t%s\n" "và thá» lại.\n" -#: builtin/commit.c:737 +#: builtin/commit.c:758 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" @@ -3907,7 +4142,7 @@ msgstr "" "bắt đầu bằng “%c†sẽ được bá» qua, nếu phần chú thÃch rá»—ng sẽ hủy bá» lần " "chuyển giao (commit).\n" -#: builtin/commit.c:742 +#: builtin/commit.c:763 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" @@ -3919,372 +4154,372 @@ msgstr "" "bắt đầu bằng “%c†sẽ được bá» qua; bạn có thể xóa chúng Ä‘i nếu muốn thế.\n" "Phần chú thÃch nà y nếu trống rá»—ng sẽ hủy bá» lần chuyển giao (commit).\n" -#: builtin/commit.c:755 +#: builtin/commit.c:776 #, c-format msgid "%sAuthor: %s" msgstr "%sTác giả: %s" -#: builtin/commit.c:762 +#: builtin/commit.c:783 #, c-format msgid "%sCommitter: %s" msgstr "%sNgÆ°á»i chuyển giao (commit): %s" -#: builtin/commit.c:782 +#: builtin/commit.c:803 msgid "Cannot read index" msgstr "không Ä‘á»c được bảng mục lục" -#: builtin/commit.c:819 +#: builtin/commit.c:845 msgid "Error building trees" msgstr "Gặp lá»—i khi xây dá»±ng cây" -#: builtin/commit.c:834 builtin/tag.c:359 +#: builtin/commit.c:860 builtin/tag.c:359 #, c-format msgid "Please supply the message using either -m or -F option.\n" msgstr "Xin hãy áp dụng thông Ä‘iệp sá» dụng hoặc là tùy chá»n -m hoặc là -F.\n" -#: builtin/commit.c:931 +#: builtin/commit.c:957 #, c-format msgid "No existing author found with '%s'" msgstr "Không tìm thấy tác giả có sẵn vá»›i “%sâ€" -#: builtin/commit.c:946 builtin/commit.c:1140 +#: builtin/commit.c:972 builtin/commit.c:1208 #, c-format msgid "Invalid untracked files mode '%s'" msgstr "Chế Ä‘á»™ cho các táºp tin không bị theo vết không hợp lệ “%sâ€" -#: builtin/commit.c:976 +#: builtin/commit.c:1009 +msgid "--long and -z are incompatible" +msgstr "hai tùy chá»n -long và -z không tÆ°Æ¡ng thÃch vá»›i nhau" + +#: builtin/commit.c:1039 msgid "Using both --reset-author and --author does not make sense" msgstr "Sá» dụng cả hai tùy chá»n --reset-author và --author không hợp lý" -#: builtin/commit.c:987 +#: builtin/commit.c:1050 msgid "You have nothing to amend." msgstr "Không có gì để amend (tu bổ) cả." -#: builtin/commit.c:990 +#: builtin/commit.c:1053 msgid "You are in the middle of a merge -- cannot amend." msgstr "" "Bạn Ä‘ang ở giữa của quá trình hòa trá»™n -- không thể thá»±c hiện amend (tu bổ)." -#: builtin/commit.c:992 +#: builtin/commit.c:1055 msgid "You are in the middle of a cherry-pick -- cannot amend." msgstr "" "Bạn Ä‘ang ở giữa của quá trình cherry-pick -- không thể thá»±c hiện amend (tu " "bổ)." -#: builtin/commit.c:995 +#: builtin/commit.c:1058 msgid "Options --squash and --fixup cannot be used together" msgstr "Các tùy chá»n --squash và --fixup không thể sá» dụng cùng vá»›i nhau" -#: builtin/commit.c:1005 +#: builtin/commit.c:1068 msgid "Only one of -c/-C/-F/--fixup can be used." msgstr "Chỉ má»™t tùy chá»n trong số -c/-C/-F/--fixup được sá» dụng" -#: builtin/commit.c:1007 +#: builtin/commit.c:1070 msgid "Option -m cannot be combined with -c/-C/-F/--fixup." msgstr "Tùy chá»n -m không thể được tổ hợp cùng vá»›i -c/-C/-F/--fixup." -#: builtin/commit.c:1015 +#: builtin/commit.c:1078 msgid "--reset-author can be used only with -C, -c or --amend." msgstr "" "--reset-author chỉ có thể được sá» dụng vá»›i tùy chá»n -C, -c hay --amend." -#: builtin/commit.c:1032 +#: builtin/commit.c:1095 msgid "Only one of --include/--only/--all/--interactive/--patch can be used." msgstr "" "Chỉ má»™t trong các tùy chá»n --include/--only/--all/--interactive/--patch được " "sá» dụng." -#: builtin/commit.c:1034 +#: builtin/commit.c:1097 msgid "No paths with --include/--only does not make sense." msgstr "Không Ä‘Æ°á»ng dẫn vá»›i các tùy chá»n --include/--only không hợp lý." -#: builtin/commit.c:1036 +#: builtin/commit.c:1099 msgid "Clever... amending the last one with dirty index." msgstr "Giá»i... tu bổ cái cuối vá»›i bảng mục lục phi nghÄ©a." -#: builtin/commit.c:1038 +#: builtin/commit.c:1101 msgid "Explicit paths specified without -i nor -o; assuming --only paths..." msgstr "" "Những Ä‘Æ°á»ng dẫn rõ rà ng được chỉ ra không có tùy chá»n -i cÅ©ng không -o; Ä‘ang " "giả định --only những-Ä‘Æ°á»ng-dẫn..." -#: builtin/commit.c:1048 builtin/tag.c:575 +#: builtin/commit.c:1111 builtin/tag.c:575 #, c-format msgid "Invalid cleanup mode %s" msgstr "Chế Ä‘á»™ dá»n dẹp không hợp lệ %s" -#: builtin/commit.c:1053 +#: builtin/commit.c:1116 msgid "Paths with -a does not make sense." msgstr "Các Ä‘Æ°á»ng dẫn vá»›i tùy chá»n -a không hợp lý." -#: builtin/commit.c:1059 builtin/commit.c:1194 -msgid "--long and -z are incompatible" -msgstr "hai tùy chá»n -long và -z không tÆ°Æ¡ng thÃch vá»›i nhau" - -#: builtin/commit.c:1154 builtin/commit.c:1390 +#: builtin/commit.c:1222 builtin/commit.c:1455 msgid "show status concisely" msgstr "hiển thị trạng thái ở dạng súc tÃch" -#: builtin/commit.c:1156 builtin/commit.c:1392 +#: builtin/commit.c:1224 builtin/commit.c:1457 msgid "show branch information" msgstr "hiển thị thông tin nhánh" -#: builtin/commit.c:1158 builtin/commit.c:1394 builtin/push.c:426 +#: builtin/commit.c:1226 builtin/commit.c:1459 builtin/push.c:452 msgid "machine-readable output" msgstr "kết xuất dạng máy-có-thể-Ä‘á»c" -#: builtin/commit.c:1161 builtin/commit.c:1396 +#: builtin/commit.c:1229 builtin/commit.c:1461 msgid "show status in long format (default)" msgstr "hiển thị trạng thái ở định dạng dà i (mặc định)" -#: builtin/commit.c:1164 builtin/commit.c:1399 +#: builtin/commit.c:1232 builtin/commit.c:1464 msgid "terminate entries with NUL" msgstr "chấm dứt các mục bằng NUL" -#: builtin/commit.c:1166 builtin/commit.c:1402 builtin/fast-export.c:659 -#: builtin/fast-export.c:662 builtin/tag.c:459 +#: builtin/commit.c:1234 builtin/commit.c:1467 builtin/fast-export.c:667 +#: builtin/fast-export.c:670 builtin/tag.c:459 msgid "mode" msgstr "chế Ä‘á»™" -#: builtin/commit.c:1167 builtin/commit.c:1402 +#: builtin/commit.c:1235 builtin/commit.c:1467 msgid "show untracked files, optional modes: all, normal, no. (Default: all)" msgstr "" "hiển thị các táºp tin chÆ°a được theo dõi dấu vết, các chế Ä‘á»™ tùy chá»n: all, " "normal, no. (Mặc định: all)" -#: builtin/commit.c:1170 +#: builtin/commit.c:1238 msgid "show ignored files" msgstr "hiển thị các táºp tin ẩn" -#: builtin/commit.c:1171 parse-options.h:151 +#: builtin/commit.c:1239 parse-options.h:154 msgid "when" msgstr "khi" -#: builtin/commit.c:1172 +#: builtin/commit.c:1240 msgid "" "ignore changes to submodules, optional when: all, dirty, untracked. " "(Default: all)" msgstr "" -"bá» qua các thay đổi trong mô-Ä‘un con, tùy chá»n khi: all, dirty, untracked. " +"bá» qua các thay đổi trong mô-Ä‘un-con, tùy chá»n khi: all, dirty, untracked. " "(Mặc định: all)" -#: builtin/commit.c:1174 +#: builtin/commit.c:1242 msgid "list untracked files in columns" msgstr "hiển thị danh sách các táºp-tin chÆ°a được theo dõi trong các cá»™t" -#: builtin/commit.c:1248 +#: builtin/commit.c:1313 msgid "couldn't look up newly created commit" msgstr "không thể tìm thấy lần chuyển giao (commit) má»›i hÆ¡n đã được tạo" -#: builtin/commit.c:1250 +#: builtin/commit.c:1315 msgid "could not parse newly created commit" msgstr "" "không thể phân tÃch cú pháp của đối tượng chuyển giao má»›i hÆ¡n đã được tạo" -#: builtin/commit.c:1291 +#: builtin/commit.c:1356 msgid "detached HEAD" msgstr "đã rá»i khá»i HEAD" -#: builtin/commit.c:1293 +#: builtin/commit.c:1358 msgid " (root-commit)" msgstr " (root-commit)" -#: builtin/commit.c:1360 +#: builtin/commit.c:1425 msgid "suppress summary after successful commit" msgstr "không hiển thị tổng kết sau khi chuyển giao thà nh công" -#: builtin/commit.c:1361 +#: builtin/commit.c:1426 msgid "show diff in commit message template" msgstr "hiển thị sá»± khác biệt trong mẫu tin nhắn chuyển giao" -#: builtin/commit.c:1363 +#: builtin/commit.c:1428 msgid "Commit message options" msgstr "Các tùy chá»n ghi chú commit" -#: builtin/commit.c:1364 builtin/tag.c:457 +#: builtin/commit.c:1429 builtin/tag.c:457 msgid "read message from file" msgstr "Ä‘á»c chú thÃch từ táºp tin" -#: builtin/commit.c:1365 +#: builtin/commit.c:1430 msgid "author" msgstr "tác giả" -#: builtin/commit.c:1365 +#: builtin/commit.c:1430 msgid "override author for commit" msgstr "ghi đè tác giả cho commit" -#: builtin/commit.c:1366 builtin/gc.c:178 +#: builtin/commit.c:1431 builtin/gc.c:178 msgid "date" msgstr "ngà y tháng" -#: builtin/commit.c:1366 +#: builtin/commit.c:1431 msgid "override date for commit" msgstr "ghi đè ngà y tháng cho commit" -#: builtin/commit.c:1367 builtin/merge.c:208 builtin/notes.c:533 -#: builtin/notes.c:690 builtin/tag.c:455 +#: builtin/commit.c:1432 builtin/merge.c:223 builtin/notes.c:405 +#: builtin/notes.c:562 builtin/tag.c:455 msgid "message" msgstr "thông Ä‘iệp" -#: builtin/commit.c:1367 +#: builtin/commit.c:1432 msgid "commit message" msgstr "chú thÃch của lần commit" -#: builtin/commit.c:1368 +#: builtin/commit.c:1433 msgid "reuse and edit message from specified commit" msgstr "" "dùng lại các ghi chú từ lần chuyển giao (commit) đã cho nhÆ°ng có cho sá»a chữa" -#: builtin/commit.c:1369 +#: builtin/commit.c:1434 msgid "reuse message from specified commit" msgstr "dùng lại các ghi chú từ lần chuyển giao (commit) đã cho" -#: builtin/commit.c:1370 +#: builtin/commit.c:1435 msgid "use autosquash formatted message to fixup specified commit" msgstr "" "dùng ghi chú có định dạng autosquash để sá»a chữa lần chuyển giao đã chỉ ra" -#: builtin/commit.c:1371 +#: builtin/commit.c:1436 msgid "use autosquash formatted message to squash specified commit" msgstr "" "dùng lá»i nhắn có định dạng tá»± Ä‘á»™ng nén để nén lại các lần chuyển giao đã chỉ " "ra" -#: builtin/commit.c:1372 +#: builtin/commit.c:1437 msgid "the commit is authored by me now (used with -C/-c/--amend)" msgstr "" "lần chuyển giao nháºn tôi là tác giả (được dùng vá»›i tùy chá»n -C/-c/--amend)" -#: builtin/commit.c:1373 builtin/log.c:1113 builtin/revert.c:109 +#: builtin/commit.c:1438 builtin/log.c:1160 builtin/revert.c:111 msgid "add Signed-off-by:" msgstr "thêm dòng Signed-off-by:" -#: builtin/commit.c:1374 +#: builtin/commit.c:1439 msgid "use specified template file" msgstr "sá» dụng táºp tin mẫu đã cho" -#: builtin/commit.c:1375 +#: builtin/commit.c:1440 msgid "force edit of commit" msgstr "ép buá»™c sá»a lần commit" -#: builtin/commit.c:1376 +#: builtin/commit.c:1441 msgid "default" msgstr "mặc định" -#: builtin/commit.c:1376 builtin/tag.c:460 +#: builtin/commit.c:1441 builtin/tag.c:460 msgid "how to strip spaces and #comments from message" msgstr "là m thế nà o để cắt bá» khoảng trắng và #ghichú từ mẩu tin nhắn" -#: builtin/commit.c:1377 +#: builtin/commit.c:1442 msgid "include status in commit message template" msgstr "bao gồm các trạng thái ghi mẫu ghi chú chuyển giao (commit)" -#: builtin/commit.c:1378 builtin/merge.c:215 builtin/tag.c:461 +#: builtin/commit.c:1443 builtin/merge.c:230 builtin/tag.c:461 msgid "key id" msgstr "id khóa" -#: builtin/commit.c:1379 builtin/merge.c:216 +#: builtin/commit.c:1444 builtin/merge.c:231 msgid "GPG sign commit" msgstr "ký lần commit dùng GPG" #. end commit message options -#: builtin/commit.c:1382 +#: builtin/commit.c:1447 msgid "Commit contents options" msgstr "Các tùy ná»™i dung ghi chú commit" -#: builtin/commit.c:1383 +#: builtin/commit.c:1448 msgid "commit all changed files" msgstr "chuyển giao tất cả các táºp tin có thay đổi" -#: builtin/commit.c:1384 +#: builtin/commit.c:1449 msgid "add specified files to index for commit" msgstr "thêm các táºp tin đã chỉ ra và o bảng mục lục để chuyển giao (commit)" -#: builtin/commit.c:1385 +#: builtin/commit.c:1450 msgid "interactively add files" msgstr "thêm các táºp-tin bằng tÆ°Æ¡ng tác" -#: builtin/commit.c:1386 +#: builtin/commit.c:1451 msgid "interactively add changes" msgstr "thêm các thay đổi bằng tÆ°Æ¡ng tác" -#: builtin/commit.c:1387 +#: builtin/commit.c:1452 msgid "commit only specified files" msgstr "chỉ chuyển giao các táºp tin đã chỉ ra" -#: builtin/commit.c:1388 +#: builtin/commit.c:1453 msgid "bypass pre-commit hook" msgstr "vòng qua móc (hook) pre-commit" -#: builtin/commit.c:1389 +#: builtin/commit.c:1454 msgid "show what would be committed" msgstr "hiển thị xem cái gì có thể được chuyển giao" -#: builtin/commit.c:1400 +#: builtin/commit.c:1465 msgid "amend previous commit" msgstr "tu bổ (amend) lần commit trÆ°á»›c" -#: builtin/commit.c:1401 +#: builtin/commit.c:1466 msgid "bypass post-rewrite hook" msgstr "vòng qua móc (hook) post-rewrite" -#: builtin/commit.c:1406 +#: builtin/commit.c:1471 msgid "ok to record an empty change" msgstr "ok để ghi lại má»™t thay đổi trống rá»—ng" -#: builtin/commit.c:1409 +#: builtin/commit.c:1474 msgid "ok to record a change with an empty message" msgstr "ok để ghi các thay đổi vá»›i lá»i nhắn trống rá»—ng" -#: builtin/commit.c:1441 +#: builtin/commit.c:1507 msgid "could not parse HEAD commit" msgstr "không thể phân tÃch commit (lần chuyển giao) HEAD" -#: builtin/commit.c:1479 builtin/merge.c:510 +#: builtin/commit.c:1545 builtin/merge.c:525 #, c-format msgid "could not open '%s' for reading" msgstr "không thể mở “%s†để Ä‘á»c" -#: builtin/commit.c:1486 +#: builtin/commit.c:1552 #, c-format msgid "Corrupt MERGE_HEAD file (%s)" msgstr "Táºp tin MERGE_HEAD sai há»ng (%s)" -#: builtin/commit.c:1493 +#: builtin/commit.c:1559 msgid "could not read MERGE_MODE" msgstr "không thể Ä‘á»c MERGE_MODE" -#: builtin/commit.c:1512 +#: builtin/commit.c:1578 #, c-format msgid "could not read commit message: %s" msgstr "không thể Ä‘á»c thông Ä‘iệp (message) commit (lần chuyển giao): %s" -#: builtin/commit.c:1526 +#: builtin/commit.c:1592 #, c-format msgid "Aborting commit; you did not edit the message.\n" msgstr "" "Äang bá» qua việc chuyển giao (commit); bạn đã không biên soạn thông Ä‘iệp " "(message).\n" -#: builtin/commit.c:1531 +#: builtin/commit.c:1597 #, c-format msgid "Aborting commit due to empty commit message.\n" msgstr "" "Äang bá» qua lần chuyển giao (commit) bởi vì thông Ä‘iệp của nó trống rá»—ng.\n" -#: builtin/commit.c:1546 builtin/merge.c:847 builtin/merge.c:872 +#: builtin/commit.c:1612 builtin/merge.c:861 builtin/merge.c:886 msgid "failed to write commit object" msgstr "gặp lá»—i khi ghi đối tượng chuyển giao (commit)" -#: builtin/commit.c:1567 +#: builtin/commit.c:1633 msgid "cannot lock HEAD ref" msgstr "không thể khóa HEAD ref (tham chiếu)" -#: builtin/commit.c:1571 +#: builtin/commit.c:1637 msgid "cannot update HEAD ref" msgstr "không thể cáºp nháºt ref (tham chiếu) HEAD" -#: builtin/commit.c:1582 +#: builtin/commit.c:1648 msgid "" "Repository has been updated, but unable to write\n" "new_index file. Check that disk is not full or quota is\n" @@ -4299,115 +4534,123 @@ msgstr "" msgid "git config [options]" msgstr "git config [các-tùy-chá»n]" -#: builtin/config.c:51 +#: builtin/config.c:52 msgid "Config file location" msgstr "Vị trà táºp tin cấu hình" -#: builtin/config.c:52 +#: builtin/config.c:53 msgid "use global config file" msgstr "đặt táºp tin cấu hình cần toà n cục" -#: builtin/config.c:53 +#: builtin/config.c:54 msgid "use system config file" msgstr "sá» dụng táºp tin cấu hình hệ thống" -#: builtin/config.c:54 +#: builtin/config.c:55 msgid "use repository config file" msgstr "dùng táºp tin cấu hình của kho" -#: builtin/config.c:55 +#: builtin/config.c:56 msgid "use given config file" msgstr "sá» dụng táºp tin cấu hình đã cho" -#: builtin/config.c:56 +#: builtin/config.c:57 +msgid "blob-id" +msgstr "blob-id" + +#: builtin/config.c:57 +msgid "read config from given blob object" +msgstr "Ä‘á»c cấu hình từ đối tượng blob đã cho" + +#: builtin/config.c:58 msgid "Action" msgstr "Hà nh Ä‘á»™ng" -#: builtin/config.c:57 +#: builtin/config.c:59 msgid "get value: name [value-regex]" msgstr "lấy giá-trị: tên [value-regex]" -#: builtin/config.c:58 +#: builtin/config.c:60 msgid "get all values: key [value-regex]" msgstr "lấy tất cả giá-trị: khóa [value-regex]" -#: builtin/config.c:59 +#: builtin/config.c:61 msgid "get values for regexp: name-regex [value-regex]" msgstr "lấy giá trị cho regexp: name-regex [value-regex]" -#: builtin/config.c:60 +#: builtin/config.c:62 msgid "replace all matching variables: name value [value_regex]" msgstr "thay thế tất cả các biến khá»›p mẫu: tên giá-trị [value_regex]" -#: builtin/config.c:61 +#: builtin/config.c:63 msgid "add a new variable: name value" msgstr "thêm biến má»›i: tên giá-trị" -#: builtin/config.c:62 +#: builtin/config.c:64 msgid "remove a variable: name [value-regex]" msgstr "gỡ bá» biến: tên [value-regex]" -#: builtin/config.c:63 +#: builtin/config.c:65 msgid "remove all matches: name [value-regex]" msgstr "gỡ bá» má»i cái khá»›p: tên [value-regex]" -#: builtin/config.c:64 +#: builtin/config.c:66 msgid "rename section: old-name new-name" msgstr "đổi tên chÆ°Æ¡ng: tên-cÅ© tên-má»›i" -#: builtin/config.c:65 +#: builtin/config.c:67 msgid "remove a section: name" msgstr "gỡ bá» chÆ°Æ¡ng: tên" -#: builtin/config.c:66 +#: builtin/config.c:68 msgid "list all" msgstr "liệt kê tất" -#: builtin/config.c:67 +#: builtin/config.c:69 msgid "open an editor" msgstr "mở má»™t trình biên soạn" -#: builtin/config.c:68 builtin/config.c:69 +#: builtin/config.c:70 builtin/config.c:71 msgid "slot" msgstr "khe" -#: builtin/config.c:68 +#: builtin/config.c:70 msgid "find the color configured: [default]" msgstr "tìm cấu hình mà u sắc: [mặc định]" -#: builtin/config.c:69 +#: builtin/config.c:71 msgid "find the color setting: [stdout-is-tty]" msgstr "tìm các cà i đặt vá» mà u sắc: [stdout-là -tty]" -#: builtin/config.c:70 +#: builtin/config.c:72 msgid "Type" msgstr "Kiểu" -#: builtin/config.c:71 +#: builtin/config.c:73 msgid "value is \"true\" or \"false\"" msgstr "giá trị là \"true\" hoặc \"false\"" -#: builtin/config.c:72 +#: builtin/config.c:74 msgid "value is decimal number" msgstr "giá trị ở dạng số tháºp phân" -#: builtin/config.c:73 +#: builtin/config.c:75 msgid "value is --bool or --int" msgstr "giá trị là --bool hoặc --int" -#: builtin/config.c:74 +#: builtin/config.c:76 msgid "value is a path (file or directory name)" msgstr "giá trị là đưá»ng dẫn (tên táºp tin hay thÆ° mục)" -#: builtin/config.c:75 +#: builtin/config.c:77 msgid "Other" msgstr "Khác" -#: builtin/config.c:76 +#: builtin/config.c:78 msgid "terminate values with NUL byte" msgstr "chấm dứt giá trị vá»›i byte NUL" -#: builtin/config.c:77 +#: builtin/config.c:79 msgid "respect include directives on lookup" msgstr "tôn trá»ng kể cà các hÆ°á»›ng trong tìm kiếm" @@ -4419,55 +4662,55 @@ msgstr "git count-objects [-v] [-H | --human-readable]" msgid "print sizes in human readable format" msgstr "hiển thị kÃch cỡ theo định dạng dà nh cho ngÆ°á»i Ä‘á»c" -#: builtin/describe.c:15 +#: builtin/describe.c:16 msgid "git describe [options] <committish>*" msgstr "git describe [các-tùy-chá»n] <committish>*" -#: builtin/describe.c:16 +#: builtin/describe.c:17 msgid "git describe [options] --dirty" msgstr "git describe [các-tùy-chá»n] --dirty" -#: builtin/describe.c:233 +#: builtin/describe.c:237 #, c-format msgid "annotated tag %s not available" msgstr "thẻ đã được ghi chú %s không sẵn để dùng" -#: builtin/describe.c:237 +#: builtin/describe.c:241 #, c-format msgid "annotated tag %s has no embedded name" msgstr "thẻ được chú giải %s không có tên nhúng" -#: builtin/describe.c:239 +#: builtin/describe.c:243 #, c-format msgid "tag '%s' is really '%s' here" msgstr "thẻ “%s†đã thá»±c sá»± ở đây “%s†rồi" -#: builtin/describe.c:266 +#: builtin/describe.c:270 #, c-format msgid "Not a valid object name %s" msgstr "Không phải tên đối tượng %s hợp lệ" -#: builtin/describe.c:269 +#: builtin/describe.c:273 #, c-format msgid "%s is not a valid '%s' object" msgstr "%s không phải là má»™t đối tượng “%s†hợp lệ" -#: builtin/describe.c:286 +#: builtin/describe.c:290 #, c-format msgid "no tag exactly matches '%s'" msgstr "không có thẻ nà o khá»›p chÃnh xác vá»›i “%sâ€" -#: builtin/describe.c:288 +#: builtin/describe.c:292 #, c-format msgid "searching to describe %s\n" msgstr "Äang tìm kiếm để mô tả %s\n" -#: builtin/describe.c:328 +#: builtin/describe.c:332 #, c-format msgid "finished search at %s\n" msgstr "việc tìm kiếm đã kết thúc tại %s\n" -#: builtin/describe.c:352 +#: builtin/describe.c:359 #, c-format msgid "" "No annotated tags can describe '%s'.\n" @@ -4476,7 +4719,7 @@ msgstr "" "Không có thẻ được chú giải nà o được mô tả là “%sâ€.\n" "Tuy nhiên, ở đây có những thẻ không được chú giải: hãy thá» --tags." -#: builtin/describe.c:356 +#: builtin/describe.c:363 #, c-format msgid "" "No tags can describe '%s'.\n" @@ -4485,12 +4728,12 @@ msgstr "" "Không có thẻ (tag) có thể mô tả “%sâ€.\n" "Hãy thá» --always, hoặt tạo má»™t số thẻ." -#: builtin/describe.c:377 +#: builtin/describe.c:384 #, c-format msgid "traversed %lu commits\n" msgstr "đã xuyên %lu qua lần chuyển giao (commit)\n" -#: builtin/describe.c:380 +#: builtin/describe.c:387 #, c-format msgid "" "more than %i tags found; listed %i most recent\n" @@ -4499,59 +4742,63 @@ msgstr "" "tìm thấy nhiá»u hÆ¡n %i thẻ (tag); đã liệt kê %i gần đây nhất\n" "bá» Ä‘i tìm kiếm tại %s\n" -#: builtin/describe.c:402 +#: builtin/describe.c:409 msgid "find the tag that comes after the commit" msgstr "tìm các thẻ mà nó đến trÆ°á»›c lần chuyển giao" -#: builtin/describe.c:403 +#: builtin/describe.c:410 msgid "debug search strategy on stderr" msgstr "chiến lược tìm kiếm trên đầu ra lá»—i chuẩn stderr" -#: builtin/describe.c:404 +#: builtin/describe.c:411 msgid "use any ref" msgstr "dùng ref bất kỳ" -#: builtin/describe.c:405 +#: builtin/describe.c:412 msgid "use any tag, even unannotated" msgstr "dùng thẻ bất kỳ, cả khi “unannotatedâ€" -#: builtin/describe.c:406 +#: builtin/describe.c:413 msgid "always use long format" msgstr "luôn dùng định dạng dà i" -#: builtin/describe.c:409 +#: builtin/describe.c:414 +msgid "only follow first parent" +msgstr "chỉ theo cha mẹ đầu tiên" + +#: builtin/describe.c:417 msgid "only output exact matches" msgstr "chỉ xuất những gì khá»›p chÃnh xác" -#: builtin/describe.c:411 +#: builtin/describe.c:419 msgid "consider <n> most recent tags (default: 10)" msgstr "coi nhÆ° <n> thẻ gần đây nhất (mặc định: 10)" -#: builtin/describe.c:413 +#: builtin/describe.c:421 msgid "only consider tags matching <pattern>" msgstr "chỉ cân nhắc đến những thẻ khá»›p vá»›i <mẫu>" -#: builtin/describe.c:415 builtin/name-rev.c:238 +#: builtin/describe.c:423 builtin/name-rev.c:322 msgid "show abbreviated commit object as fallback" msgstr "hiển thị đối tượng chuyển giao vắn tắt nhÆ° là fallback" -#: builtin/describe.c:416 +#: builtin/describe.c:424 msgid "mark" msgstr "dấu" -#: builtin/describe.c:417 +#: builtin/describe.c:425 msgid "append <mark> on dirty working tree (default: \"-dirty\")" msgstr "thêm <dấu> trên cây thÆ° mục là m việc bẩn (mặc định \"-dirty\")" -#: builtin/describe.c:435 +#: builtin/describe.c:443 msgid "--long is incompatible with --abbrev=0" msgstr "--long là xung khắc vá»›i tùy chá»n --abbrev=0" -#: builtin/describe.c:461 +#: builtin/describe.c:469 msgid "No names found, cannot describe anything." msgstr "Không tìm thấy các tên, không thể mô tả gì cả." -#: builtin/describe.c:481 +#: builtin/describe.c:489 msgid "--dirty is incompatible with committishes" msgstr "--dirty là xung khắc vá»›i các tùy chá»n dà nh cho chuyển giao (commit)" @@ -4560,31 +4807,26 @@ msgstr "--dirty là xung khắc vá»›i các tùy chá»n dà nh cho chuyển giao ( msgid "'%s': not a regular file or symlink" msgstr "“%sâ€: không phải táºp tin bình thÆ°á»ng hay liên kết tượng trÆ°ng" -#: builtin/diff.c:228 +#: builtin/diff.c:230 #, c-format msgid "invalid option: %s" msgstr "tùy chá»n sai: %s" -#: builtin/diff.c:305 +#: builtin/diff.c:307 msgid "Not a git repository" msgstr "Không phải là kho git" -#: builtin/diff.c:348 +#: builtin/diff.c:350 #, c-format msgid "invalid object '%s' given." msgstr "đối tượng đã cho “%s†không hợp lệ." -#: builtin/diff.c:353 -#, c-format -msgid "more than %d trees given: '%s'" -msgstr "đã chỉ ra nhiá»u hÆ¡n %d cây (tree): “%sâ€" - -#: builtin/diff.c:363 +#: builtin/diff.c:359 #, c-format msgid "more than two blobs given: '%s'" msgstr "đã cho nhiá»u hÆ¡n hai đối tượng blob: “%sâ€" -#: builtin/diff.c:371 +#: builtin/diff.c:366 #, c-format msgid "unhandled object '%s' given." msgstr "đã cho đối tượng không thể nắm giữ “%sâ€." @@ -4593,39 +4835,39 @@ msgstr "đã cho đối tượng không thể nắm giữ “%sâ€." msgid "git fast-export [rev-list-opts]" msgstr "git fast-export [rev-list-opts]" -#: builtin/fast-export.c:658 +#: builtin/fast-export.c:666 msgid "show progress after <n> objects" msgstr "hiển thị tiến triển sau <n> đối tượng" -#: builtin/fast-export.c:660 +#: builtin/fast-export.c:668 msgid "select handling of signed tags" msgstr "chá»n Ä‘iá»u khiển của thẻ đã ký" -#: builtin/fast-export.c:663 +#: builtin/fast-export.c:671 msgid "select handling of tags that tag filtered objects" msgstr "chá»n sá»± xá» lý của các thẻ, cái mà đánh thẻ các đối tượng được lá»c ra" -#: builtin/fast-export.c:666 +#: builtin/fast-export.c:674 msgid "Dump marks to this file" msgstr "Äổ các đánh dấu nà y và o táºp-tin" -#: builtin/fast-export.c:668 +#: builtin/fast-export.c:676 msgid "Import marks from this file" msgstr "nháºp và o đánh dấu từ táºp tin nà y" -#: builtin/fast-export.c:670 +#: builtin/fast-export.c:678 msgid "Fake a tagger when tags lack one" msgstr "Là m giả má»™t cái thẻ khi thẻ bị thiếu má»™t cái" -#: builtin/fast-export.c:672 +#: builtin/fast-export.c:680 msgid "Output full tree for each commit" msgstr "Xuất ra toà n bá»™ cây cho má»—i lần chuyển giao" -#: builtin/fast-export.c:674 +#: builtin/fast-export.c:682 msgid "Use the done feature to terminate the stream" msgstr "Sá» dụng tÃnh năng done để chấm dứt luồng dữ liệu" -#: builtin/fast-export.c:675 +#: builtin/fast-export.c:683 msgid "Skip output of blob data" msgstr "Bá» qua kết xuất của dữ liệu blob" @@ -4647,7 +4889,7 @@ msgstr "git fetch --all [<các-tùy-chá»n>]" #: builtin/fetch.c:60 msgid "fetch from all remotes" -msgstr "fetch từ tất cả các máy chủ" +msgstr "lấy vá» từ tất cả các máy chủ" #: builtin/fetch.c:62 msgid "append to .git/FETCH_HEAD instead of overwriting" @@ -4663,15 +4905,15 @@ msgstr "ép buá»™c ghi đè lên nhánh ná»™i bá»™" #: builtin/fetch.c:67 msgid "fetch from multiple remotes" -msgstr "fetch từ nhiá»u máy chủ cùng lúc" +msgstr "lấy từ nhiá»u máy chủ cùng lúc" #: builtin/fetch.c:69 msgid "fetch all tags and associated objects" -msgstr "lấy (fetch) tất cả các thẻ cùng vá»›i các đối tượng liên quan đến nó" +msgstr "lấy tất cả các thẻ cùng vá»›i các đối tượng liên quan đến nó" #: builtin/fetch.c:71 msgid "do not fetch all tags (--no-tags)" -msgstr "không lấy (fetch) tất cả các thẻ (--no-tags)" +msgstr "không lấy tất cả các thẻ (--no-tags)" #: builtin/fetch.c:73 msgid "prune remote-tracking branches no longer on remote" @@ -4685,7 +4927,7 @@ msgstr "khi-cần" #: builtin/fetch.c:75 msgid "control recursive fetching of submodules" -msgstr "Ä‘iá»u khiển việc lấy vá» (fetch) đệ quy trong các mô-Ä‘un-con" +msgstr "Ä‘iá»u khiển việc lấy vỠđệ quy trong các mô-Ä‘un-con" #: builtin/fetch.c:79 msgid "keep downloaded pack" @@ -4693,7 +4935,7 @@ msgstr "giữ các gói đã tải vá»" #: builtin/fetch.c:81 msgid "allow updating of HEAD ref" -msgstr "cho phép cáºp nháºt ref (tham chiếu) HEAD" +msgstr "cho phép cáºp nháºt th.chiếu HEAD" #: builtin/fetch.c:84 msgid "deepen history of shallow clone" @@ -4703,7 +4945,7 @@ msgstr "là m sâu hÆ¡n lịch sá» của bản sao" msgid "convert to a complete repository" msgstr "chuyển đổi hoà n toà n sang kho git" -#: builtin/fetch.c:88 builtin/log.c:1130 +#: builtin/fetch.c:88 builtin/log.c:1177 msgid "dir" msgstr "tmục" @@ -4715,76 +4957,76 @@ msgstr "soạn sẵn cái nà y cho kết xuất Ä‘Æ°á»ng dẫn mô-Ä‘un-con" msgid "default mode for recursion" msgstr "chế Ä‘á»™ mặc định cho đệ qui" -#: builtin/fetch.c:204 +#: builtin/fetch.c:220 msgid "Couldn't find remote ref HEAD" msgstr "Không thể tìm thấy máy chủ cho tham chiếu HEAD" -#: builtin/fetch.c:257 +#: builtin/fetch.c:273 #, c-format msgid "object %s not found" msgstr "Không tìm thấy đối tượng %s" -#: builtin/fetch.c:262 +#: builtin/fetch.c:278 msgid "[up to date]" msgstr "[đã cáºp nháºt]" -#: builtin/fetch.c:276 +#: builtin/fetch.c:292 #, c-format msgid "! %-*s %-*s -> %s (can't fetch in current branch)" msgstr "! %-*s %-*s -> %s (không thể fetch (lấy) vá» nhánh hiện hà nh)" -#: builtin/fetch.c:277 builtin/fetch.c:363 +#: builtin/fetch.c:293 builtin/fetch.c:379 msgid "[rejected]" msgstr "[Bị từ chối]" -#: builtin/fetch.c:288 +#: builtin/fetch.c:304 msgid "[tag update]" msgstr "[cáºp nháºt thẻ]" -#: builtin/fetch.c:290 builtin/fetch.c:325 builtin/fetch.c:343 +#: builtin/fetch.c:306 builtin/fetch.c:341 builtin/fetch.c:359 msgid " (unable to update local ref)" msgstr " (không thể cáºp nháºt tham chiếu (ref) ná»™i bá»™)" -#: builtin/fetch.c:308 +#: builtin/fetch.c:324 msgid "[new tag]" msgstr "[thẻ má»›i]" -#: builtin/fetch.c:311 +#: builtin/fetch.c:327 msgid "[new branch]" msgstr "[nhánh má»›i]" -#: builtin/fetch.c:314 +#: builtin/fetch.c:330 msgid "[new ref]" msgstr "[ref (tham chiếu) má»›i]" -#: builtin/fetch.c:359 +#: builtin/fetch.c:375 msgid "unable to update local ref" msgstr "không thể cáºp nháºt tham chiếu (ref) ná»™i bá»™" -#: builtin/fetch.c:359 +#: builtin/fetch.c:375 msgid "forced update" msgstr "cưỡng bức cáºp nháºt" -#: builtin/fetch.c:365 +#: builtin/fetch.c:381 msgid "(non-fast-forward)" msgstr "(non-fast-forward)" -#: builtin/fetch.c:396 builtin/fetch.c:688 +#: builtin/fetch.c:412 builtin/fetch.c:718 #, c-format msgid "cannot open %s: %s\n" msgstr "không thể mở %s: %s\n" -#: builtin/fetch.c:405 +#: builtin/fetch.c:421 #, c-format msgid "%s did not send all necessary objects\n" msgstr "%s đã không gá»i tất cả các đối tượng cần thiết\n" -#: builtin/fetch.c:491 +#: builtin/fetch.c:520 #, c-format msgid "From %.*s\n" msgstr "Từ %.*s\n" -#: builtin/fetch.c:502 +#: builtin/fetch.c:531 #, c-format msgid "" "some local refs could not be updated; try running\n" @@ -4793,57 +5035,57 @@ msgstr "" "má»™t số tham chiếu (refs) ná»™i bá»™ không thể được cáºp nháºt; hãy thá» chạy\n" " “git remote prune %s†để bá» Ä‘i những nhánh cÅ©, hay bị xung Ä‘á»™t" -#: builtin/fetch.c:552 +#: builtin/fetch.c:581 #, c-format msgid " (%s will become dangling)" msgstr " (%s sẽ trở thà nh không đầu (không được quản lý))" -#: builtin/fetch.c:553 +#: builtin/fetch.c:582 #, c-format msgid " (%s has become dangling)" msgstr " (%s đã trở thà nh không đầu (không được quản lý))" -#: builtin/fetch.c:560 +#: builtin/fetch.c:589 msgid "[deleted]" msgstr "[đã xóa]" -#: builtin/fetch.c:561 builtin/remote.c:1055 +#: builtin/fetch.c:590 builtin/remote.c:1055 msgid "(none)" msgstr "(không)" -#: builtin/fetch.c:678 +#: builtin/fetch.c:708 #, c-format msgid "Refusing to fetch into current branch %s of non-bare repository" msgstr "" "Từ chối việc lấy (fetch) và o trong nhánh hiện tại %s của má»™t kho chứa không " "phải kho trần (bare)" -#: builtin/fetch.c:712 +#: builtin/fetch.c:742 #, c-format msgid "Don't know how to fetch from %s" -msgstr "Không biết là m cách nà o để lấy vá» (fetch) từ %s" +msgstr "Không biết là m cách nà o để lấy vá» từ %s" -#: builtin/fetch.c:789 +#: builtin/fetch.c:823 #, c-format msgid "Option \"%s\" value \"%s\" is not valid for %s" msgstr "Tùy chá»n \"%s\" có giá trị \"%s\" là không hợp lệ cho %s" -#: builtin/fetch.c:792 +#: builtin/fetch.c:826 #, c-format msgid "Option \"%s\" is ignored for %s\n" msgstr "Tùy chá»n \"%s\" bị bá» qua vá»›i %s\n" -#: builtin/fetch.c:894 +#: builtin/fetch.c:928 #, c-format msgid "Fetching %s\n" -msgstr "Äang lấy (fetch) %s\n" +msgstr "Äang lấy vá» %s\n" -#: builtin/fetch.c:896 builtin/remote.c:100 +#: builtin/fetch.c:930 builtin/remote.c:100 #, c-format msgid "Could not fetch %s" -msgstr "không thể fetch (lấy) %s" +msgstr "không thể lấy vá» %s" -#: builtin/fetch.c:915 +#: builtin/fetch.c:949 msgid "" "No remote repository specified. Please, specify either a URL or a\n" "remote name from which new revisions should be fetched." @@ -4851,32 +5093,32 @@ msgstr "" "ChÆ°a chỉ ra kho chứa máy chủ. Xin hãy chỉ định hoặc là URL hoặc\n" "tên máy chủ từ cái mà những Ä‘iểm xét duyệt má»›i có thể được fetch (lấy vá»)." -#: builtin/fetch.c:935 +#: builtin/fetch.c:969 msgid "You need to specify a tag name." msgstr "Bạn phải định rõ tên thẻ." -#: builtin/fetch.c:981 +#: builtin/fetch.c:1015 msgid "--depth and --unshallow cannot be used together" msgstr "tùy chá»n --depth và --unshallow không thể sá» dụng cùng vá»›i nhau" -#: builtin/fetch.c:983 +#: builtin/fetch.c:1017 msgid "--unshallow on a complete repository does not make sense" msgstr "--unshallow trên kho hoà n chỉnh là không hợp lý" -#: builtin/fetch.c:1002 +#: builtin/fetch.c:1036 msgid "fetch --all does not take a repository argument" msgstr "lệnh lấy vá» \"fetch --all\" không lấy đối số kho chứa" -#: builtin/fetch.c:1004 +#: builtin/fetch.c:1038 msgid "fetch --all does not make sense with refspecs" msgstr "lệnh lấy vá» \"fetch --all\" không hợp lý vá»›i refspecs" -#: builtin/fetch.c:1015 +#: builtin/fetch.c:1049 #, c-format msgid "No such remote or remote group: %s" msgstr "không có nhóm máy chủ hay máy chủ nhÆ° thế: %s" -#: builtin/fetch.c:1023 +#: builtin/fetch.c:1057 msgid "Fetching a group and specifying refspecs does not make sense" msgstr "Việc lấy vá» cả má»™t nhóm và chỉ định refspecs không hợp lý" @@ -4885,9 +5127,9 @@ msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]" msgstr "" "git fmt-merge-msg [-m <thông Ä‘iệp>] [--log[=<n>]|--no-log] [--file <táºp-tin>]" -#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:701 -#: builtin/merge.c:188 builtin/show-branch.c:655 builtin/show-ref.c:175 -#: builtin/tag.c:446 parse-options.h:133 parse-options.h:239 +#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:700 +#: builtin/merge.c:203 builtin/show-branch.c:655 builtin/show-ref.c:179 +#: builtin/tag.c:446 parse-options.h:133 parse-options.h:243 msgid "n" msgstr "n" @@ -5047,223 +5289,223 @@ msgstr "git grep [các-tùy-chá»n] [-e] <mẫu> [<rev>...] [[--] <Ä‘Æ°á»ng-dẠmsgid "grep: failed to create thread: %s" msgstr "grep: gặp lá»—i tạo tuyến (thread): %s" -#: builtin/grep.c:365 +#: builtin/grep.c:364 #, c-format msgid "Failed to chdir: %s" msgstr "Gặp lá»—i vá»›i lệnh chdir: %s" -#: builtin/grep.c:443 builtin/grep.c:478 +#: builtin/grep.c:442 builtin/grep.c:477 #, c-format msgid "unable to read tree (%s)" msgstr "không thể Ä‘á»c cây (%s)" -#: builtin/grep.c:493 +#: builtin/grep.c:492 #, c-format msgid "unable to grep from object of type %s" msgstr "không thể thá»±c hiện lệnh grep (lá»c tìm) từ đối tượng thuá»™c kiểu %s" -#: builtin/grep.c:551 +#: builtin/grep.c:550 #, c-format msgid "switch `%c' expects a numerical value" msgstr "chuyển đến “%c†cần má»™t giá trị bằng số" -#: builtin/grep.c:568 +#: builtin/grep.c:567 #, c-format msgid "cannot open '%s'" msgstr "không mở được “%sâ€" -#: builtin/grep.c:643 +#: builtin/grep.c:642 msgid "search in index instead of in the work tree" msgstr "tìm trong bảng mục lục thay vì trong cây là m việc" -#: builtin/grep.c:645 +#: builtin/grep.c:644 msgid "find in contents not managed by git" msgstr "tìm trong ná»™i dung không được quản lý bởi git" -#: builtin/grep.c:647 +#: builtin/grep.c:646 msgid "search in both tracked and untracked files" msgstr "tìm kiếm các táºp tin được và chÆ°a được theo dõi dấu vết" -#: builtin/grep.c:649 +#: builtin/grep.c:648 msgid "search also in ignored files" msgstr "tìm cả trong các táºp tin đã bị lá» Ä‘i" -#: builtin/grep.c:652 +#: builtin/grep.c:651 msgid "show non-matching lines" msgstr "hiển thị những dòng không khá»›p vá»›i mẫu" -#: builtin/grep.c:654 +#: builtin/grep.c:653 msgid "case insensitive matching" msgstr "phân biệt chữ hoa/thÆ°á»ng" -#: builtin/grep.c:656 +#: builtin/grep.c:655 msgid "match patterns only at word boundaries" msgstr "chỉ khá»›p mẫu tại Ä‘Æ°á»ng ranh giá»›i từ" -#: builtin/grep.c:658 +#: builtin/grep.c:657 msgid "process binary files as text" msgstr "xá» lý táºp tin nhị phân nhÆ° là dạng văn bản thÆ°á»ng" -#: builtin/grep.c:660 +#: builtin/grep.c:659 msgid "don't match patterns in binary files" msgstr "không khá»›p mẫu trong các táºp tin nhị phân" -#: builtin/grep.c:663 +#: builtin/grep.c:662 msgid "descend at most <depth> levels" msgstr "giảm xuống Ãt nhất mức <sâu>" -#: builtin/grep.c:667 +#: builtin/grep.c:666 msgid "use extended POSIX regular expressions" msgstr "dùng biểu thức chÃnh qui POSIX có mở rá»™ng" -#: builtin/grep.c:670 +#: builtin/grep.c:669 msgid "use basic POSIX regular expressions (default)" msgstr "sá» dụng biểu thức chÃnh quy kiểu POSIX (mặc định)" -#: builtin/grep.c:673 +#: builtin/grep.c:672 msgid "interpret patterns as fixed strings" msgstr "diá»…n dịch các mẫu nhÆ° là chuá»—i cố định" -#: builtin/grep.c:676 +#: builtin/grep.c:675 msgid "use Perl-compatible regular expressions" msgstr "sá» dụng biểu thức chÃnh quy tÆ°Æ¡ng thÃch Perl" -#: builtin/grep.c:679 +#: builtin/grep.c:678 msgid "show line numbers" msgstr "hiển thị số của dòng" -#: builtin/grep.c:680 +#: builtin/grep.c:679 msgid "don't show filenames" msgstr "không hiển thị tên táºp tin" -#: builtin/grep.c:681 +#: builtin/grep.c:680 msgid "show filenames" msgstr "hiển thị các tên táºp tin" -#: builtin/grep.c:683 +#: builtin/grep.c:682 msgid "show filenames relative to top directory" msgstr "hiển thị tên táºp tin tÆ°Æ¡ng đối vá»›i thÆ° mục đỉnh (top)" -#: builtin/grep.c:685 +#: builtin/grep.c:684 msgid "show only filenames instead of matching lines" msgstr "chỉ hiển thị tên táºp tin thay vì những dòng khá»›p vá»›i mẫu" -#: builtin/grep.c:687 +#: builtin/grep.c:686 msgid "synonym for --files-with-matches" msgstr "đồng nghÄ©a vá»›i --files-with-matches" -#: builtin/grep.c:690 +#: builtin/grep.c:689 msgid "show only the names of files without match" msgstr "chỉ hiển thị tên cho những táºp tin không khá»›p vá»›i mẫu" -#: builtin/grep.c:692 +#: builtin/grep.c:691 msgid "print NUL after filenames" msgstr "thêm NUL và o sau tên táºp tin" -#: builtin/grep.c:694 +#: builtin/grep.c:693 msgid "show the number of matches instead of matching lines" msgstr "hiển thị số lượng khá»›p thay vì những dòng khá»›p vá»›i mẫu" -#: builtin/grep.c:695 +#: builtin/grep.c:694 msgid "highlight matches" msgstr "tô sáng cái khá»›p" -#: builtin/grep.c:697 +#: builtin/grep.c:696 msgid "print empty line between matches from different files" msgstr "hiển thị dòng trống giữa các lần khá»›p từ các táºp tin khác biệt" -#: builtin/grep.c:699 +#: builtin/grep.c:698 msgid "show filename only once above matches from same file" msgstr "" "hiển thị tên táºp tin má»™t lần phÃa trên các lần khá»›p từ cùng má»™t táºp tin" -#: builtin/grep.c:702 +#: builtin/grep.c:701 msgid "show <n> context lines before and after matches" msgstr "hiển thị <n> dòng ná»™i dung phÃa trÆ°á»›c và sau các lần khá»›p" -#: builtin/grep.c:705 +#: builtin/grep.c:704 msgid "show <n> context lines before matches" msgstr "hiển thị <n> dòng ná»™i dung trÆ°á»›c khá»›p" -#: builtin/grep.c:707 +#: builtin/grep.c:706 msgid "show <n> context lines after matches" msgstr "hiển thị <n> dòng ná»™i dung sau khá»›p" -#: builtin/grep.c:708 +#: builtin/grep.c:707 msgid "shortcut for -C NUM" msgstr "Dạng tắt cho -C Sá»" -#: builtin/grep.c:711 +#: builtin/grep.c:710 msgid "show a line with the function name before matches" msgstr "hiển thị dòng vói tên hà m trÆ°á»›c các lần khá»›p" -#: builtin/grep.c:713 +#: builtin/grep.c:712 msgid "show the surrounding function" msgstr "hiển thị hà m bao quanh" -#: builtin/grep.c:716 +#: builtin/grep.c:715 msgid "read patterns from file" msgstr "Ä‘á»c mẫu từ táºp-tin" -#: builtin/grep.c:718 +#: builtin/grep.c:717 msgid "match <pattern>" msgstr "match <mẫu>" -#: builtin/grep.c:720 +#: builtin/grep.c:719 msgid "combine patterns specified with -e" msgstr "tổ hợp mẫu được chỉ ra vá»›i tùy chá»n -e" -#: builtin/grep.c:732 +#: builtin/grep.c:731 msgid "indicate hit with exit status without output" msgstr "Ä‘Æ°a ra gợi ý vá»›i trạng thái thoát mà không có kết xuất" -#: builtin/grep.c:734 +#: builtin/grep.c:733 msgid "show only matches from files that match all patterns" msgstr "chỉ hiển thị những cái khá»›p từ táºp tin mà nó khá»›p toà n bá»™ các mẫu" -#: builtin/grep.c:736 +#: builtin/grep.c:735 msgid "show parse tree for grep expression" msgstr "hiển thị cây phân tÃch cú pháp cho biểu thức “grep†(tìm kiếm)" -#: builtin/grep.c:740 +#: builtin/grep.c:739 msgid "pager" msgstr "trang giấy" -#: builtin/grep.c:740 +#: builtin/grep.c:739 msgid "show matching files in the pager" msgstr "hiển thị các táºp tin khá»›p trong trang giấy" -#: builtin/grep.c:743 +#: builtin/grep.c:742 msgid "allow calling of grep(1) (ignored by this build)" msgstr "cho phép gá»i grep(1) (bị bá» qua bởi lần dịch nà y)" -#: builtin/grep.c:744 builtin/show-ref.c:184 +#: builtin/grep.c:743 builtin/show-ref.c:188 msgid "show usage" msgstr "hiển thị cách dùng" -#: builtin/grep.c:811 +#: builtin/grep.c:810 msgid "no pattern given." msgstr "chÆ°a chỉ ra mẫu." -#: builtin/grep.c:866 +#: builtin/grep.c:865 msgid "--open-files-in-pager only works on the worktree" msgstr "--open-files-in-pager chỉ là m việc trên cây-là m-việc" -#: builtin/grep.c:889 +#: builtin/grep.c:888 msgid "--cached or --untracked cannot be used with --no-index." msgstr "--cached hay --untracked không được sá» dụng vá»›i --no-index." -#: builtin/grep.c:894 +#: builtin/grep.c:893 msgid "--no-index or --untracked cannot be used with revs." msgstr "" "--no-index hay --untracked không được sá» dụng cùng vá»›i các tùy chá»n liên " "quan đến revs." -#: builtin/grep.c:897 +#: builtin/grep.c:896 msgid "--[no-]exclude-standard cannot be used for tracked contents." msgstr "--[no-]exclude-standard không thể sá» dụng cho ná»™i dung lÆ°u dấu vết." -#: builtin/grep.c:905 +#: builtin/grep.c:904 msgid "both --cached and trees are given." msgstr "cả hai --cached và các cây phải được chỉ ra." @@ -5303,54 +5545,54 @@ msgstr "lÆ°u các táºp tin mà nó không có các bá»™ lá»c" msgid "process file as it were from this path" msgstr "xá» lý táºp tin nhÆ° là nó Ä‘ang ở thÆ° mục nà y" -#: builtin/help.c:43 +#: builtin/help.c:41 msgid "print all available commands" msgstr "hiển thị danh sách các câu lệnh ngÆ°á»i dùng có thể sá» dụng" -#: builtin/help.c:44 +#: builtin/help.c:42 msgid "print list of useful guides" msgstr "hiển thị danh sách các hÆ°á»›ng dẫn hữu dụng" -#: builtin/help.c:45 +#: builtin/help.c:43 msgid "show man page" msgstr "hiển thị trang man" -#: builtin/help.c:46 +#: builtin/help.c:44 msgid "show manual in web browser" msgstr "hiển thị hÆ°á»›ng dẫn sá» dụng trong trình duyệt web" -#: builtin/help.c:48 +#: builtin/help.c:46 msgid "show info page" msgstr "hiện trang info" -#: builtin/help.c:54 +#: builtin/help.c:52 msgid "git help [--all] [--guides] [--man|--web|--info] [command]" msgstr "git help [--all] [--guides] [--man|--web|--info] [lệnh]" -#: builtin/help.c:66 +#: builtin/help.c:64 #, c-format msgid "unrecognized help format '%s'" msgstr "không nháºn ra định dạng trợ giúp “%sâ€" -#: builtin/help.c:94 +#: builtin/help.c:92 msgid "Failed to start emacsclient." msgstr "Lá»—i khởi chạy emacsclient." -#: builtin/help.c:107 +#: builtin/help.c:105 msgid "Failed to parse emacsclient version." msgstr "Gặp lá»—i khi phân tÃch phiên bản emacsclient." -#: builtin/help.c:115 +#: builtin/help.c:113 #, c-format msgid "emacsclient version '%d' too old (< 22)." msgstr "phiên bản của emacsclient “%d†quá cÅ© (< 22)." -#: builtin/help.c:133 builtin/help.c:161 builtin/help.c:170 builtin/help.c:178 +#: builtin/help.c:131 builtin/help.c:159 builtin/help.c:168 builtin/help.c:176 #, c-format msgid "failed to exec '%s': %s" msgstr "gặp lá»—i khi thá»±c thi “%sâ€: %s" -#: builtin/help.c:218 +#: builtin/help.c:216 #, c-format msgid "" "'%s': path for unsupported man viewer.\n" @@ -5359,7 +5601,7 @@ msgstr "" "“%sâ€: Ä‘Æ°á»ng dẫn không há»— trợ bá»™ trình chiếu man.\n" "Hãy cân nhắc đến việc sá» dụng “man.<tool>.cmd†để thay thế." -#: builtin/help.c:230 +#: builtin/help.c:228 #, c-format msgid "" "'%s': cmd for supported man viewer.\n" @@ -5368,335 +5610,335 @@ msgstr "" "“%sâ€: cmd (lệnh) há»— trợ bá»™ trình chiếu man.\n" "Hãy cân nhắc đến việc sá» dụng “man.<tool>.path†để thay thế." -#: builtin/help.c:351 +#: builtin/help.c:349 #, c-format msgid "'%s': unknown man viewer." msgstr "“%sâ€: không rõ chÆ°Æ¡ng trình xem man." -#: builtin/help.c:368 +#: builtin/help.c:366 msgid "no man viewer handled the request" msgstr "không có trình xem trợ giúp dạng manpage tiếp hợp vá»›i yêu cầu" -#: builtin/help.c:376 +#: builtin/help.c:374 msgid "no info viewer handled the request" msgstr "không có trình xem trợ giúp dạng info tiếp hợp vá»›i yêu cầu" -#: builtin/help.c:422 +#: builtin/help.c:420 msgid "Defining attributes per path" msgstr "Äịnh nghÄ©a các thuá»™c tÃnh cho má»—i Ä‘Æ°á»ng dẫn" -#: builtin/help.c:423 +#: builtin/help.c:421 msgid "A Git glossary" msgstr "Thuáºt ngữ chuyên môn Git" -#: builtin/help.c:424 +#: builtin/help.c:422 msgid "Specifies intentionally untracked files to ignore" -msgstr "Chỉ định các táºp tin chÆ°a theo dõi dấu vết bị bá» qua má»™t cách cố ý" +msgstr "Chỉ định các táºp tin không cần theo dõi" -#: builtin/help.c:425 +#: builtin/help.c:423 msgid "Defining submodule properties" msgstr "Äịnh nghÄ©a thuá»™c tÃnh mô-Ä‘un-con" -#: builtin/help.c:426 +#: builtin/help.c:424 msgid "Specifying revisions and ranges for Git" msgstr "Chỉ định Ä‘iểm xét duyệt và vùng cho Git" -#: builtin/help.c:427 +#: builtin/help.c:425 msgid "A tutorial introduction to Git (for version 1.5.1 or newer)" -msgstr "HÆ°á»›ng dẫn cách dùng Git ở mức cÆ¡ bản (dà nh cho bản 1.5.1 hay má»›i hÆ¡n)" +msgstr "HÆ°á»›ng dẫn cách dùng Git ở mức cÆ¡ bản (bản 1.5.1 hay má»›i hÆ¡n)" -#: builtin/help.c:428 +#: builtin/help.c:426 msgid "An overview of recommended workflows with Git" msgstr "Tổng quan vá» luồng công việc khuyến nghị nên dùng vá»›i Git." -#: builtin/help.c:440 +#: builtin/help.c:438 msgid "The common Git guides are:\n" msgstr "Các chỉ dẫn chung vá» cách dùng Git là :\n" -#: builtin/help.c:462 builtin/help.c:478 +#: builtin/help.c:460 builtin/help.c:476 #, c-format msgid "usage: %s%s" msgstr "cách sá» dụng: %s%s" -#: builtin/help.c:494 +#: builtin/help.c:492 #, c-format msgid "`git %s' is aliased to `%s'" msgstr "“git %s†được đặt bà danh thà nh “%sâ€" -#: builtin/index-pack.c:182 +#: builtin/index-pack.c:184 #, c-format msgid "object type mismatch at %s" msgstr "kiểu đối tượng không khá»›p tại %s" -#: builtin/index-pack.c:202 +#: builtin/index-pack.c:204 msgid "object of unexpected type" msgstr "đối tượng của kiểu không mong đợi" -#: builtin/index-pack.c:239 +#: builtin/index-pack.c:244 #, c-format msgid "cannot fill %d byte" msgid_plural "cannot fill %d bytes" msgstr[0] "không thể Ä‘iá»n và o %d byte" msgstr[1] "không thể Ä‘iá»n và o %d byte" -#: builtin/index-pack.c:249 +#: builtin/index-pack.c:254 msgid "early EOF" msgstr "vừa đúng lúc EOF" -#: builtin/index-pack.c:250 +#: builtin/index-pack.c:255 msgid "read error on input" msgstr "lá»—i Ä‘á»c ở đầu và o" -#: builtin/index-pack.c:262 +#: builtin/index-pack.c:267 msgid "used more bytes than were available" msgstr "sá» dụng nhiá»u hÆ¡n số lượng byte mà nó sẵn có" -#: builtin/index-pack.c:269 +#: builtin/index-pack.c:274 msgid "pack too large for current definition of off_t" msgstr "pack quá lá»›n so vá»›i định nghÄ©a hiện tại của kiểu off_t" -#: builtin/index-pack.c:285 +#: builtin/index-pack.c:290 #, c-format msgid "unable to create '%s'" msgstr "không thể tạo “%sâ€" -#: builtin/index-pack.c:290 +#: builtin/index-pack.c:295 #, c-format msgid "cannot open packfile '%s'" msgstr "không thể mở packfile “%sâ€" -#: builtin/index-pack.c:304 +#: builtin/index-pack.c:309 msgid "pack signature mismatch" msgstr "chữ ký cho pack không khá»›p" -#: builtin/index-pack.c:306 +#: builtin/index-pack.c:311 #, c-format msgid "pack version %<PRIu32> unsupported" msgstr "không há»— trợ phiên bản pack %<PRIu32>" -#: builtin/index-pack.c:324 +#: builtin/index-pack.c:329 #, c-format msgid "pack has bad object at offset %lu: %s" msgstr "pack có đối tượng sai khoảng bù (offset) %lu: %s" -#: builtin/index-pack.c:446 +#: builtin/index-pack.c:451 #, c-format msgid "inflate returned %d" msgstr "xả nén trả vá» %d" -#: builtin/index-pack.c:495 +#: builtin/index-pack.c:500 msgid "offset value overflow for delta base object" msgstr "trà n giá trị khoảng bù cho đối tượng delta cÆ¡ sở" -#: builtin/index-pack.c:503 +#: builtin/index-pack.c:508 msgid "delta base offset is out of bound" msgstr "khoảng bù cÆ¡ sở cho delta nằm ngoà i phạm vi" -#: builtin/index-pack.c:511 +#: builtin/index-pack.c:516 #, c-format msgid "unknown object type %d" msgstr "không hiểu kiểu đối tượng %d" -#: builtin/index-pack.c:542 +#: builtin/index-pack.c:547 msgid "cannot pread pack file" msgstr "không thể chạy hà m pread cho táºp tin pack" -#: builtin/index-pack.c:544 +#: builtin/index-pack.c:549 #, c-format msgid "premature end of pack file, %lu byte missing" msgid_plural "premature end of pack file, %lu bytes missing" msgstr[0] "táºp tin pack bị kết thúc sá»›m, %lu byte bị thiếu" msgstr[1] "táºp tin pack bị kết thúc sá»›m, %lu byte bị thiếu" -#: builtin/index-pack.c:570 +#: builtin/index-pack.c:575 msgid "serious inflate inconsistency" msgstr "sá»± mâu thuẫn xả nén nghiêm trá»ng" -#: builtin/index-pack.c:661 builtin/index-pack.c:667 builtin/index-pack.c:690 -#: builtin/index-pack.c:724 builtin/index-pack.c:733 +#: builtin/index-pack.c:666 builtin/index-pack.c:672 builtin/index-pack.c:695 +#: builtin/index-pack.c:729 builtin/index-pack.c:738 #, c-format msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "Sá»° VA CHẠM SHA1 Äà XẢY RA VỚI %s!" -#: builtin/index-pack.c:664 builtin/pack-objects.c:170 +#: builtin/index-pack.c:669 builtin/pack-objects.c:170 #: builtin/pack-objects.c:262 #, c-format msgid "unable to read %s" msgstr "không thể Ä‘á»c %s" -#: builtin/index-pack.c:730 +#: builtin/index-pack.c:735 #, c-format msgid "cannot read existing object %s" msgstr "không thể Ä‘á»c đối tượng đã tồn tại %s" -#: builtin/index-pack.c:744 +#: builtin/index-pack.c:749 #, c-format msgid "invalid blob object %s" msgstr "đối tượng blob không hợp lệ %s" -#: builtin/index-pack.c:759 +#: builtin/index-pack.c:763 #, c-format msgid "invalid %s" msgstr "%s không hợp lệ" -#: builtin/index-pack.c:761 +#: builtin/index-pack.c:766 msgid "Error in object" msgstr "Lá»—i trong đối tượng" -#: builtin/index-pack.c:763 +#: builtin/index-pack.c:768 #, c-format msgid "Not all child objects of %s are reachable" msgstr "Không phải tất cả các đối tượng con của %s là có thể vá»›i tá»›i được" -#: builtin/index-pack.c:833 builtin/index-pack.c:863 +#: builtin/index-pack.c:838 builtin/index-pack.c:868 msgid "failed to apply delta" msgstr "gặp lá»—i khi áp dụng delta" -#: builtin/index-pack.c:1004 +#: builtin/index-pack.c:1009 msgid "Receiving objects" msgstr "Äang nháºn vá» các đối tượng" -#: builtin/index-pack.c:1004 +#: builtin/index-pack.c:1009 msgid "Indexing objects" msgstr "Các đối tượng bảng mục lục" -#: builtin/index-pack.c:1030 +#: builtin/index-pack.c:1035 msgid "pack is corrupted (SHA1 mismatch)" msgstr "pack bị sai há»ng (SHA1 không khá»›p)" -#: builtin/index-pack.c:1035 +#: builtin/index-pack.c:1040 msgid "cannot fstat packfile" msgstr "không thể fstat packfile" -#: builtin/index-pack.c:1038 +#: builtin/index-pack.c:1043 msgid "pack has junk at the end" msgstr "pack có phần thừa ở cuối" -#: builtin/index-pack.c:1049 +#: builtin/index-pack.c:1054 msgid "confusion beyond insanity in parse_pack_objects()" msgstr "lá»™n xá»™n hÆ¡n cả Ä‘iên rồ khi chạy hà m parse_pack_objects()" -#: builtin/index-pack.c:1072 +#: builtin/index-pack.c:1077 msgid "Resolving deltas" msgstr "Äang phân giải các delta" -#: builtin/index-pack.c:1082 +#: builtin/index-pack.c:1087 #, c-format msgid "unable to create thread: %s" msgstr "không thể tạo tuyến: %s" -#: builtin/index-pack.c:1124 +#: builtin/index-pack.c:1129 msgid "confusion beyond insanity" msgstr "lá»™n xá»™n hÆ¡n cả Ä‘iên rồ" -#: builtin/index-pack.c:1132 +#: builtin/index-pack.c:1137 #, c-format msgid "completed with %d local objects" msgstr "đầy đủ vá»›i %d đối tượng ná»™i bá»™" -#: builtin/index-pack.c:1142 +#: builtin/index-pack.c:1147 #, c-format msgid "Unexpected tail checksum for %s (disk corruption?)" msgstr "Tổng kiểm tra tail không nhÆ° mong đợi cho %s (Ä‘Ä©a há»ng?)" -#: builtin/index-pack.c:1146 +#: builtin/index-pack.c:1151 #, c-format msgid "pack has %d unresolved delta" msgid_plural "pack has %d unresolved deltas" msgstr[0] "pack có %d delta chÆ°a được giải quyết" msgstr[1] "pack có %d delta chÆ°a được giải quyết" -#: builtin/index-pack.c:1171 +#: builtin/index-pack.c:1176 #, c-format msgid "unable to deflate appended object (%d)" msgstr "không thể xả đối tượng nối thêm (%d)" -#: builtin/index-pack.c:1250 +#: builtin/index-pack.c:1255 #, c-format msgid "local object %s is corrupt" msgstr "đối tượng ná»™i bá»™ %s bị há»ng" -#: builtin/index-pack.c:1274 +#: builtin/index-pack.c:1279 msgid "error while closing pack file" msgstr "gặp lá»—i trong khi đóng táºp tin pack" -#: builtin/index-pack.c:1287 +#: builtin/index-pack.c:1292 #, c-format msgid "cannot write keep file '%s'" msgstr "không thể ghi táºp tin giữ lại “%sâ€" -#: builtin/index-pack.c:1295 +#: builtin/index-pack.c:1300 #, c-format msgid "cannot close written keep file '%s'" msgstr "không thể đóng táºp tin giữ lại đã được ghi “%sâ€" -#: builtin/index-pack.c:1308 +#: builtin/index-pack.c:1313 msgid "cannot store pack file" msgstr "không thể lÆ°u táºp tin pack" -#: builtin/index-pack.c:1319 +#: builtin/index-pack.c:1324 msgid "cannot store index file" msgstr "không thể lÆ°u trữ táºp tin ghi mục lục" -#: builtin/index-pack.c:1352 +#: builtin/index-pack.c:1357 #, c-format msgid "bad pack.indexversion=%<PRIu32>" msgstr "sai pack.indexversion=%<PRIu32>" -#: builtin/index-pack.c:1358 +#: builtin/index-pack.c:1363 #, c-format msgid "invalid number of threads specified (%d)" msgstr "số tuyến chỉ ra không hợp lệ (%d)" -#: builtin/index-pack.c:1362 builtin/index-pack.c:1535 +#: builtin/index-pack.c:1367 builtin/index-pack.c:1545 #, c-format msgid "no threads support, ignoring %s" msgstr "không há»— trợ Ä‘a tuyến, bá» qua %s" -#: builtin/index-pack.c:1420 +#: builtin/index-pack.c:1425 #, c-format msgid "Cannot open existing pack file '%s'" msgstr "Không thể mở táºp tin pack đã sẵn có “%sâ€" -#: builtin/index-pack.c:1422 +#: builtin/index-pack.c:1427 #, c-format msgid "Cannot open existing pack idx file for '%s'" msgstr "Không thể mở táºp tin “pack idx†cho “%sâ€" -#: builtin/index-pack.c:1469 +#: builtin/index-pack.c:1474 #, c-format msgid "non delta: %d object" msgid_plural "non delta: %d objects" msgstr[0] "không delta: %d đối tượng" msgstr[1] "không delta: %d đối tượng" -#: builtin/index-pack.c:1476 +#: builtin/index-pack.c:1481 #, c-format msgid "chain length = %d: %lu object" msgid_plural "chain length = %d: %lu objects" msgstr[0] "chiá»u dà i xÃch = %d: %lu đối tượng" msgstr[1] "chiá»u dà i xÃch = %d: %lu đối tượng" -#: builtin/index-pack.c:1503 +#: builtin/index-pack.c:1509 msgid "Cannot come back to cwd" msgstr "Không thể quay lại cwd" -#: builtin/index-pack.c:1547 builtin/index-pack.c:1550 -#: builtin/index-pack.c:1562 builtin/index-pack.c:1566 +#: builtin/index-pack.c:1557 builtin/index-pack.c:1560 +#: builtin/index-pack.c:1572 builtin/index-pack.c:1576 #, c-format msgid "bad %s" msgstr "%s sai" -#: builtin/index-pack.c:1580 +#: builtin/index-pack.c:1590 msgid "--fix-thin cannot be used without --stdin" msgstr "--fix-thin không thể được dùng mà không có --stdin" -#: builtin/index-pack.c:1584 builtin/index-pack.c:1594 +#: builtin/index-pack.c:1594 builtin/index-pack.c:1604 #, c-format msgid "packfile name '%s' does not end with '.pack'" msgstr "tên táºp tin packfile “%s†không được kết thúc bằng Ä‘uôi “.packâ€" -#: builtin/index-pack.c:1603 +#: builtin/index-pack.c:1613 msgid "--verify with no packfile name given" msgstr "dùng tùy chá»n --verify mà không Ä‘Æ°a ra tên packfile" @@ -5832,7 +6074,7 @@ msgstr "các quyá»n" msgid "specify that the git repository is to be shared amongst several users" msgstr "chỉ ra cái mà kho git được chia sẻ giữa nhiá»u ngÆ°á»i dùng" -#: builtin/init-db.c:493 builtin/prune-packed.c:77 +#: builtin/init-db.c:493 builtin/prune-packed.c:75 msgid "be quiet" msgstr "im lặng" @@ -5864,241 +6106,255 @@ msgstr "Không thể truy cáºp thÆ° mục là m việc hiện hà nh" msgid "Cannot access work tree '%s'" msgstr "không thể truy cáºp cây (tree) là m việc “%sâ€" -#: builtin/log.c:40 +#: builtin/log.c:41 msgid "git log [<options>] [<revision range>] [[--] <path>...]\n" msgstr "git log [<các-tùy-chá»n>] [<vùng xem xét>] [[--] <Ä‘Æ°á»ng-dẫn>...]\n" -#: builtin/log.c:41 +#: builtin/log.c:42 msgid " or: git show [options] <object>..." msgstr " hay: git show [các-tùy-chá»n] <đối-tượng>..." -#: builtin/log.c:103 +#: builtin/log.c:124 msgid "suppress diff output" msgstr "chặn má»i kết xuất từ diff" -#: builtin/log.c:104 +#: builtin/log.c:125 msgid "show source" msgstr "hiển thị mã nguồn" -#: builtin/log.c:105 +#: builtin/log.c:126 msgid "Use mail map file" msgstr "Sá» dụng táºp tin ánh xạ thÆ°" -#: builtin/log.c:106 +#: builtin/log.c:127 msgid "decorate options" msgstr "các tùy chá»n trang trÃ" -#: builtin/log.c:199 +#: builtin/log.c:230 #, c-format msgid "Final output: %d %s\n" msgstr "Kết xuất cuối cùng: %d %s\n" -#: builtin/log.c:422 builtin/log.c:514 +#: builtin/log.c:453 builtin/log.c:545 #, c-format msgid "Could not read object %s" msgstr "Không thể Ä‘á»c đối tượng %s" -#: builtin/log.c:538 +#: builtin/log.c:569 #, c-format msgid "Unknown type: %d" msgstr "Không nháºn ra kiểu: %d" -#: builtin/log.c:638 +#: builtin/log.c:669 msgid "format.headers without value" msgstr "format.headers không có giá trị cụ thể" -#: builtin/log.c:720 +#: builtin/log.c:751 msgid "name of output directory is too long" msgstr "tên của thÆ° mục kết xuất quá dà i" -#: builtin/log.c:736 +#: builtin/log.c:767 #, c-format msgid "Cannot open patch file %s" msgstr "Không thể mở táºp tin miếng vá: %s" -#: builtin/log.c:750 +#: builtin/log.c:781 msgid "Need exactly one range." msgstr "Cần chÃnh xác má»™t vùng." -#: builtin/log.c:758 +#: builtin/log.c:789 msgid "Not a range." msgstr "Không phải là má»™t vùng." -#: builtin/log.c:860 +#: builtin/log.c:891 msgid "Cover letter needs email format" msgstr "â€Cover letter†cần cho định dạng thÆ°" -#: builtin/log.c:936 +#: builtin/log.c:967 #, c-format msgid "insane in-reply-to: %s" msgstr "in-reply-to Ä‘iên rồ: %s" -#: builtin/log.c:964 +#: builtin/log.c:995 msgid "git format-patch [options] [<since> | <revision range>]" msgstr "git format-patch [các-tùy-chá»n] [<kể-từ> | <vùng-xem-xét>]" -#: builtin/log.c:1009 +#: builtin/log.c:1040 msgid "Two output directories?" msgstr "Hai thÆ° mục kết xuất?" -#: builtin/log.c:1108 +#: builtin/log.c:1155 msgid "use [PATCH n/m] even with a single patch" msgstr "dùng [PATCH n/m] ngay cả vá»›i miếng vá Ä‘Æ¡n" -#: builtin/log.c:1111 +#: builtin/log.c:1158 msgid "use [PATCH] even with multiple patches" msgstr "dùng [VÃ] ngay cả vá»›i các miếng vá phức tạp" -#: builtin/log.c:1115 +#: builtin/log.c:1162 msgid "print patches to standard out" msgstr "hiển thị miếng vá ra đầu ra chuẩn" -#: builtin/log.c:1117 +#: builtin/log.c:1164 msgid "generate a cover letter" msgstr "tạo bì thÆ°" -#: builtin/log.c:1119 +#: builtin/log.c:1166 msgid "use simple number sequence for output file names" msgstr "sá» dụng chá»—i dãy số dạng Ä‘Æ¡n giản cho tên táºp-tin xuất ra" -#: builtin/log.c:1120 +#: builtin/log.c:1167 msgid "sfx" msgstr "sfx" -#: builtin/log.c:1121 +#: builtin/log.c:1168 msgid "use <sfx> instead of '.patch'" msgstr "sá» dụng <sfx> thay cho “.patchâ€" -#: builtin/log.c:1123 +#: builtin/log.c:1170 msgid "start numbering patches at <n> instead of 1" msgstr "bắt đầu đánh số miếng vá từ <n> thay vì 1" -#: builtin/log.c:1125 +#: builtin/log.c:1172 msgid "mark the series as Nth re-roll" msgstr "đánh dấu chuá»—i nối tiếp dạng thứ-N re-roll" -#: builtin/log.c:1127 +#: builtin/log.c:1174 msgid "Use [<prefix>] instead of [PATCH]" msgstr "Dùng [<tiá»n-tố>] thay cho [VÃ]" -#: builtin/log.c:1130 +#: builtin/log.c:1177 msgid "store resulting files in <dir>" msgstr "lÆ°u các táºp tin kết quả trong <t.mục>" -#: builtin/log.c:1133 +#: builtin/log.c:1180 msgid "don't strip/add [PATCH]" msgstr "không strip/add [VÃ]" -#: builtin/log.c:1136 +#: builtin/log.c:1183 msgid "don't output binary diffs" msgstr "không kết xuất diff (những khác biệt) nhị phân" -#: builtin/log.c:1138 +#: builtin/log.c:1185 msgid "don't include a patch matching a commit upstream" msgstr "không bao gồm miếng vá khá»›p vá»›i má»™t lần chuyển giao thượng nguồn" -#: builtin/log.c:1140 +#: builtin/log.c:1187 msgid "show patch format instead of default (patch + stat)" msgstr "hiển thị định dạng miếng vá thay vì mặc định (miếng vá + thống kê)" -#: builtin/log.c:1142 +#: builtin/log.c:1189 msgid "Messaging" msgstr "Lá»i nhắn" -#: builtin/log.c:1143 +#: builtin/log.c:1190 msgid "header" msgstr "đầu Ä‘á» thÆ°" -#: builtin/log.c:1144 +#: builtin/log.c:1191 msgid "add email header" msgstr "thêm đầu Ä‘á» thÆ°" -#: builtin/log.c:1145 builtin/log.c:1147 +#: builtin/log.c:1192 builtin/log.c:1194 msgid "email" msgstr "thÆ° Ä‘iện tá»" -#: builtin/log.c:1145 +#: builtin/log.c:1192 msgid "add To: header" msgstr "thêm To: đầu Ä‘á» thÆ°" -#: builtin/log.c:1147 +#: builtin/log.c:1194 msgid "add Cc: header" msgstr "thêm Cc: đầu Ä‘á» thÆ°" -#: builtin/log.c:1149 +#: builtin/log.c:1196 +msgid "ident" +msgstr "thụt lá»" + +#: builtin/log.c:1197 +msgid "set From address to <ident> (or committer ident if absent)" +msgstr "" +"đặt `Äịa chỉ gá»i' thà nh <thụ lá»> (hoặc thụt lá» ngÆ°á»i commit nếu bá» quên)" + +#: builtin/log.c:1199 msgid "message-id" msgstr "message-id" -#: builtin/log.c:1150 +#: builtin/log.c:1200 msgid "make first mail a reply to <message-id>" msgstr "dùng thÆ° đầu tiên để trả lá»i <message-id>" -#: builtin/log.c:1151 builtin/log.c:1154 +#: builtin/log.c:1201 builtin/log.c:1204 msgid "boundary" msgstr "ranh giá»›i" -#: builtin/log.c:1152 +#: builtin/log.c:1202 msgid "attach the patch" msgstr "Ä‘Ãnh kèm miếng vá" -#: builtin/log.c:1155 +#: builtin/log.c:1205 msgid "inline the patch" msgstr "dùng miếng vá là m ná»™i dung" -#: builtin/log.c:1159 +#: builtin/log.c:1209 msgid "enable message threading, styles: shallow, deep" msgstr "cho phép luồng lá»i nhắn, kiểu: “shallowâ€, “deepâ€" -#: builtin/log.c:1161 +#: builtin/log.c:1211 msgid "signature" msgstr "chữ ký" -#: builtin/log.c:1162 +#: builtin/log.c:1212 msgid "add a signature" msgstr "thêm chữ ký" -#: builtin/log.c:1164 +#: builtin/log.c:1214 msgid "don't print the patch filenames" msgstr "không hiển thị các tên táºp tin của miếng vá" -#: builtin/log.c:1248 +#: builtin/log.c:1288 +#, c-format +msgid "invalid ident line: %s" +msgstr "dòng thụt lá» không hợp lệ: %s" + +#: builtin/log.c:1303 msgid "-n and -k are mutually exclusive." msgstr "-n và -k loại từ lẫn nhau." -#: builtin/log.c:1250 +#: builtin/log.c:1305 msgid "--subject-prefix and -k are mutually exclusive." msgstr "--subject-prefix và -k xung khắc nhau." -#: builtin/log.c:1258 +#: builtin/log.c:1313 msgid "--name-only does not make sense" msgstr "--name-only không hợp lý" -#: builtin/log.c:1260 +#: builtin/log.c:1315 msgid "--name-status does not make sense" msgstr "--name-status không hợp lý" -#: builtin/log.c:1262 +#: builtin/log.c:1317 msgid "--check does not make sense" msgstr "--check không hợp lý" -#: builtin/log.c:1285 +#: builtin/log.c:1340 msgid "standard output, or directory, which one?" msgstr "đầu ra chuẩn, hay thÆ° mục, chá»n cái nà o?" -#: builtin/log.c:1287 +#: builtin/log.c:1342 #, c-format msgid "Could not create directory '%s'" msgstr "Không thể tạo thÆ° mục “%sâ€" -#: builtin/log.c:1435 +#: builtin/log.c:1490 msgid "Failed to create output files" msgstr "Gặp lá»—i khi tạo các táºp tin kết xuất" -#: builtin/log.c:1484 +#: builtin/log.c:1539 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]" msgstr "git cherry [-v] [<thượng-nguồn> [<head> [<giá»›i-hạn>]]]" -#: builtin/log.c:1539 +#: builtin/log.c:1594 #, c-format msgid "" "Could not find a tracked remote branch, please specify <upstream> manually.\n" @@ -6106,103 +6362,103 @@ msgstr "" "Không tìm thấy nhánh mạng bị theo vết, hãy chỉ định <thượng-nguồn> má»™t cách " "thủ công.\n" -#: builtin/log.c:1552 builtin/log.c:1554 builtin/log.c:1566 +#: builtin/log.c:1607 builtin/log.c:1609 builtin/log.c:1621 #, c-format msgid "Unknown commit %s" msgstr "Không hiểu lần chuyển giao (commit) %s" -#: builtin/ls-files.c:402 +#: builtin/ls-files.c:408 msgid "git ls-files [options] [<file>...]" msgstr "git ls-files [các-tùy-chá»n] [<táºp-tin>...]" -#: builtin/ls-files.c:459 +#: builtin/ls-files.c:465 msgid "identify the file status with tags" msgstr "nháºn dạng các trạng thái táºp tin vá»›i thẻ" -#: builtin/ls-files.c:461 +#: builtin/ls-files.c:467 msgid "use lowercase letters for 'assume unchanged' files" msgstr "" "dùng chữ cái viết thÆ°á»ng cho các táºp tin “assume unchanged†(giả định không " "thay đổi)" -#: builtin/ls-files.c:463 +#: builtin/ls-files.c:469 msgid "show cached files in the output (default)" msgstr "hiển thị các táºp tin được nhá»› tạm và o đầu ra (mặc định)" -#: builtin/ls-files.c:465 +#: builtin/ls-files.c:471 msgid "show deleted files in the output" msgstr "hiển thị các táºp tin đã xóa trong kết xuất" -#: builtin/ls-files.c:467 +#: builtin/ls-files.c:473 msgid "show modified files in the output" msgstr "hiển thị các táºp tin đã bị sá»a đổi ra kết xuất" -#: builtin/ls-files.c:469 +#: builtin/ls-files.c:475 msgid "show other files in the output" msgstr "hiển thị các táºp tin khác trong kết xuất" -#: builtin/ls-files.c:471 +#: builtin/ls-files.c:477 msgid "show ignored files in the output" msgstr "hiển thị các táºp tin bị bá» qua trong kết xuất" -#: builtin/ls-files.c:474 +#: builtin/ls-files.c:480 msgid "show staged contents' object name in the output" msgstr "hiển thị tên đối tượng của ná»™i dung được lÆ°u trạng thái ở kết xuất" -#: builtin/ls-files.c:476 +#: builtin/ls-files.c:482 msgid "show files on the filesystem that need to be removed" msgstr "hiển thị các táºp tin trên hệ thống táºp tin mà nó cần được gỡ bá»" -#: builtin/ls-files.c:478 +#: builtin/ls-files.c:484 msgid "show 'other' directories' name only" msgstr "chỉ hiển thị tên của các thÆ° mục “khácâ€" -#: builtin/ls-files.c:481 +#: builtin/ls-files.c:487 msgid "don't show empty directories" msgstr "không hiển thị thÆ° mục rá»—ng" -#: builtin/ls-files.c:484 +#: builtin/ls-files.c:490 msgid "show unmerged files in the output" msgstr "hiển thị các táºp tin chÆ°a hòa trá»™n trong kết xuất" -#: builtin/ls-files.c:486 +#: builtin/ls-files.c:492 msgid "show resolve-undo information" msgstr "hiển thị thông tin resolve-undo" -#: builtin/ls-files.c:488 +#: builtin/ls-files.c:494 msgid "skip files matching pattern" msgstr "bá» qua những táºp tin khá»›p vá»›i má»™t mẫu" -#: builtin/ls-files.c:491 +#: builtin/ls-files.c:497 msgid "exclude patterns are read from <file>" msgstr "mẫu loại trừ được Ä‘á»c từ <táºp tin>" -#: builtin/ls-files.c:494 +#: builtin/ls-files.c:500 msgid "read additional per-directory exclude patterns in <file>" msgstr "Ä‘á»c thêm các mẫu ngoại trừ má»—i thÆ° mục trong <táºp tin>" -#: builtin/ls-files.c:496 +#: builtin/ls-files.c:502 msgid "add the standard git exclusions" msgstr "thêm loại trừ tiêu chuẩn kiểu git" -#: builtin/ls-files.c:499 +#: builtin/ls-files.c:505 msgid "make the output relative to the project top directory" msgstr "là m cho kết xuất liên quan đến thÆ° mục ở mức cao nhất (gốc) của dá»± án" -#: builtin/ls-files.c:502 +#: builtin/ls-files.c:508 msgid "if any <file> is not in the index, treat this as an error" msgstr "nếu <táºp tin> bất kỳ không ở trong bảng mục lục, xá» lý nó nhÆ° má»™t lá»—i" -#: builtin/ls-files.c:503 +#: builtin/ls-files.c:509 msgid "tree-ish" msgstr "tree-ish" -#: builtin/ls-files.c:504 +#: builtin/ls-files.c:510 msgid "pretend that paths removed since <tree-ish> are still present" msgstr "" "giả định rằng các Ä‘Æ°á»ng dẫn đã bị gỡ bá» kể từ <tree-ish> nay vẫn hiện diện" -#: builtin/ls-files.c:506 +#: builtin/ls-files.c:512 msgid "show debugging data" msgstr "hiển thị dữ liệu gỡ lá»—i" @@ -6254,170 +6510,170 @@ msgstr "git merge [các-tùy-chá»n] <tin-nhắn> HEAD <commit>" msgid "git merge --abort" msgstr "git merge --abort" -#: builtin/merge.c:90 +#: builtin/merge.c:98 msgid "switch `m' requires a value" msgstr "switch “m†yêu cầu má»™t giá trị" -#: builtin/merge.c:127 +#: builtin/merge.c:135 #, c-format msgid "Could not find merge strategy '%s'.\n" msgstr "Không tìm thấy chiến lược hòa trá»™n “%sâ€.\n" -#: builtin/merge.c:128 +#: builtin/merge.c:136 #, c-format msgid "Available strategies are:" msgstr "Các chiến lược sẵn sà ng là :" -#: builtin/merge.c:133 +#: builtin/merge.c:141 #, c-format msgid "Available custom strategies are:" msgstr "Các chiến lược tùy chỉnh sẵn sà ng là :" -#: builtin/merge.c:183 +#: builtin/merge.c:198 msgid "do not show a diffstat at the end of the merge" msgstr "không hiển thị thống kê khác biệt tại cuối của lần hòa trá»™n" -#: builtin/merge.c:186 +#: builtin/merge.c:201 msgid "show a diffstat at the end of the merge" msgstr "hiển thị thống kê khác biệt tại cuối của hòa trá»™n" -#: builtin/merge.c:187 +#: builtin/merge.c:202 msgid "(synonym to --stat)" msgstr "(đồng nghÄ©a vá»›i --stat)" -#: builtin/merge.c:189 +#: builtin/merge.c:204 msgid "add (at most <n>) entries from shortlog to merge commit message" msgstr "thêm (Ãt nhất <n>) mục từ shortlog cho ghi chú chuyển giao hòa trá»™n" -#: builtin/merge.c:192 +#: builtin/merge.c:207 msgid "create a single commit instead of doing a merge" msgstr "tạo má»™t lần chuyển giao (commit) Ä‘Æ°on thay vì thá»±c hiện việc hòa trá»™n" -#: builtin/merge.c:194 +#: builtin/merge.c:209 msgid "perform a commit if the merge succeeds (default)" msgstr "thá»±c hiện chuyển giao nếu hòa trá»™n thà nh công (mặc định)" -#: builtin/merge.c:196 +#: builtin/merge.c:211 msgid "edit message before committing" msgstr "sá»a chú thÃch trÆ°á»›c khi chuyển giao (commit)" -#: builtin/merge.c:198 +#: builtin/merge.c:212 msgid "allow fast-forward (default)" msgstr "cho phép fast-forward (mặc định)" -#: builtin/merge.c:200 +#: builtin/merge.c:214 msgid "abort if fast-forward is not possible" msgstr "bá» qua nếu fast-forward không thể được" -#: builtin/merge.c:203 +#: builtin/merge.c:218 msgid "Verify that the named commit has a valid GPG signature" msgstr "Thẩm tra xem lần chuyển giao có tên đó có chữ ký GPG hợp lệ hay không" -#: builtin/merge.c:204 builtin/notes.c:866 builtin/revert.c:112 +#: builtin/merge.c:219 builtin/notes.c:738 builtin/revert.c:114 msgid "strategy" msgstr "chiến lược" -#: builtin/merge.c:205 +#: builtin/merge.c:220 msgid "merge strategy to use" msgstr "chiến lược hòa trá»™n sẽ dùng" -#: builtin/merge.c:206 +#: builtin/merge.c:221 msgid "option=value" msgstr "tùy_chá»n=giá_trị" -#: builtin/merge.c:207 +#: builtin/merge.c:222 msgid "option for selected merge strategy" msgstr "tùy chá»n cho chiến lược hòa trá»™n đã chá»n" -#: builtin/merge.c:209 +#: builtin/merge.c:224 msgid "merge commit message (for a non-fast-forward merge)" msgstr "" "hòa trá»™n ghi chú của lần chuyển giao (dà nh cho hòa trá»™n non-fast-forward)" -#: builtin/merge.c:213 +#: builtin/merge.c:228 msgid "abort the current in-progress merge" msgstr "bãi bá» quá trình hòa trá»™n hiện tại Ä‘ang thá»±c hiện" -#: builtin/merge.c:242 +#: builtin/merge.c:257 msgid "could not run stash." msgstr "không thể chạy stash." -#: builtin/merge.c:247 +#: builtin/merge.c:262 msgid "stash failed" msgstr "stash gặp lá»—i" -#: builtin/merge.c:252 +#: builtin/merge.c:267 #, c-format msgid "not a valid object: %s" msgstr "không phải là má»™t đối tượng hợp lệ: %s" -#: builtin/merge.c:271 builtin/merge.c:288 +#: builtin/merge.c:286 builtin/merge.c:303 msgid "read-tree failed" msgstr "read-tree gặp lá»—i" -#: builtin/merge.c:318 +#: builtin/merge.c:333 msgid " (nothing to squash)" msgstr " (không có gì để squash)" -#: builtin/merge.c:331 +#: builtin/merge.c:346 #, c-format msgid "Squash commit -- not updating HEAD\n" msgstr "Squash commit -- không cáºp nháºt HEAD\n" -#: builtin/merge.c:363 +#: builtin/merge.c:378 msgid "Writing SQUASH_MSG" msgstr "Äang ghi SQUASH_MSG" -#: builtin/merge.c:365 +#: builtin/merge.c:380 msgid "Finishing SQUASH_MSG" msgstr "Hoà n thà nh SQUASH_MSG" -#: builtin/merge.c:388 +#: builtin/merge.c:403 #, c-format msgid "No merge message -- not updating HEAD\n" msgstr "Không thông Ä‘iệp hòa trá»™n -- không cáºp nháºt HEAD\n" -#: builtin/merge.c:438 +#: builtin/merge.c:453 #, c-format msgid "'%s' does not point to a commit" msgstr "“%s†không chỉ đến má»™t lần chuyển giao (commit) nà o cả" -#: builtin/merge.c:550 +#: builtin/merge.c:565 #, c-format msgid "Bad branch.%s.mergeoptions string: %s" msgstr "Chuá»—i branch.%s.mergeoptions sai: %s" -#: builtin/merge.c:643 +#: builtin/merge.c:657 msgid "git write-tree failed to write a tree" msgstr "lệnh git write-tree gặp lá»—i khi ghi má»™t cây" -#: builtin/merge.c:671 +#: builtin/merge.c:685 msgid "Not handling anything other than two heads merge." msgstr "Không cầm nắm gì ngoà i hai head hòa trá»™n" -#: builtin/merge.c:685 +#: builtin/merge.c:699 #, c-format msgid "Unknown option for merge-recursive: -X%s" msgstr "Không hiểu tùy chá»n cho merge-recursive: -X%s" -#: builtin/merge.c:699 +#: builtin/merge.c:713 #, c-format msgid "unable to write %s" msgstr "không thể ghi %s" -#: builtin/merge.c:788 +#: builtin/merge.c:802 #, c-format msgid "Could not read from '%s'" msgstr "Không thể Ä‘á»c từ “%sâ€" -#: builtin/merge.c:797 +#: builtin/merge.c:811 #, c-format msgid "Not committing merge; use 'git commit' to complete the merge.\n" msgstr "" "Vẫn chÆ°a hòa trá»™n các lần chuyển giao (commit); sá» dụng lệnh “git commit†để " "hoà n tất việc hòa trá»™n.\n" -#: builtin/merge.c:803 +#: builtin/merge.c:817 #, c-format msgid "" "Please enter a commit message to explain why this merge is necessary,\n" @@ -6435,55 +6691,50 @@ msgstr "" "rá»—ng\n" "sẽ hủy bá» lần chuyển giao (commit).\n" -#: builtin/merge.c:827 +#: builtin/merge.c:841 msgid "Empty commit message." msgstr "Chú thÃch của lần commit (chuyển giao) bị trống rá»—ng." -#: builtin/merge.c:839 +#: builtin/merge.c:853 #, c-format msgid "Wonderful.\n" msgstr "Thần kỳ.\n" -#: builtin/merge.c:904 +#: builtin/merge.c:918 #, c-format msgid "Automatic merge failed; fix conflicts and then commit the result.\n" msgstr "" "Việc tá»± Ä‘á»™ng hòa trá»™n gặp lá»—i; hãy sá»a các xung Ä‘á»™t sau đó chuyển giao " "(commit) kết quả.\n" -#: builtin/merge.c:920 +#: builtin/merge.c:934 #, c-format msgid "'%s' is not a commit" msgstr "%s không phải là má»™t lần commit (chuyển giao)" -#: builtin/merge.c:961 +#: builtin/merge.c:975 msgid "No current branch." msgstr "không phải nhánh hiện hà nh" -#: builtin/merge.c:963 +#: builtin/merge.c:977 msgid "No remote for the current branch." msgstr "Không có máy chủ cho nhánh hiện hà nh." -#: builtin/merge.c:965 +#: builtin/merge.c:979 msgid "No default upstream defined for the current branch." msgstr "Không có thượng nguồn mặc định được định nghÄ©a cho nhánh hiện hà nh." -#: builtin/merge.c:970 +#: builtin/merge.c:984 #, c-format -msgid "No remote tracking branch for %s from %s" +msgid "No remote-tracking branch for %s from %s" msgstr "Không nhánh mạng theo vết cho %s từ %s" -#: builtin/merge.c:1057 builtin/merge.c:1214 -#, c-format -msgid "%s - not something we can merge" -msgstr "%s - không phải là má»™t số thứ chúng tôi có thể hòa trá»™n" - -#: builtin/merge.c:1125 +#: builtin/merge.c:1140 msgid "There is no merge to abort (MERGE_HEAD missing)." msgstr "" "Ở đây không có lần hòa trá»™n nà o được hủy bá» giữa chừng cả (thiếu MERGE_HEAD)." -#: builtin/merge.c:1141 git-pull.sh:31 +#: builtin/merge.c:1156 git-pull.sh:31 msgid "" "You have not concluded your merge (MERGE_HEAD exists).\n" "Please, commit your changes before you can merge." @@ -6491,11 +6742,11 @@ msgstr "" "Bạn chÆ°a kết thúc việc hòa trá»™ng (MERGE_HEAD vẫn tồn tại).\n" "Hãy chuyển giao (commit) các thay đổi trÆ°á»›c khi bạn có thể hòa trá»™n." -#: builtin/merge.c:1144 git-pull.sh:34 +#: builtin/merge.c:1159 git-pull.sh:34 msgid "You have not concluded your merge (MERGE_HEAD exists)." msgstr "Bạn chÆ°a kết thúc việc hòa trá»™ng (MERGE_HEAD vẫn tồn tại)." -#: builtin/merge.c:1148 +#: builtin/merge.c:1163 msgid "" "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" "Please, commit your changes before you can merge." @@ -6503,107 +6754,108 @@ msgstr "" "Bạn chÆ°a kết thúc việc cherry-pick (CHERRY_PICK_HEAD vẫn tồn tại).\n" "Hãy chuyển giao (commit) các thay đổi trÆ°á»›c khi bạn có thể hòa trá»™n." -#: builtin/merge.c:1151 +#: builtin/merge.c:1166 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." msgstr "Bạn chÆ°a kết thúc việc cherry-pick (CHERRY_PICK_HEAD vẫn tồn tại)." -#: builtin/merge.c:1160 +#: builtin/merge.c:1175 msgid "You cannot combine --squash with --no-ff." msgstr "Bạn không thể kết hợp --squash vá»›i --no-ff." -#: builtin/merge.c:1165 -msgid "You cannot combine --no-ff with --ff-only." -msgstr "Bạn không thể kết hợp --no-ff vá»›i --ff-only." - -#: builtin/merge.c:1172 +#: builtin/merge.c:1184 msgid "No commit specified and merge.defaultToUpstream not set." msgstr "" "Không chỉ ra lần chuyển giao (commit) và merge.defaultToUpstream chÆ°a được " "đặt." -#: builtin/merge.c:1204 +#: builtin/merge.c:1216 msgid "Can merge only exactly one commit into empty head" msgstr "" "Không thể hòa trá»™n má»™t cách đúng đắn má»™t lần chuyển giao (commit) và o má»™t " "head rá»—ng" -#: builtin/merge.c:1207 +#: builtin/merge.c:1219 msgid "Squash commit into empty head not supported yet" msgstr "Squash commit và o má»™t head trống rá»—ng vẫn chÆ°a được há»— trợ" -#: builtin/merge.c:1209 +#: builtin/merge.c:1221 msgid "Non-fast-forward commit does not make sense into an empty head" msgstr "" "Chuyển giao (commit) không-fast-forward không hợp lý ở trong má»™t head trống " "rá»—ng" -#: builtin/merge.c:1265 +#: builtin/merge.c:1226 +#, c-format +msgid "%s - not something we can merge" +msgstr "%s - không phải là má»™t số thứ chúng tôi có thể hòa trá»™n" + +#: builtin/merge.c:1277 #, c-format msgid "Commit %s has an untrusted GPG signature, allegedly by %s." msgstr "" "Lần chuyển giao %s có má»™t chữ ký GPG không đáng tin, được cho là bởi %s." -#: builtin/merge.c:1268 +#: builtin/merge.c:1280 #, c-format msgid "Commit %s has a bad GPG signature allegedly by %s." msgstr "Lần chuyển giao %s có má»™t chữ ký GPG sai, được cho là bởi %s." #. 'N' -#: builtin/merge.c:1271 +#: builtin/merge.c:1283 #, c-format msgid "Commit %s does not have a GPG signature." msgstr "Lần chuyển giao (commit) %s không có chữ ký GPG." -#: builtin/merge.c:1274 +#: builtin/merge.c:1286 #, c-format msgid "Commit %s has a good GPG signature by %s\n" msgstr "Lần chuyển giao %s có má»™t chữ ký GPG tốt bởi %s\n" -#: builtin/merge.c:1358 +#: builtin/merge.c:1370 #, c-format msgid "Updating %s..%s\n" msgstr "Äang cáºp nháºt %s..%s\n" -#: builtin/merge.c:1397 +#: builtin/merge.c:1409 #, c-format msgid "Trying really trivial in-index merge...\n" msgstr "Äang thá» hòa trá»™n kiểu “trivial in-indexâ€...\n" -#: builtin/merge.c:1404 +#: builtin/merge.c:1416 #, c-format msgid "Nope.\n" msgstr "Không.\n" -#: builtin/merge.c:1436 +#: builtin/merge.c:1448 msgid "Not possible to fast-forward, aborting." msgstr "Thá»±c hiện lệnh fast-forward là không thể được, Ä‘ang bá» qua." -#: builtin/merge.c:1459 builtin/merge.c:1538 +#: builtin/merge.c:1471 builtin/merge.c:1550 #, c-format msgid "Rewinding the tree to pristine...\n" msgstr "Äang tua lại cây thà nh thá»i xa xÆ°a...\n" -#: builtin/merge.c:1463 +#: builtin/merge.c:1475 #, c-format msgid "Trying merge strategy %s...\n" msgstr "Äang thá» chiến lược hòa trá»™n %s...\n" -#: builtin/merge.c:1529 +#: builtin/merge.c:1541 #, c-format msgid "No merge strategy handled the merge.\n" msgstr "Không có chiến lược hòa trá»™n nà o được nắm giữ (handle) sá»± hòa trá»™n.\n" -#: builtin/merge.c:1531 +#: builtin/merge.c:1543 #, c-format msgid "Merge with strategy %s failed.\n" msgstr "Hòa trá»™n vá»›i chiến lược %s gặp lá»—i.\n" -#: builtin/merge.c:1540 +#: builtin/merge.c:1552 #, c-format msgid "Using the %s to prepare resolving by hand.\n" msgstr "Sá» dụng %s để chuẩn bị giải quyết bằng tay.\n" -#: builtin/merge.c:1552 +#: builtin/merge.c:1564 #, c-format msgid "Automatic merge went well; stopped before committing as requested\n" msgstr "" @@ -6772,48 +7024,52 @@ msgstr "Äổi tên %s thà nh %s\n" msgid "renaming '%s' failed" msgstr "đổi tên %s gặp lá»—i" -#: builtin/name-rev.c:175 +#: builtin/name-rev.c:259 msgid "git name-rev [options] <commit>..." msgstr "git name-rev [các-tùy-chá»n] <commit>..." -#: builtin/name-rev.c:176 +#: builtin/name-rev.c:260 msgid "git name-rev [options] --all" msgstr "git name-rev [các-tùy-chá»n] --all" -#: builtin/name-rev.c:177 +#: builtin/name-rev.c:261 msgid "git name-rev [options] --stdin" msgstr "git name-rev [các-tùy-chá»n] --stdin" -#: builtin/name-rev.c:229 +#: builtin/name-rev.c:313 msgid "print only names (no SHA-1)" msgstr "chỉ hiển thị tên (không SHA-1)" -#: builtin/name-rev.c:230 +#: builtin/name-rev.c:314 msgid "only use tags to name the commits" msgstr "chỉ dùng các thẻ để đặt tên cho các lần chuyển giao" -#: builtin/name-rev.c:232 +#: builtin/name-rev.c:316 msgid "only use refs matching <pattern>" msgstr "chỉ sá» dụng các tham chiếu (refs) khá»›p vá»›i <mẫu>" -#: builtin/name-rev.c:234 +#: builtin/name-rev.c:318 msgid "list all commits reachable from all refs" msgstr "" "liệt kê tất cả các lần chuyển giao có thể Ä‘á»c được từ tất cả các tham chiếu" -#: builtin/name-rev.c:235 +#: builtin/name-rev.c:319 msgid "read from stdin" msgstr "Ä‘á»c từ đầu và o tiêu chuẩn" -#: builtin/name-rev.c:236 +#: builtin/name-rev.c:320 msgid "allow to print `undefined` names" msgstr "cho phép hiển thị các tên “chÆ°a định nghÄ©a“" -#: builtin/notes.c:26 +#: builtin/name-rev.c:326 +msgid "dereference tags in the input (internal use)" +msgstr "bãi bá» tham chiếu các thẻ trong đầu và o (dùng ná»™i bá»™)" + +#: builtin/notes.c:24 msgid "git notes [--ref <notes_ref>] [list [<object>]]" msgstr "git notes [--ref <notes_ref>] [list [<đối-tượng>]]" -#: builtin/notes.c:27 +#: builtin/notes.c:25 msgid "" "git notes [--ref <notes_ref>] add [-f] [-m <msg> | -F <file> | (-c | -C) " "<object>] [<object>]" @@ -6821,11 +7077,11 @@ msgstr "" "git notes [--ref <notes_ref>] add [-f] [-m <lá»i-nhắn> | -F <táºp-tin> | (-c | " "-C) <đối-tượng>] [<đối-tượng>]" -#: builtin/notes.c:28 +#: builtin/notes.c:26 msgid "git notes [--ref <notes_ref>] copy [-f] <from-object> <to-object>" msgstr "git notes [--ref <notes_ref>] copy [-f] <từ-đối-tượng> <đến-đối-tượng>" -#: builtin/notes.c:29 +#: builtin/notes.c:27 msgid "" "git notes [--ref <notes_ref>] append [-m <msg> | -F <file> | (-c | -C) " "<object>] [<object>]" @@ -6833,223 +7089,200 @@ msgstr "" "git notes [--ref <notes_ref>] append [-m <lá»i-nhắn> | -F <táºp-tin> | (-c | -" "C) <đối-tượng>] [<đối-tượng>]" -#: builtin/notes.c:30 +#: builtin/notes.c:28 msgid "git notes [--ref <notes_ref>] edit [<object>]" msgstr "git notes [--ref <notes_ref>] edit [<đối-tượng>]" -#: builtin/notes.c:31 +#: builtin/notes.c:29 msgid "git notes [--ref <notes_ref>] show [<object>]" msgstr "git notes [--ref <notes_ref>] show [<đối-tượng>]" -#: builtin/notes.c:32 +#: builtin/notes.c:30 msgid "" "git notes [--ref <notes_ref>] merge [-v | -q] [-s <strategy> ] <notes_ref>" msgstr "" "git notes [--ref <notes_ref>] merge [-v | -q] [-s <chiến-lược> ] <notes_ref>" -#: builtin/notes.c:33 +#: builtin/notes.c:31 msgid "git notes merge --commit [-v | -q]" msgstr "git notes merge --commit [-v | -q]" -#: builtin/notes.c:34 +#: builtin/notes.c:32 msgid "git notes merge --abort [-v | -q]" msgstr "git notes merge --abort [-v | -q]" -#: builtin/notes.c:35 +#: builtin/notes.c:33 msgid "git notes [--ref <notes_ref>] remove [<object>...]" msgstr "git notes [--ref <notes_ref>] remove [<đối-tượng>...]" -#: builtin/notes.c:36 +#: builtin/notes.c:34 msgid "git notes [--ref <notes_ref>] prune [-n | -v]" msgstr "git notes [--ref <notes_ref>] prune [-n | -v]" -#: builtin/notes.c:37 +#: builtin/notes.c:35 msgid "git notes [--ref <notes_ref>] get-ref" msgstr "git notes [--ref <notes_ref>] get-ref" -#: builtin/notes.c:42 +#: builtin/notes.c:40 msgid "git notes [list [<object>]]" msgstr "git notes [list [<đối tượng>]]" -#: builtin/notes.c:47 +#: builtin/notes.c:45 msgid "git notes add [<options>] [<object>]" msgstr "git notes add [<các-tùy-chá»n>] [<đối-tượng>]" -#: builtin/notes.c:52 +#: builtin/notes.c:50 msgid "git notes copy [<options>] <from-object> <to-object>" msgstr "git notes copy [<các-tùy-chá»n>] <từ-đối-tượng> <đến-đối-tượng>" -#: builtin/notes.c:53 +#: builtin/notes.c:51 msgid "git notes copy --stdin [<from-object> <to-object>]..." msgstr "git notes copy --stdin [<từ-đối-tượng> <đến-đối-tượng>]..." -#: builtin/notes.c:58 +#: builtin/notes.c:56 msgid "git notes append [<options>] [<object>]" msgstr "git notes append [<các-tùy-chá»n>] [<đối-tượng>]" -#: builtin/notes.c:63 +#: builtin/notes.c:61 msgid "git notes edit [<object>]" msgstr "git notes edit [<đối tượng>]" -#: builtin/notes.c:68 +#: builtin/notes.c:66 msgid "git notes show [<object>]" msgstr "git notes show [<đối tượng>]" -#: builtin/notes.c:73 +#: builtin/notes.c:71 msgid "git notes merge [<options>] <notes_ref>" msgstr "git notes merge [<các-tùy-chá»n>] <notes_ref>" -#: builtin/notes.c:74 +#: builtin/notes.c:72 msgid "git notes merge --commit [<options>]" msgstr "git notes merge --commit [<các-tùy-chá»n>]" -#: builtin/notes.c:75 +#: builtin/notes.c:73 msgid "git notes merge --abort [<options>]" msgstr "git notes merge --abort [<các-tùy-chá»n>]" -#: builtin/notes.c:80 +#: builtin/notes.c:78 msgid "git notes remove [<object>]" msgstr "git notes remove [<đối tượng>]" -#: builtin/notes.c:85 +#: builtin/notes.c:83 msgid "git notes prune [<options>]" msgstr "git notes prune [<các-tùy-chá»n>]" -#: builtin/notes.c:90 +#: builtin/notes.c:88 msgid "git notes get-ref" msgstr "git notes get-ref" -#: builtin/notes.c:139 +#: builtin/notes.c:137 #, c-format msgid "unable to start 'show' for object '%s'" msgstr "không thể khởi chạy “show†cho đối tượng “%sâ€" -#: builtin/notes.c:143 +#: builtin/notes.c:141 msgid "could not read 'show' output" msgstr "không thể Ä‘á»c kết xuất “showâ€" -#: builtin/notes.c:151 +#: builtin/notes.c:149 #, c-format msgid "failed to finish 'show' for object '%s'" msgstr "gặp lá»—i khi hoà n thà nh “show†cho đối tượng “%sâ€" -#: builtin/notes.c:169 builtin/tag.c:341 +#: builtin/notes.c:167 builtin/tag.c:341 #, c-format msgid "could not create file '%s'" msgstr "không thể tạo táºp tin “%sâ€" -#: builtin/notes.c:188 +#: builtin/notes.c:186 msgid "Please supply the note contents using either -m or -F option" msgstr "" "Xin hãy áp dụng ná»™i dung của ghi chú sá» dụng hoặc là tùy chá»n -m hoặc là -F" -#: builtin/notes.c:209 builtin/notes.c:972 +#: builtin/notes.c:207 builtin/notes.c:844 #, c-format msgid "Removing note for object %s\n" msgstr "Äang gỡ bá» ghi chú (note) cho đối tượng %s\n" -#: builtin/notes.c:214 +#: builtin/notes.c:212 msgid "unable to write note object" msgstr "không thể ghi đối tượng ghi chú (note)" -#: builtin/notes.c:216 +#: builtin/notes.c:214 #, c-format msgid "The note contents has been left in %s" msgstr "Ná»™i dung ghi chú còn lại %s" -#: builtin/notes.c:250 builtin/tag.c:540 +#: builtin/notes.c:248 builtin/tag.c:540 #, c-format msgid "cannot read '%s'" msgstr "không thể Ä‘á»c “%sâ€" -#: builtin/notes.c:252 builtin/tag.c:543 +#: builtin/notes.c:250 builtin/tag.c:543 #, c-format msgid "could not open or read '%s'" msgstr "không thể mở hay Ä‘á»c “%sâ€" -#: builtin/notes.c:271 builtin/notes.c:444 builtin/notes.c:446 -#: builtin/notes.c:506 builtin/notes.c:560 builtin/notes.c:643 -#: builtin/notes.c:648 builtin/notes.c:723 builtin/notes.c:765 -#: builtin/notes.c:967 builtin/tag.c:556 +#: builtin/notes.c:269 builtin/notes.c:316 builtin/notes.c:318 +#: builtin/notes.c:378 builtin/notes.c:432 builtin/notes.c:515 +#: builtin/notes.c:520 builtin/notes.c:595 builtin/notes.c:637 +#: builtin/notes.c:839 builtin/tag.c:556 #, c-format msgid "Failed to resolve '%s' as a valid ref." msgstr "Gặp lá»—i khi phân giải “%s†nhÆ° là má»™t tham chiếu (ref) hợp lệ." -#: builtin/notes.c:274 +#: builtin/notes.c:272 #, c-format msgid "Failed to read object '%s'." msgstr "Gặp lá»—i khi Ä‘á»c đối tượng “%sâ€." -#: builtin/notes.c:298 -msgid "Cannot commit uninitialized/unreferenced notes tree" -msgstr "" -"Không thể chuyển giao (commit) chÆ°a được khởi tạo hoặc không được tham chiếu " -"cây ghi chú" - -#: builtin/notes.c:339 -#, c-format -msgid "Bad notes.rewriteMode value: '%s'" -msgstr "Giá trị notes.rewriteMode sai: “%sâ€" - -#: builtin/notes.c:349 -#, c-format -msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" -msgstr "Từ chối ghi đè ghi chú trong %s (nằm ngoà i của refs/notes/)" - -#. TRANSLATORS: The first %s is the name of the -#. environment variable, the second %s is its value -#: builtin/notes.c:376 -#, c-format -msgid "Bad %s value: '%s'" -msgstr "Giá trị %s sai: “%sâ€" - -#: builtin/notes.c:440 +#: builtin/notes.c:312 #, c-format msgid "Malformed input line: '%s'." msgstr "Dòng nháºp và o dị hình: “%sâ€." -#: builtin/notes.c:455 +#: builtin/notes.c:327 #, c-format msgid "Failed to copy notes from '%s' to '%s'" msgstr "Gặp lá»—i khi sao chép ghi chú (note) từ “%s†tá»›i “%sâ€" -#: builtin/notes.c:499 builtin/notes.c:553 builtin/notes.c:626 -#: builtin/notes.c:638 builtin/notes.c:711 builtin/notes.c:758 -#: builtin/notes.c:1032 +#: builtin/notes.c:371 builtin/notes.c:425 builtin/notes.c:498 +#: builtin/notes.c:510 builtin/notes.c:583 builtin/notes.c:630 +#: builtin/notes.c:904 msgid "too many parameters" msgstr "quá nhiá»u đối số" -#: builtin/notes.c:512 builtin/notes.c:771 +#: builtin/notes.c:384 builtin/notes.c:643 #, c-format msgid "No note found for object %s." msgstr "không tìm thấy ghi chú cho đối tượng %s." -#: builtin/notes.c:534 builtin/notes.c:691 +#: builtin/notes.c:406 builtin/notes.c:563 msgid "note contents as a string" msgstr "ná»™i dung ghi chú (note) nằm trong má»™t chuá»—i" -#: builtin/notes.c:537 builtin/notes.c:694 +#: builtin/notes.c:409 builtin/notes.c:566 msgid "note contents in a file" msgstr "ná»™i dung ghi chú (note) nằm trong má»™t táºp tin" -#: builtin/notes.c:539 builtin/notes.c:542 builtin/notes.c:696 -#: builtin/notes.c:699 builtin/tag.c:474 +#: builtin/notes.c:411 builtin/notes.c:414 builtin/notes.c:568 +#: builtin/notes.c:571 builtin/tag.c:474 msgid "object" msgstr "đối tượng" -#: builtin/notes.c:540 builtin/notes.c:697 +#: builtin/notes.c:412 builtin/notes.c:569 msgid "reuse and edit specified note object" msgstr "dùng lại nhÆ°ng có sá»a chữa đối tượng note đã chỉ ra" -#: builtin/notes.c:543 builtin/notes.c:700 +#: builtin/notes.c:415 builtin/notes.c:572 msgid "reuse specified note object" msgstr "dùng lại đối tượng ghi chú (note) đã chỉ ra" -#: builtin/notes.c:545 builtin/notes.c:613 +#: builtin/notes.c:417 builtin/notes.c:485 msgid "replace existing notes" msgstr "thay thế ghi chú trÆ°á»›c" -#: builtin/notes.c:579 +#: builtin/notes.c:451 #, c-format msgid "" "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite " @@ -7058,24 +7291,24 @@ msgstr "" "Không thể thêm các ghi chú. Äã tìm thấy các ghi chú đã có sẵn cho đối tượng " "%s. Sá» dụng tùy chá»n “-f†để ghi đè lên các ghi chú cÅ©" -#: builtin/notes.c:584 builtin/notes.c:661 +#: builtin/notes.c:456 builtin/notes.c:533 #, c-format msgid "Overwriting existing notes for object %s\n" msgstr "Äang ghi đè lên ghi chú cÅ© cho đối tượng %s\n" -#: builtin/notes.c:614 +#: builtin/notes.c:486 msgid "read objects from stdin" msgstr "Ä‘á»c các đối tượng từ đầu và o tiêu chuẩn" -#: builtin/notes.c:616 +#: builtin/notes.c:488 msgid "load rewriting config for <command> (implies --stdin)" msgstr "tải cấu hình chép lại cho <lệnh> (ngầm định là --stdin)" -#: builtin/notes.c:634 +#: builtin/notes.c:506 msgid "too few parameters" msgstr "quá Ãt đối số" -#: builtin/notes.c:655 +#: builtin/notes.c:527 #, c-format msgid "" "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite " @@ -7084,12 +7317,12 @@ msgstr "" "Không thể sao chép các ghi chú. Äã tìm thấy các ghi chú đã có sẵn cho đối " "tượng %s. Sá» dụng tùy chá»n “-f†để ghi đè lên các ghi chú cÅ©" -#: builtin/notes.c:667 +#: builtin/notes.c:539 #, c-format msgid "Missing notes on source object %s. Cannot copy." msgstr "Thiếu ghi chú trên đối tượng nguốn %s. Không thể sao chép." -#: builtin/notes.c:716 +#: builtin/notes.c:588 #, c-format msgid "" "The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n" @@ -7098,15 +7331,15 @@ msgstr "" "Các tùy chá»n -m/-F/-c/-C đã cổ không còn dùng nữa cho lệnh con “editâ€.\n" "Xin hãy sá» dụng lệnh sau để thay thế: “git notes add -f -m/-F/-c/-Câ€.\n" -#: builtin/notes.c:863 +#: builtin/notes.c:735 msgid "General options" msgstr "Tùy chá»n chung" -#: builtin/notes.c:865 +#: builtin/notes.c:737 msgid "Merge options" msgstr "Tùy chá»n vá» hòa trá»™n" -#: builtin/notes.c:867 +#: builtin/notes.c:739 msgid "" "resolve notes conflicts using the given strategy (manual/ours/theirs/union/" "cat_sort_uniq)" @@ -7114,46 +7347,46 @@ msgstr "" "phân giải các xung Ä‘á»™t “notes†sá» dụng chiến lược đã Ä‘Æ°a ra (manual/ours/" "theirs/union/cat_sort_uniq)" -#: builtin/notes.c:869 +#: builtin/notes.c:741 msgid "Committing unmerged notes" msgstr "Chuyển giao các note chÆ°a được hòa trá»™n" -#: builtin/notes.c:871 +#: builtin/notes.c:743 msgid "finalize notes merge by committing unmerged notes" msgstr "" "các note cuối cùng được hòa trá»™n bởi các note chÆ°a hòa trá»™n của lần chuyển " "giao" -#: builtin/notes.c:873 +#: builtin/notes.c:745 msgid "Aborting notes merge resolution" msgstr "Hủy bá» phân giải ghi chú (note) hòa trá»™n" -#: builtin/notes.c:875 +#: builtin/notes.c:747 msgid "abort notes merge" msgstr "bá» qua hòa trá»™n các ghi chú (note)" -#: builtin/notes.c:970 +#: builtin/notes.c:842 #, c-format msgid "Object %s has no note\n" msgstr "Äối tượng %s không có ghi chú (note)\n" -#: builtin/notes.c:982 +#: builtin/notes.c:854 msgid "attempt to remove non-existent note is not an error" msgstr "cố gắng gỡ bá» má»™t note chÆ°a từng tồn tại không phải là má»™t lá»—i" -#: builtin/notes.c:985 +#: builtin/notes.c:857 msgid "read object names from the standard input" msgstr "Ä‘á»c tên đối tượng từ thiết bị nháºp chuẩn" -#: builtin/notes.c:1066 +#: builtin/notes.c:938 msgid "notes_ref" msgstr "notes_ref" -#: builtin/notes.c:1067 +#: builtin/notes.c:939 msgid "use notes from <notes_ref>" msgstr "dùng “notes†từ <notes_ref>" -#: builtin/notes.c:1102 builtin/remote.c:1598 +#: builtin/notes.c:974 builtin/remote.c:1598 #, c-format msgid "Unknown subcommand: %s" msgstr "Không hiểu câu lệnh con: %s" @@ -7394,7 +7627,7 @@ msgstr "" " git push %s %s\n" "%s" -#: builtin/push.c:121 +#: builtin/push.c:117 #, c-format msgid "" "You are not currently on a branch.\n" @@ -7409,7 +7642,7 @@ msgstr "" "\n" " git push %s HEAD:<tên-của-nhánh-máy-chủ>\n" -#: builtin/push.c:128 +#: builtin/push.c:131 #, c-format msgid "" "The current branch %s has no upstream branch.\n" @@ -7423,12 +7656,12 @@ msgstr "" "\n" " git push --set-upstream %s %s\n" -#: builtin/push.c:136 +#: builtin/push.c:139 #, c-format msgid "The current branch %s has multiple upstream branches, refusing to push." msgstr "Nhánh hiện tại %s có Ä‘a nhánh thượng nguồn (upstream), từ chối push." -#: builtin/push.c:139 +#: builtin/push.c:142 #, c-format msgid "" "You are pushing to remote '%s', which is not the upstream of\n" @@ -7440,7 +7673,7 @@ msgstr "" "nhánh hiện tại “%s†của bạn, mà không báo cho tôi biết là cái gì được push\n" "để cáºp nháºt nhánh máy chủ nà o." -#: builtin/push.c:151 +#: builtin/push.c:165 msgid "" "push.default is unset; its implicit value is changing in\n" "Git 2.0 from 'matching' to 'simple'. To squelch this message\n" @@ -7473,28 +7706,28 @@ msgstr "" "tá»±\n" "“current†thay vì “simple†nếu bạn thỉnh thoảng phải sá» dụng bản Git cÅ©)" -#: builtin/push.c:199 +#: builtin/push.c:225 msgid "" "You didn't specify any refspecs to push, and push.default is \"nothing\"." msgstr "" "Bạn đã không chỉ ra má»™t refspecs nà o để push, và push.default là \"không là " "gì cả\"." -#: builtin/push.c:206 +#: builtin/push.c:232 msgid "" "Updates were rejected because the tip of your current branch is behind\n" -"its remote counterpart. Merge the remote changes (e.g. 'git pull')\n" -"before pushing again.\n" +"its remote counterpart. Integrate the remote changes (e.g.\n" +"'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "Việc cáºp nháºt bị từ chối bởi vì đầu mút của nhánh được push nằm đằng sau bá»™\n" "pháºn tÆ°Æ¡ng ứng của máy chủ. Hòa trá»™n vá»›i các thay đổi từ máy chủ (v.d. “git " -"pullâ€)\n" +"pull...â€)\n" "trÆ°á»›c khi lại push lần nữa.\n" -"Xem trong phần “Note about fast-forwards†từ lệnh “git push --help†để có " -"thông tin chi tiết." +"Xem “Note about fast-forwards†từ lệnh “git push --help†để có thông tin chi " +"tiết." -#: builtin/push.c:212 +#: builtin/push.c:238 msgid "" "Updates were rejected because a pushed branch tip is behind its remote\n" "counterpart. If you did not intend to push that branch, you may want to\n" @@ -7509,41 +7742,40 @@ msgstr "" "thà nh “simpleâ€, “current†hoặc “upstream†để chỉ push nhánh hiện hà nh mà " "thôi." -#: builtin/push.c:218 +#: builtin/push.c:244 msgid "" "Updates were rejected because a pushed branch tip is behind its remote\n" -"counterpart. Check out this branch and merge the remote changes\n" -"(e.g. 'git pull') before pushing again.\n" +"counterpart. Check out this branch and integrate the remote changes\n" +"(e.g. 'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "Việc cáºp nháºt bị từ chối bởi vì đầu mút của nhánh được push nằm đằng sau bá»™\n" "pháºn tÆ°Æ¡ng ứng của máy chủ. Checkou nhánh nà y và hòa trá»™n vá»›i các thay đổi " "từ máy chủ\n" -"(v.d. “git pullâ€) trÆ°á»›c khi lại push lần nữa.\n" -"Xem trong phần “Note about fast-forwards†từ lệnh “git push --help†để có " -"thông tin chi tiết." +"(v.d. “git pull ...â€) trÆ°á»›c khi lại push lần nữa.\n" +"Xem “Note about fast-forwards†từ lệnh “git push --help†để có thông tin chi " +"tiết." -#: builtin/push.c:224 +#: builtin/push.c:250 msgid "" "Updates were rejected because the remote contains work that you do\n" "not have locally. This is usually caused by another repository pushing\n" -"to the same ref. You may want to first merge the remote changes (e.g.,\n" -"'git pull') before pushing again.\n" +"to the same ref. You may want to first integrate the remote changes\n" +"(e.g., 'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "Việc cáºp nháºt bị từ chối bởi vì máy chủ có chứa công việc mà bạn không\n" -"có ở máy ná»™i bá»™ của mình. Lá»—i nà y thÆ°á»ng có nguyên nhân bởi kho khác đẩy dữ " -"liệu lên\n" -"cùng má»™t tham chiếu. Bạn có lẽ muốn hòa trá»™n vá»›i các thay đổi từ máy chủ\n" -"(v.d. “git pullâ€) trÆ°á»›c khi lại push lần nữa.\n" -"Xem trong phần “Note about fast-forwards†từ lệnh “git push --help†để có " -"thông tin chi tiết." - -#: builtin/push.c:231 +"có ở máy ná»™i bá»™ của mình. Lá»—i nà y thÆ°á»ng có nguyên nhân bởi kho khác đẩy\n" +"dữ liệu lên cùng má»™t tham chiếu. Bạn có lẽ muốn hòa trá»™n vá»›i các thay đổi\n" +"từ máy chủ(v.d. “git pull...â€) trÆ°á»›c khi lại push lần nữa.\n" +"Xem “Note about fast-forwards†từ lệnh “git push --help†để có thông tin chi " +"tiết." + +#: builtin/push.c:257 msgid "Updates were rejected because the tag already exists in the remote." msgstr "Việc cáºp nháºt bị từ chối bởi vì thẻ đã sẵn có từ trÆ°á»›c trên máy chủ." -#: builtin/push.c:234 +#: builtin/push.c:260 msgid "" "You cannot update a remote ref that points at a non-commit object,\n" "or update a remote ref to make it point at a non-commit object,\n" @@ -7555,22 +7787,22 @@ msgstr "" "tượng\n" "không phải chuyển giao, mà không sá» dụng tùy chá»n “--forceâ€.\n" -#: builtin/push.c:294 +#: builtin/push.c:320 #, c-format msgid "Pushing to %s\n" msgstr "Äang push (đẩy) lên %s\n" -#: builtin/push.c:298 +#: builtin/push.c:324 #, c-format msgid "failed to push some refs to '%s'" msgstr "gặp lá»—i khi push (đẩy lên) má»™t số tham chiếu (ref) đến “%sâ€" -#: builtin/push.c:331 +#: builtin/push.c:357 #, c-format msgid "bad repository '%s'" msgstr "repository (kho) sai “%sâ€" -#: builtin/push.c:332 +#: builtin/push.c:358 msgid "" "No configured push destination.\n" "Either specify the URL from the command-line or configure a remote " @@ -7591,88 +7823,88 @@ msgstr "" "\n" " git push <tên>\n" -#: builtin/push.c:347 +#: builtin/push.c:373 msgid "--all and --tags are incompatible" msgstr "--all và --tags xung khắc nhau" -#: builtin/push.c:348 +#: builtin/push.c:374 msgid "--all can't be combined with refspecs" msgstr "--all không thể được tổ hợp cùng vá»›i refspecs" -#: builtin/push.c:353 +#: builtin/push.c:379 msgid "--mirror and --tags are incompatible" msgstr "--mirror và --tags xung khắc nhau" -#: builtin/push.c:354 +#: builtin/push.c:380 msgid "--mirror can't be combined with refspecs" msgstr "--mirror không thể được tổ hợp cùng vá»›i refspecs" -#: builtin/push.c:359 +#: builtin/push.c:385 msgid "--all and --mirror are incompatible" msgstr "--all và --mirror xung khắc nhau" -#: builtin/push.c:419 +#: builtin/push.c:445 msgid "repository" msgstr "kho" -#: builtin/push.c:420 +#: builtin/push.c:446 msgid "push all refs" msgstr "push tất cả refs" -#: builtin/push.c:421 +#: builtin/push.c:447 msgid "mirror all refs" msgstr "mirror tất cả refs" -#: builtin/push.c:423 +#: builtin/push.c:449 msgid "delete refs" msgstr "xóa refs" -#: builtin/push.c:424 +#: builtin/push.c:450 msgid "push tags (can't be used with --all or --mirror)" msgstr "" "các thẻ push (không thể sá» dụng cùng vá»›i các tùy chá»n --all hay --mirror)" -#: builtin/push.c:427 +#: builtin/push.c:453 msgid "force updates" msgstr "ép buá»™c cáºp nháºt" -#: builtin/push.c:428 +#: builtin/push.c:454 msgid "check" msgstr "kiểm tra" -#: builtin/push.c:429 +#: builtin/push.c:455 msgid "control recursive pushing of submodules" msgstr "Ä‘iá»u khiển việc đẩy lên (push) đệ qui của mô-Ä‘un-con" -#: builtin/push.c:431 +#: builtin/push.c:457 msgid "use thin pack" msgstr "tạo gói nhẹ" -#: builtin/push.c:432 builtin/push.c:433 +#: builtin/push.c:458 builtin/push.c:459 msgid "receive pack program" msgstr "nháºn vá» chÆ°Æ¡ng trình pack" -#: builtin/push.c:434 +#: builtin/push.c:460 msgid "set upstream for git pull/status" msgstr "đặt thượng nguồn (upstream) cho git pull/status" -#: builtin/push.c:437 +#: builtin/push.c:463 msgid "prune locally removed refs" msgstr "prune (cắt cụt) những tham chiếu (refs) bị gỡ bá»" -#: builtin/push.c:439 +#: builtin/push.c:465 msgid "bypass pre-push hook" msgstr "vòng qua “pre-push hookâ€" -#: builtin/push.c:440 +#: builtin/push.c:466 msgid "push missing but relevant tags" msgstr "push bị trượt nhÆ°ng các thẻ thÃch hợp" -#: builtin/push.c:450 +#: builtin/push.c:476 msgid "--delete is incompatible with --all, --mirror and --tags" msgstr "--delete là xung khắc vá»›i các tùy chá»n --all, --mirror và --tags" -#: builtin/push.c:452 +#: builtin/push.c:478 msgid "--delete doesn't make sense without any refs" msgstr "--delete không hợp lý nếu không có bất kỳ tham chiếu (refs) nà o" @@ -7687,71 +7919,81 @@ msgstr "" "[--index-output=<táºp-tin>] (--empty | <tree-ish1> [<tree-ish2> [<tree-" "ish3>]])" -#: builtin/read-tree.c:108 +#: builtin/read-tree.c:109 msgid "write resulting index to <file>" msgstr "ghi mục lục kết quả và o <táºp-tin>" -#: builtin/read-tree.c:111 +#: builtin/read-tree.c:112 msgid "only empty the index" msgstr "chỉ vá»›i bảng mục lục trống rá»—ng" -#: builtin/read-tree.c:113 +#: builtin/read-tree.c:114 msgid "Merging" msgstr "Hòa trá»™n" -#: builtin/read-tree.c:115 +#: builtin/read-tree.c:116 msgid "perform a merge in addition to a read" msgstr "thá»±c hiện má»™t hòa trá»™n thêm và o việc Ä‘á»c" -#: builtin/read-tree.c:117 +#: builtin/read-tree.c:118 msgid "3-way merge if no file level merging required" msgstr "" "hòa trá»™n kiểu “3-way†nếu không có táºp tin mức hòa trá»™n nà o được yêu cầu " -#: builtin/read-tree.c:119 +#: builtin/read-tree.c:120 msgid "3-way merge in presence of adds and removes" msgstr "hòa trá»™n 3-way trong sá»± hiện diện của “adds†và “removesâ€" -#: builtin/read-tree.c:121 +#: builtin/read-tree.c:122 msgid "same as -m, but discard unmerged entries" msgstr "giống vá»›i -m, nhÆ°ng bá» qua các mục chÆ°a được hòa trá»™n" -#: builtin/read-tree.c:122 +#: builtin/read-tree.c:123 msgid "<subdirectory>/" msgstr "<thÆ°-mục-con>/" -#: builtin/read-tree.c:123 +#: builtin/read-tree.c:124 msgid "read the tree into the index under <subdirectory>/" msgstr "Ä‘á»c cây và o trong bảng mục lục dÆ°á»›i <thÆ°_mục_con>/" -#: builtin/read-tree.c:126 +#: builtin/read-tree.c:127 msgid "update working tree with merge result" msgstr "cáºp nháºt cây là m việc vá»›i kết quả hòa trá»™n" -#: builtin/read-tree.c:128 +#: builtin/read-tree.c:129 msgid "gitignore" msgstr "gitignore" -#: builtin/read-tree.c:129 +#: builtin/read-tree.c:130 msgid "allow explicitly ignored files to be overwritten" msgstr "cho phép các táºp tin rõ rà ng bị lá» Ä‘i được ghi đè" -#: builtin/read-tree.c:132 +#: builtin/read-tree.c:133 msgid "don't check the working tree after merging" msgstr "không kiểm tra cây là m việc sau hòa trá»™n" -#: builtin/read-tree.c:133 +#: builtin/read-tree.c:134 msgid "don't update the index or the work tree" msgstr "không cáºp nháºt bảng mục lục hay cây là m việc" -#: builtin/read-tree.c:135 +#: builtin/read-tree.c:136 msgid "skip applying sparse checkout filter" msgstr "bá» qua áp dụng bá»™ lá»c lấy ra (checkout) thÆ°a thá»›t" -#: builtin/read-tree.c:137 +#: builtin/read-tree.c:138 msgid "debug unpack-trees" msgstr "gỡ lá»—i unpack-trees" +#: builtin/reflog.c:500 +#, c-format +msgid "%s' for '%s' is not a valid timestamp" +msgstr "%s' cho '%s' không phải là dấu thá»i gian hợp lệ" + +#: builtin/reflog.c:616 builtin/reflog.c:621 +#, c-format +msgid "'%s' is not a valid timestamp" +msgstr "“%s†không phải là dấu thá»i gian hợp lệ" + #: builtin/remote.c:11 msgid "git remote [-v | --verbose]" msgstr "git remote [-v | --verbose]" @@ -8327,97 +8569,97 @@ msgstr "Gặp lá»—i khi tìm cây của HEAD." msgid "Failed to find tree of %s." msgstr "Gặp lá»—i khi tìm cây của %s." -#: builtin/reset.c:98 +#: builtin/reset.c:99 #, c-format msgid "HEAD is now at %s" msgstr "HEAD hiện giá» tại %s" -#: builtin/reset.c:169 +#: builtin/reset.c:172 #, c-format msgid "Cannot do a %s reset in the middle of a merge." msgstr "Không thể thá»±c hiện má»™t %s reset ở giữa của quá trình hòa trá»™n." -#: builtin/reset.c:248 +#: builtin/reset.c:251 msgid "be quiet, only report errors" msgstr "là m việc ở chế Ä‘á»™ im lặng, chỉ hiển thị khi có lá»—i" -#: builtin/reset.c:250 +#: builtin/reset.c:253 msgid "reset HEAD and index" msgstr "đặt lại (reset) HEAD và bảng mục lục" -#: builtin/reset.c:251 +#: builtin/reset.c:254 msgid "reset only HEAD" msgstr "chỉ đặt lại (reset) HEAD" -#: builtin/reset.c:253 builtin/reset.c:255 +#: builtin/reset.c:256 builtin/reset.c:258 msgid "reset HEAD, index and working tree" msgstr "đặt lại HEAD, bảng mục lục và cây là m việc" -#: builtin/reset.c:257 +#: builtin/reset.c:260 msgid "reset HEAD but keep local changes" msgstr "đặt lại HEAD nhÆ°ng giữ lại các thay đổi ná»™i bá»™" -#: builtin/reset.c:275 +#: builtin/reset.c:278 #, c-format msgid "Failed to resolve '%s' as a valid revision." msgstr "Gặp lá»—i khi phân giải “%s†nhÆ° là điểm xét duyệt hợp lệ." -#: builtin/reset.c:278 builtin/reset.c:286 +#: builtin/reset.c:281 builtin/reset.c:289 #, c-format msgid "Could not parse object '%s'." msgstr "không thể phân tÃch đối tượng “%sâ€." -#: builtin/reset.c:283 +#: builtin/reset.c:286 #, c-format msgid "Failed to resolve '%s' as a valid tree." msgstr "Gặp lá»—i khi phân giải “%s†nhÆ° là má»™t cây (tree) hợp lệ." -#: builtin/reset.c:292 +#: builtin/reset.c:295 msgid "--patch is incompatible with --{hard,mixed,soft}" msgstr "--patch xung khắc vá»›i --{hard,mixed,soft}" -#: builtin/reset.c:301 +#: builtin/reset.c:304 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead." msgstr "" "--mixed vá»›i các Ä‘Æ°á»ng dẫn không còn dùng nữa; hãy thay thế bằng lệnh “git " "reset -- <Ä‘Æ°á»ng_dẫn>â€." -#: builtin/reset.c:303 +#: builtin/reset.c:306 #, c-format msgid "Cannot do %s reset with paths." msgstr "Không thể thá»±c hiện lệnh %s reset vá»›i các Ä‘Æ°á»ng dẫn." -#: builtin/reset.c:313 +#: builtin/reset.c:316 #, c-format msgid "%s reset is not allowed in a bare repository" msgstr "%s reset không được phép trên kho bare (trên máy chủ)" -#: builtin/reset.c:333 +#: builtin/reset.c:336 #, c-format msgid "Could not reset index file to revision '%s'." -msgstr "Không thể đặt lại (reset) bảng mục lục thà nh Ä‘iểm xét lại “%sâ€." +msgstr "Không thể đặt lại (reset) bảng mục lục thà nh Ä‘iểm xét duyệt “%sâ€." -#: builtin/reset.c:339 +#: builtin/reset.c:342 msgid "Unstaged changes after reset:" msgstr "Những thay đổi bị bá» trạng thái (stage) sau khi reset:" -#: builtin/reset.c:344 +#: builtin/reset.c:347 msgid "Could not write new index file." msgstr "Không thể ghi táºp tin lÆ°u bảng mục lục má»›i." -#: builtin/rev-parse.c:339 +#: builtin/rev-parse.c:345 msgid "git rev-parse --parseopt [options] -- [<args>...]" msgstr "git rev-parse --parseopt [các-tùy-chá»n] -- [<th.số>...]" -#: builtin/rev-parse.c:344 +#: builtin/rev-parse.c:350 msgid "keep the `--` passed as an arg" msgstr "giữ “--“ chuyển qua là m tham số" -#: builtin/rev-parse.c:346 +#: builtin/rev-parse.c:352 msgid "stop parsing after the first non-option argument" msgstr "dừng phân tÃch sau đối số đầu tiên không có tùy chá»n" -#: builtin/rev-parse.c:464 +#: builtin/rev-parse.c:470 msgid "" "git rev-parse --parseopt [options] -- [<args>...]\n" " or: git rev-parse --sq-quote [<arg>...]\n" @@ -8447,176 +8689,204 @@ msgstr "git cherry-pick [các-tùy-chá»n] <commit-ish>..." msgid "git cherry-pick <subcommand>" msgstr "git cherry-pick <lệnh-con>" -#: builtin/revert.c:70 builtin/revert.c:92 +#: builtin/revert.c:71 builtin/revert.c:94 #, c-format msgid "%s: %s cannot be used with %s" msgstr "%s: %s không thể được sá» dụng vá»›i %s" -#: builtin/revert.c:103 +#: builtin/revert.c:105 msgid "end revert or cherry-pick sequence" msgstr "kết thúc cherry-pick hay revert liên tiếp nhau" -#: builtin/revert.c:104 +#: builtin/revert.c:106 msgid "resume revert or cherry-pick sequence" msgstr "phục hồi lại cherry-pick hay revert liên tiếp nhau" -#: builtin/revert.c:105 +#: builtin/revert.c:107 msgid "cancel revert or cherry-pick sequence" msgstr "không cherry-pick hay revert liên tiếp nhau" -#: builtin/revert.c:106 +#: builtin/revert.c:108 msgid "don't automatically commit" msgstr "không commit má»™t cách tá»± Ä‘á»™ng." -#: builtin/revert.c:107 +#: builtin/revert.c:109 msgid "edit the commit message" msgstr "sá»a lại chú thÃch cho commit" -#: builtin/revert.c:110 +#: builtin/revert.c:112 msgid "parent number" msgstr "số của cha mẹ" -#: builtin/revert.c:112 +#: builtin/revert.c:114 msgid "merge strategy" msgstr "chiến lược hòa trá»™n" -#: builtin/revert.c:113 +#: builtin/revert.c:115 msgid "option" msgstr "tùy chá»n" -#: builtin/revert.c:114 +#: builtin/revert.c:116 msgid "option for merge strategy" msgstr "tùy chá»n cho chiến lược hòa trá»™n" -#: builtin/revert.c:125 +#: builtin/revert.c:127 msgid "append commit name" msgstr "nối thêm tên lần chuyển giao (commit)" -#: builtin/revert.c:126 +#: builtin/revert.c:128 msgid "allow fast-forward" msgstr "cho phép fast-forward" -#: builtin/revert.c:127 +#: builtin/revert.c:129 msgid "preserve initially empty commits" msgstr "cấm khởi tạo lần chuyển giao trống rá»—ng" -#: builtin/revert.c:128 +#: builtin/revert.c:130 msgid "allow commits with empty messages" msgstr "chấp nháºn chuyển giao (commit) mà không ghi chú gì" -#: builtin/revert.c:129 +#: builtin/revert.c:131 msgid "keep redundant, empty commits" msgstr "giữ lại các lần chuyển giao dÆ° thừa, rá»—ng" -#: builtin/revert.c:133 +#: builtin/revert.c:135 msgid "program error" msgstr "lá»—i chÆ°Æ¡ng trình" -#: builtin/revert.c:223 +#: builtin/revert.c:225 msgid "revert failed" msgstr "revert gặp lá»—i" -#: builtin/revert.c:238 +#: builtin/revert.c:240 msgid "cherry-pick failed" msgstr "cherry-pick gặp lá»—i" -#: builtin/rm.c:15 +#: builtin/rm.c:16 msgid "git rm [options] [--] <file>..." msgstr "git rm [các-tùy-chá»n] [--] <táºp-tin>..." -#: builtin/rm.c:64 builtin/rm.c:186 -#, c-format +#: builtin/rm.c:64 +msgid "" +"the following submodule (or one of its nested submodules)\n" +"uses a .git directory:" +msgid_plural "" +"the following submodules (or one of its nested submodules)\n" +"use a .git directory:" +msgstr[0] "" +"mô-Ä‘un-con sau đây (hay má»™t trong số mô-Ä‘un-con bên trong của nó)\n" +"dùng má»™t thÆ° mục .git:" +msgstr[1] "" +"các mô-Ä‘un-con sau đây (hay má»™t trong số mô-Ä‘un-con bên trong của nó)\n" +"dùng má»™t thÆ° mục .git:" + +#: builtin/rm.c:70 msgid "" -"submodule '%s' (or one of its nested submodules) uses a .git directory\n" +"\n" "(use 'rm -rf' if you really want to remove it including all of its history)" msgstr "" -"mô-Ä‘un-con “%s†(hoặc cái nằm trong các mô-Ä‘un-con) dùng thÆ° mục .git\n" -"(dùng “rm -rf†nếu bạn thá»±c sá»± muốn gỡ bá» nó cùng vá»›i tất cả lịch sá» của " +"\n" +"(dùng /\"rm -rf/\" nếu bạn thá»±c sá»± muốn gỡ bá» nó cùng vá»›i tất cả lịch sá» của " "chúng)" -#: builtin/rm.c:174 -#, c-format +#: builtin/rm.c:230 msgid "" -"'%s' has staged content different from both the file and the HEAD\n" -"(use -f to force removal)" -msgstr "" -"“%s†có ná»™i dung được lÆ°u trạng thái khác biệt từ cả táºp tin và cả HEAD\n" -"(dùng tùy chá»n -f để ép buá»™c gỡ bá»)" +"the following file has staged content different from both the\n" +"file and the HEAD:" +msgid_plural "" +"the following files have staged content different from both the\n" +"file and the HEAD:" +msgstr[0] "" +"táºp tin sau đây có trạng thái khác biệt ná»™i dung từ cả táºp tin\n" +"và cả HEAD:" +msgstr[1] "" +"các táºp tin sau đây có trạng thái khác biệt ná»™i dung từ cả táºp tin\n" +"và cả HEAD:" -#: builtin/rm.c:180 -#, c-format +#: builtin/rm.c:235 msgid "" -"'%s' has changes staged in the index\n" -"(use --cached to keep the file, or -f to force removal)" +"\n" +"(use -f to force removal)" msgstr "" -"“%s†có các thay đổi được lÆ°u trạng thái trong bảng mục lục\n" -"(dùng tùy chá»n --cached để giữ táºp tin, hoặc -f để ép buá»™c gỡ bá»)" +"\n" +"(dùng -f để buá»™c gỡ bá»)" -#: builtin/rm.c:191 -#, c-format +#: builtin/rm.c:239 +msgid "the following file has changes staged in the index:" +msgid_plural "the following files have changes staged in the index:" +msgstr[0] "táºp tin sau đây có thay đổi trạng thái trong bảng mục lục:" +msgstr[1] "các táºp tin sau đây có thay đổi trạng thái trong bảng mục lục:" + +#: builtin/rm.c:243 builtin/rm.c:254 msgid "" -"'%s' has local modifications\n" +"\n" "(use --cached to keep the file, or -f to force removal)" msgstr "" -"“%s†có các thay đổi ná»™i bá»™\n" +"\n" "(dùng tùy chá»n --cached để giữ táºp tin, hoặc -f để ép buá»™c gỡ bá»)" -#: builtin/rm.c:207 +#: builtin/rm.c:251 +msgid "the following file has local modifications:" +msgid_plural "the following files have local modifications:" +msgstr[0] "táºp tin sau đây có những thay đổi ná»™i bá»™:" +msgstr[1] "những táºp tin sau đây có những thay đổi ná»™i bá»™:" + +#: builtin/rm.c:269 msgid "do not list removed files" msgstr "không liệt kê các táºp tin đã gỡ bá»" -#: builtin/rm.c:208 +#: builtin/rm.c:270 msgid "only remove from the index" msgstr "chỉ gỡ bá» từ mục lục" -#: builtin/rm.c:209 +#: builtin/rm.c:271 msgid "override the up-to-date check" msgstr "ghi đè lên kiểm tra cáºp nháºt" -#: builtin/rm.c:210 +#: builtin/rm.c:272 msgid "allow recursive removal" msgstr "cho phép gỡ bỠđệ qui" -#: builtin/rm.c:212 +#: builtin/rm.c:274 msgid "exit with a zero status even if nothing matched" msgstr "thoát ra vá»›i trạng thái khác không tháºm chà nếu không có gì khá»›p" -#: builtin/rm.c:283 +#: builtin/rm.c:345 #, c-format msgid "not removing '%s' recursively without -r" msgstr "không thể gỡ bỠ“%s†má»™t cách đệ qui mà không có tùy chá»n -r" -#: builtin/rm.c:322 +#: builtin/rm.c:384 #, c-format msgid "git rm: unable to remove %s" msgstr "git rm: không thể gỡ bá» %s" #: builtin/shortlog.c:13 msgid "git shortlog [<options>] [<revision range>] [[--] [<path>...]]" -msgstr "git shortlog [các-tùy-chá»n] [<vùng-xem-xét>] [[--] [<Ä‘Æ°á»ng-dẫn>...]]" +msgstr "git shortlog [các-tùy-chá»n] [<vùng-xét-duyệt>] [[--] [<Ä‘Æ°á»ng-dẫn>...]]" #: builtin/shortlog.c:131 #, c-format msgid "Missing author: %s" msgstr "Thiếu tên tác giả: %s" -#: builtin/shortlog.c:227 +#: builtin/shortlog.c:228 msgid "sort output according to the number of commits per author" msgstr "sắp xếp kết xuất tuân theo số lượng chuyển giao trên má»—i tác giả" -#: builtin/shortlog.c:229 +#: builtin/shortlog.c:230 msgid "Suppress commit descriptions, only provides commit count" msgstr "Chặn má»i mô tả lần chuyển giao, chỉ Ä‘Æ°a ra số lượng lần chuyển giao" -#: builtin/shortlog.c:231 +#: builtin/shortlog.c:232 msgid "Show the email address of each author" msgstr "Hiển thị thÆ° Ä‘iện tá» cho từng tác giả" -#: builtin/shortlog.c:232 +#: builtin/shortlog.c:233 msgid "w[,i1[,i2]]" msgstr "w[,i1[,i2]]" -#: builtin/shortlog.c:233 +#: builtin/shortlog.c:234 msgid "Linewrap output" msgstr "Ngắt dòng khi quá dà i" @@ -8680,23 +8950,23 @@ msgstr "hiển thị các tham chiếu không thể được Ä‘á»c bởi bất msgid "show commits in topological order" msgstr "hiển thị các lần chuyển giao theo thứ tá»± tôpô" -#: builtin/show-branch.c:671 +#: builtin/show-branch.c:672 msgid "show only commits not on the first branch" msgstr "chỉ hiển thị các lần chuyển giao không nằm trên nhánh đầu tiên" -#: builtin/show-branch.c:673 +#: builtin/show-branch.c:674 msgid "show merges reachable from only one tip" msgstr "hiển thị các lần hòa trá»™n có thể Ä‘á»c được chỉ từ má»™t đầu mút" -#: builtin/show-branch.c:675 -msgid "show commits where no parent comes before its children" -msgstr "hiển thị các lần chuyển giao nÆ¡i mà cha mẹ đến trÆ°á»›c con của nó" +#: builtin/show-branch.c:676 +msgid "topologically sort, maintaining date order where possible" +msgstr "sắp xếp hình thái há»c, bảo trì thứ tá»± ngà y nếu có thể" -#: builtin/show-branch.c:677 +#: builtin/show-branch.c:679 msgid "<n>[,<base>]" msgstr "<n>[,<cÆ¡ sở>]" -#: builtin/show-branch.c:678 +#: builtin/show-branch.c:680 msgid "show <n> most recent ref-log entries starting at base" msgstr "hiển thị <n> các mục “ref-log†gần nhất kể từ ná»n (base)" @@ -8712,38 +8982,38 @@ msgstr "" msgid "git show-ref --exclude-existing[=pattern] < ref-list" msgstr "git show-ref --exclude-existing[=mẫu] < ref-list" -#: builtin/show-ref.c:165 +#: builtin/show-ref.c:168 msgid "only show tags (can be combined with heads)" msgstr "chỉ hiển thị thẻ (có thể tổ hợp cùng vá»›i đầu)" -#: builtin/show-ref.c:166 +#: builtin/show-ref.c:169 msgid "only show heads (can be combined with tags)" msgstr "chỉ hiển thị đầu (có thể tổ hợp cùng vá»›i thẻ)" -#: builtin/show-ref.c:167 +#: builtin/show-ref.c:170 msgid "stricter reference checking, requires exact ref path" msgstr "" "việc kiểm tra tham chiếu chÃnh xác, đòi há»i chÃnh xác Ä‘Æ°á»ng dẫn tham chiếu " "(ref)" -#: builtin/show-ref.c:170 builtin/show-ref.c:172 -msgid "show the HEAD reference" -msgstr "hiển thị tham chiếu của HEAD" +#: builtin/show-ref.c:173 builtin/show-ref.c:176 +msgid "show the HEAD reference, even if it would be filtered out" +msgstr "hiển thị tham chiếu HEAD, ngay cả khi nó đã được lá»c ra" -#: builtin/show-ref.c:174 +#: builtin/show-ref.c:178 msgid "dereference tags into object IDs" msgstr "bãi bá» tham chiếu các thẻ thà nh ra các ID đối tượng" -#: builtin/show-ref.c:176 +#: builtin/show-ref.c:180 msgid "only show SHA1 hash using <n> digits" msgstr "chỉ hiển thị mã băm SHA1 sá» dụng <n> chữ số" -#: builtin/show-ref.c:180 +#: builtin/show-ref.c:184 msgid "do not print results to stdout (useful with --verify)" msgstr "" "không hiển thị kết quả ra đầu ra chuẩn (stdout) (chỉ hữu dụng vá»›i --verify)" -#: builtin/show-ref.c:182 +#: builtin/show-ref.c:186 msgid "show refs from stdin that aren't in local repository" msgstr "" "hiển thị các tham chiếu (refs) từ đầu và o tiêu chuẩn (stdin) cái mà không ở " @@ -9164,30 +9434,33 @@ msgstr "ghi đối tượng cây (tree) cho <tiá»n tố> thÆ° mục con" msgid "only useful for debugging" msgstr "chỉ hữu Ãch khi cần gỡ lá»—i" -#: git.c:16 +#: git.c:17 msgid "" "'git help -a' and 'git help -g' lists available subcommands and some\n" "concept guides. See 'git help <command>' or 'git help <concept>'\n" "to read about a specific subcommand or concept." msgstr "" "“git help -a†và “git help -g†liệt kê các câu lệnh con sẵn có và má»™t số\n" -"hÆ°á»›ng dẫn khái niệm cÆ¡ bản. Xem “git help <lệnh>†hay “git help <khái " -"niệm>â€\n" -"để Ä‘á»c các đặc tả cho lệnh hay khái niệm đó." +"hÆ°á»›ng dẫn vá» khái niệm. Xem “git help <lệnh>†hay “git help <khái-niệm>â€\n" +"để xem các đặc tả cho lệnh hay khái niệm cụ thể." + +#: parse-options.h:144 +msgid "expiry date" +msgstr "ngà y hết hạn" -#: parse-options.h:156 +#: parse-options.h:159 msgid "no-op (backward compatibility)" msgstr "no-op (tÆ°Æ¡ng thÃch ngược)" -#: parse-options.h:232 +#: parse-options.h:236 msgid "be more verbose" msgstr "chi tiết hÆ¡n nữa" -#: parse-options.h:234 +#: parse-options.h:238 msgid "be more quiet" msgstr "im lặng hÆ¡n nữa" -#: parse-options.h:240 +#: parse-options.h:244 msgid "use <n> digits to display SHA-1s" msgstr "sá» dụng <n> chữ số để hiển thị SHA-1s" @@ -9205,7 +9478,7 @@ msgstr "Liệt kê, tạo hay là xóa các nhánh" #: common-cmds.h:11 msgid "Checkout a branch or paths to the working tree" -msgstr "Lấy ra (checkout) má»™t nhánh hay các Ä‘Æ°á»ng dẫn tá»›i cây là m việc" +msgstr "Lấy ra má»™t nhánh hay các Ä‘Æ°á»ng dẫn tá»›i cây là m việc" #: common-cmds.h:12 msgid "Clone a repository into a new directory" @@ -9218,12 +9491,12 @@ msgstr "Ghi các thay đổi và o kho chứa" #: common-cmds.h:14 msgid "Show changes between commits, commit and working tree, etc" msgstr "" -"Hiển thị các thay đổi giữa những lần chuyển giao (commit), commit và cây là m " -"việc, v.v.." +"Xem các thay đổi giữa những lần chuyển giao,\n" +" giữa má»™t lần chuyển giao và cây là m việc, v.v.." #: common-cmds.h:15 msgid "Download objects and refs from another repository" -msgstr "Các đối tượng và tham chiếu được tải vá» từ kho chứa khác" +msgstr "Tải vá» các đối tượng và tham chiếu từ kho chứa khác" #: common-cmds.h:16 msgid "Print lines matching a pattern" @@ -9231,40 +9504,37 @@ msgstr "In ra những dòng khá»›p vá»›i má»™t mẫu" #: common-cmds.h:17 msgid "Create an empty Git repository or reinitialize an existing one" -msgstr "" -"Tạo má»™t kho git trống rá»—ng hay khởi tạo lại má»™t kho đã tồn tại từ trÆ°á»›c" +msgstr "Tạo má»™t kho git má»›i hay khởi tạo lại má»™t kho đã tồn tại từ trÆ°á»›c" #: common-cmds.h:18 msgid "Show commit logs" -msgstr "Hiển thị nháºt ký các lần chuyển giao (commit)" +msgstr "Hiển thị nháºt ký các lần chuyển giao" #: common-cmds.h:19 msgid "Join two or more development histories together" -msgstr "" -"Hợp nhất hai hay nhiá»u hÆ¡n lịch sá» của các nhà phát triển phần má»m lại vá»›i " -"nhau" +msgstr "Hợp nhất hai hay nhiá»u hÆ¡n lịch sá» của các nhà phát triển" #: common-cmds.h:20 msgid "Move or rename a file, a directory, or a symlink" -msgstr "Di chuyển, đổi tên má»™t táºp tin, thÆ° mục hay liên kết tượng trÆ°ng" +msgstr "Di chuyển hay đổi tên má»™t táºp tin, thÆ° mục hoặc liên kết má»m" #: common-cmds.h:21 -msgid "Fetch from and merge with another repository or a local branch" -msgstr "Lấy vá» (fetch) và hòa trá»™n vá»›i kho khác hay nhánh ná»™i bá»™" +msgid "Fetch from and integrate with another repository or a local branch" +msgstr "Lấy vá» và hợp nhất vá»›i kho khác hay má»™t nhánh ná»™i bá»™" #: common-cmds.h:22 msgid "Update remote refs along with associated objects" -msgstr "" -"Cáºp nháºt tham chiếu (refs) máy chủ cùng vá»›i các đối tượng liên quan đến nó" +msgstr "Cáºp nháºt th.chiếu máy chủ cùng vá»›i các đối tượng liên quan đến nó" #: common-cmds.h:23 msgid "Forward-port local commits to the updated upstream head" msgstr "" -"Forward-port những lần chuyển giao ná»™i bá»™ tá»›i head thượng nguồn đã cáºp nháºt" +"Chuyển tiếp những lần chuyển giao ná»™i bá»™\n" +" tá»›i head thượng nguồn đã cáºp nháºt" #: common-cmds.h:24 msgid "Reset current HEAD to the specified state" -msgstr "Äặt lại HEAD hiện hà nh thà nh má»™t trạng thái được chỉ ra" +msgstr "Äặt lại HEAD hiện hà nh thà nh trạng thái đã cho" #: common-cmds.h:25 msgid "Remove files from the working tree and from the index" @@ -9280,9 +9550,7 @@ msgstr "Hiển thị trạng thái cây là m việc" #: common-cmds.h:28 msgid "Create, list, delete or verify a tag object signed with GPG" -msgstr "" -"Tạo, liệt kê, xóa hay xác thá»±c má»™t đối tượng thẻ (tag) mà nó được ký sá» dụng " -"GPG" +msgstr "Tạo, liệt kê, xóa hay xác thá»±c má»™t đối tượng thẻ được ký bằng GPG" #: git-am.sh:50 msgid "You need to set your committer info first" @@ -9299,11 +9567,11 @@ msgstr "" #: git-am.sh:105 #, sh-format msgid "" -"When you have resolved this problem, run \"$cmdline --resolved\".\n" +"When you have resolved this problem, run \"$cmdline --continue\".\n" "If you prefer to skip this patch, run \"$cmdline --skip\" instead.\n" "To restore the original branch and stop patching, run \"$cmdline --abort\"." msgstr "" -"Khi bạn cần giải quyết vấn Ä‘á» nà y hãy chạy lệnh \"$cmdline --resolved\".\n" +"Khi bạn cần giải quyết vấn Ä‘á» nà y hãy chạy lệnh \"$cmdline --continue\".\n" "Nếu bạn có ý định bá» qua miếng vá, thay và o đó bạn chạy \"$cmdline --skip" "\".\n" "Äể phục hồi lại thà nh nhánh nguyên thủy và dừng việc vá lại thì chạy " @@ -9359,25 +9627,34 @@ msgstr "" "Tùy chá»n -b/--binary đã không dùng từ lâu rồi, và \n" "nó sẽ được bá» Ä‘i. Xin đừng sá» dụng nó thêm nữa." -#: git-am.sh:477 +#: git-am.sh:479 #, sh-format msgid "previous rebase directory $dotest still exists but mbox given." msgstr "thÆ° mục rebase trÆ°á»›c $dotest vẫn chÆ°a sẵn sà ng nhÆ°ng mbox được Ä‘Æ°a ra." -#: git-am.sh:482 +#: git-am.sh:484 msgid "Please make up your mind. --skip or --abort?" msgstr "Xin hãy rõ rà ng. --skip hay --abort?" -#: git-am.sh:509 +#: git-am.sh:520 +#, sh-format +msgid "" +"Stray $dotest directory found.\n" +"Use \"git am --abort\" to remove it." +msgstr "" +"Tìm thấy thÆ° mục lạc $dotest.\n" +"Dùng \"git am --abort\" để loại bá» nó Ä‘i." + +#: git-am.sh:528 msgid "Resolve operation not in progress, we are not resuming." msgstr "Thao tác phân giải không được tiến hà nh, chúng ta không phục hồi lại." -#: git-am.sh:575 +#: git-am.sh:594 #, sh-format msgid "Dirty index: cannot apply patches (dirty: $files)" msgstr "Bảng mục lục sai: không thể áp dụng các miếng vá (sai: $files)" -#: git-am.sh:679 +#: git-am.sh:698 #, sh-format msgid "" "Patch is empty. Was it split wrong?\n" @@ -9390,34 +9667,34 @@ msgstr "" "Äể phục hồi lại nhánh nguyên thủy và dừng vá lại hãy chạy lệnh \"$cmdline --" "abort\"." -#: git-am.sh:706 +#: git-am.sh:725 msgid "Patch does not have a valid e-mail address." msgstr "Miếng vá không có địa chỉ e-mail hợp lệ." -#: git-am.sh:753 +#: git-am.sh:772 msgid "cannot be interactive without stdin connected to a terminal." msgstr "" "không thể được tÆ°Æ¡ng tác mà không có stdin kết nối vá»›i má»™t thiết bị cuối" -#: git-am.sh:757 +#: git-am.sh:776 msgid "Commit Body is:" msgstr "Thân của lần chuyển giao (commit) là :" #. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a] #. in your translation. The program will only accept English #. input at this point. -#: git-am.sh:764 +#: git-am.sh:783 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " msgstr "" "Ãp dụng? đồng ý [y]/không [n]/chỉnh sá»a [e]/hiển thị miếng [v]á/đồng ý tất " "cả [a] " -#: git-am.sh:800 +#: git-am.sh:819 #, sh-format msgid "Applying: $FIRSTLINE" msgstr "Äang áp dụng (miếng vá): $FIRSTLINE" -#: git-am.sh:821 +#: git-am.sh:840 msgid "" "No changes - did you forget to use 'git add'?\n" "If there is nothing left to stage, chances are that something else\n" @@ -9428,7 +9705,7 @@ msgstr "" "đã sẵn được Ä‘Æ°a và o vá»›i cùng ná»™i dung thay đổi; bạn có lẽ muốn bá» qua miếng " "vá nà y." -#: git-am.sh:829 +#: git-am.sh:848 msgid "" "You still have unmerged paths in your index\n" "did you forget to use 'git add'?" @@ -9436,16 +9713,16 @@ msgstr "" "Bạn vẫn có những Ä‘Æ°á»ng dẫn chÆ°a được hòa trá»™n trong bảng mục lục của mình\n" "bạn đã quên sá» dụng lệnh “git add†à ?" -#: git-am.sh:845 +#: git-am.sh:864 msgid "No changes -- Patch already applied." msgstr "Không thay đổi gì cả -- Miếng vá đã được áp dụng rồi." -#: git-am.sh:855 +#: git-am.sh:874 #, sh-format msgid "Patch failed at $msgnum $FIRSTLINE" msgstr "Vá gặp lá»—i tại $msgnum $FIRSTLINE" -#: git-am.sh:858 +#: git-am.sh:877 #, sh-format msgid "" "The copy of the patch that failed is found in:\n" @@ -9454,7 +9731,7 @@ msgstr "" "Bản sao chép của miếng vá mà nó gặp lá»—i thì được tìm thấy trong:\n" " $dotest/patch" -#: git-am.sh:876 +#: git-am.sh:895 msgid "applying to an empty history" msgstr "áp dụng và o má»™t lịch sá» trống rá»—ng" @@ -9477,7 +9754,7 @@ msgstr "không công nháºn tùy chá»n: “$argâ€" #: git-bisect.sh:99 #, sh-format msgid "'$arg' does not appear to be a valid revision" -msgstr "â€$arg†không có vẻ nhÆ° là má»™t sá»± xét lại hợp lệ" +msgstr "â€$arg†không có vẻ nhÆ° là má»™t Ä‘iểm xét duyệt hợp lệ" #: git-bisect.sh:117 msgid "Bad HEAD - I need a HEAD" @@ -9662,7 +9939,7 @@ msgstr "Không thể hòa trá»™n nhiá»u nhánh và trong má»™t head trống rá» msgid "Cannot rebase onto multiple branches" msgstr "Không thể thá»±c hiện lệnh rebase (cÆ¡ cấu lại) trên nhiá»u nhánh" -#: git-rebase.sh:53 +#: git-rebase.sh:54 msgid "" "When you have resolved this problem, run \"git rebase --continue\".\n" "If you prefer to skip this patch, run \"git rebase --skip\" instead.\n" @@ -9675,35 +9952,55 @@ msgstr "" "Äể phục hồi lại thà nh nhánh nguyên thủy và dừng việc vá lại thì chạy \"git " "rebase --abort\"." +#: git-rebase.sh:156 +msgid "Applied autostash." +msgstr "Äã áp dụng autostash." + +#: git-rebase.sh:159 +#, sh-format +msgid "Cannot store $stash_sha1" +msgstr "Không thể lÆ°u $stash_sha1" + #: git-rebase.sh:160 +msgid "" +"Applying autostash resulted in conflicts.\n" +"Your changes are safe in the stash.\n" +"You can run \"git stash pop\" or \"git stash drop\" at any time.\n" +msgstr "" +"Ãp dụng autostash có hiệu quả trong các xung Ä‘á»™t.\n" +"Các thay đổi của bạn an toà n trong stash (tạm cất Ä‘i).\n" +"Bạn có thể chạy lệnh \"git stash pop\" hay \"git stash drop\" bất kỳ lúc " +"nà o.\n" + +#: git-rebase.sh:190 msgid "The pre-rebase hook refused to rebase." msgstr "Móc (hook) pre-rebase từ chối rebase." -#: git-rebase.sh:165 +#: git-rebase.sh:195 msgid "It looks like git-am is in progress. Cannot rebase." msgstr "" "Hình nhÆ° Ä‘ang trong quá trình thá»±c hiện lệnh git-am. Không thể chạy lệnh " "rebase." -#: git-rebase.sh:296 +#: git-rebase.sh:329 msgid "The --exec option must be used with the --interactive option" msgstr "Tùy chá»n --exec phải được sá» dụng cùng vá»›i tùy chá»n --interactive" -#: git-rebase.sh:301 +#: git-rebase.sh:334 msgid "No rebase in progress?" msgstr "Không có tiến trình rebase nà o phải không?" -#: git-rebase.sh:312 +#: git-rebase.sh:345 msgid "The --edit-todo action can only be used during interactive rebase." msgstr "" "Hà nh Ä‘á»™ng “--edit-todo†chỉ có thể dùng trong quá trình “rebase†(sá»a lịch " "sá») tÆ°Æ¡ng tác." -#: git-rebase.sh:319 +#: git-rebase.sh:352 msgid "Cannot read HEAD" msgstr "Không thể Ä‘á»c HEAD" -#: git-rebase.sh:322 +#: git-rebase.sh:355 msgid "" "You must edit all merge conflicts and then\n" "mark them as resolved using git add" @@ -9711,12 +10008,12 @@ msgstr "" "Bạn phải sá»a tất cả các lần hòa trá»™n xung Ä‘á»™t và sau\n" "đó đánh dấu chúng là cần xá» lý sá» dụng lệnh git add" -#: git-rebase.sh:340 +#: git-rebase.sh:373 #, sh-format msgid "Could not move back to $head_name" msgstr "Không thể quay trở lại $head_name" -#: git-rebase.sh:359 +#: git-rebase.sh:392 #, sh-format msgid "" "It seems that there is already a $state_dir_base directory, and\n" @@ -9739,57 +10036,66 @@ msgstr "" "\n" "TÔI: là lệnh bạn vừa gá»i!" -#: git-rebase.sh:404 +#: git-rebase.sh:437 #, sh-format msgid "invalid upstream $upstream_name" msgstr "thượng nguồn không hợp lệ $upstream_name" -#: git-rebase.sh:428 +#: git-rebase.sh:461 #, sh-format msgid "$onto_name: there are more than one merge bases" msgstr "$onto_name: ở đây có nhiá»u hÆ¡n má»™t ná»n móng hòa trá»™n" -#: git-rebase.sh:431 git-rebase.sh:435 +#: git-rebase.sh:464 git-rebase.sh:468 #, sh-format msgid "$onto_name: there is no merge base" msgstr "$onto_name: ở đây không có ná»n móng hòa trá»™n nà o" -#: git-rebase.sh:440 +#: git-rebase.sh:473 #, sh-format msgid "Does not point to a valid commit: $onto_name" msgstr "Không chỉ đến má»™t lần chuyển giao (commit) không hợp lệ: $onto_name" -#: git-rebase.sh:463 +#: git-rebase.sh:496 #, sh-format msgid "fatal: no such branch: $branch_name" msgstr "nghiêm trá»ng: không có nhánh nhÆ° thế: $branch_name" -#: git-rebase.sh:483 +#: git-rebase.sh:519 +msgid "Cannot autostash" +msgstr "Không thể autostash" + +#: git-rebase.sh:524 +#, sh-format +msgid "Created autostash: $stash_abbrev" +msgstr "Äã tạo autostash: $stash_abbrev" + +#: git-rebase.sh:528 msgid "Please commit or stash them." msgstr "Xin hãy commit hoặc tạm cất (stash) chúng." -#: git-rebase.sh:501 +#: git-rebase.sh:548 #, sh-format msgid "Current branch $branch_name is up to date." msgstr "Nhánh hiện tại $branch_name đã được cáºp nháºt rồi." -#: git-rebase.sh:504 +#: git-rebase.sh:552 #, sh-format msgid "Current branch $branch_name is up to date, rebase forced." msgstr "Nhánh hiện tại $branch_name đã được cáºp nháºt rồi, lệnh rebase ép buá»™c." -#: git-rebase.sh:515 +#: git-rebase.sh:563 #, sh-format msgid "Changes from $mb to $onto:" msgstr "Thay đổi từ $mb thà nh $onto:" #. Detach HEAD and reset the tree -#: git-rebase.sh:524 +#: git-rebase.sh:572 msgid "First, rewinding head to replay your work on top of it..." msgstr "" "TrÆ°á»›c tiên, di chuyển head để xem lại các công việc trên đỉnh của nó..." -#: git-rebase.sh:532 +#: git-rebase.sh:582 #, sh-format msgid "Fast-forwarded $branch_name to $onto_name." msgstr "Fast-forward $branch_name thà nh $onto_name." @@ -9823,6 +10129,11 @@ msgstr "Không thể gỡ bá» bảng mục lục tạm thá»i (không thể xẠmsgid "Cannot record working tree state" msgstr "Không thể ghi lại trạng thái cây là m việc hiện hà nh" +#: git-stash.sh:190 +#, sh-format +msgid "Cannot update $ref_stash with $w_commit" +msgstr "Không thể cáºp nháºt $ref_stash vá»›i $w_commit" + #. TRANSLATORS: $option is an invalid option, like #. `--blah-blah'. The 7 spaces at the beginning of the #. second line correspond to "error: ". So you should line @@ -9833,132 +10144,153 @@ msgstr "Không thể ghi lại trạng thái cây là m việc hiện hà nh" #. $ git stash save --blah-blah 2>&1 | head -n 2 #. error: unknown option for 'stash save': --blah-blah #. To provide a message, use git stash save -- '--blah-blah' -#: git-stash.sh:202 +#: git-stash.sh:241 #, sh-format msgid "" "error: unknown option for 'stash save': $option\n" " To provide a message, use git stash save -- '$option'" msgstr "" "lá»—i: không hiểu tùy chá»n cho “stash saveâ€: $option\n" -" Äể cung cấp má»™t thông Ä‘iệp, sá» dụng git stash save -- “$optionâ€" +" Äể dùng thông Ä‘iệp có chứa -- ở đầu, sá» dụng git stash save -- \"$option" +"\"" -#: git-stash.sh:223 +#: git-stash.sh:262 msgid "No local changes to save" msgstr "Không có thay đổi ná»™i bá»™ nà o được ghi lại" -#: git-stash.sh:227 +#: git-stash.sh:268 +msgid "" +"The following untracked files would NOT be saved but need to be removed by " +"stash save:" +msgstr "" +"Các táºp tin chÆ°a được theo dõi sau đây KHÔNG được ghi lại nhÆ°ng cần được gỡ " +"bá» bởi việc ghi lại stash:" + +#: git-stash.sh:270 +msgid "" +"Aborting. Consider using either the --force or --include-untracked option." +msgstr "" +"Bãi bá». Cân nhắc dùng má»™t trong hai tùy chá»n --force và --include-untracked." + +#: git-stash.sh:274 msgid "Cannot initialize stash" msgstr "Không thể khởi tạo stash" -#: git-stash.sh:235 +#: git-stash.sh:278 msgid "Cannot save the current status" msgstr "Không thể ghi lại trạng thái hiện hà nh" -#: git-stash.sh:253 +#: git-stash.sh:296 msgid "Cannot remove worktree changes" msgstr "Không thể gỡ bá» các thay đổi cây-là m-việc" -#: git-stash.sh:352 +#: git-stash.sh:395 msgid "No stash found." msgstr "Không tìm thấy stash nà o." -#: git-stash.sh:359 +#: git-stash.sh:402 #, sh-format msgid "Too many revisions specified: $REV" -msgstr "Chỉ ra quá nhiá»u Ä‘iểm xét lại: $REV" +msgstr "Chỉ ra quá nhiá»u Ä‘iểm xét duyệt: $REV" -#: git-stash.sh:365 +#: git-stash.sh:408 #, sh-format msgid "$reference is not valid reference" msgstr "$reference không phải là tham chiếu hợp lệ" -#: git-stash.sh:393 +#: git-stash.sh:436 #, sh-format msgid "'$args' is not a stash-like commit" msgstr "â€$args†không phải là lần chuyển giao (commit) giống-stash" -#: git-stash.sh:404 +#: git-stash.sh:447 #, sh-format msgid "'$args' is not a stash reference" msgstr "â€$args†không phải tham chiếu đến stash" -#: git-stash.sh:412 +#: git-stash.sh:455 msgid "unable to refresh index" msgstr "không thể là m tÆ°Æ¡i má»›i bảng mục lục" -#: git-stash.sh:416 +#: git-stash.sh:459 msgid "Cannot apply a stash in the middle of a merge" msgstr "Không thể áp dụng má»™t stash ở giữa của quá trình hòa trá»™n" -#: git-stash.sh:424 +#: git-stash.sh:467 msgid "Conflicts in index. Try without --index." msgstr "Xung Ä‘á»™t trong bảng mục lục. Hãy thá» mà không dùng tùy chá»n --index." -#: git-stash.sh:426 +#: git-stash.sh:469 msgid "Could not save index tree" msgstr "Không thể ghi lại cây chỉ mục" -#: git-stash.sh:460 +#: git-stash.sh:503 msgid "Cannot unstage modified files" msgstr "Không thể bá» trạng thÃa của các táºp tin đã được sá»a chữa" -#: git-stash.sh:475 +#: git-stash.sh:518 msgid "Index was not unstashed." msgstr "Bảng mục lục đã không được bá» stash." -#: git-stash.sh:492 +#: git-stash.sh:535 #, sh-format msgid "Dropped ${REV} ($s)" -msgstr "Äã hạ xuống ${REV} ($s)" +msgstr "Äã xóa ${REV} ($s)" -#: git-stash.sh:493 +#: git-stash.sh:536 #, sh-format msgid "${REV}: Could not drop stash entry" msgstr "${REV}: Không thể xóa bá» mục stash" -#: git-stash.sh:500 +#: git-stash.sh:543 msgid "No branch name specified" msgstr "ChÆ°a chỉ ra tên của nhánh" -#: git-stash.sh:571 +#: git-stash.sh:615 msgid "(To restore them type \"git stash apply\")" msgstr "(Äể phục hồi lại chúng hãy gõ \"git stash apply\")" -#: git-submodule.sh:91 +#: git-submodule.sh:95 #, sh-format msgid "cannot strip one component off url '$remoteurl'" msgstr "không thể tháo bá» má»™t thà nh phần ra khá»i “$remoteurl†url" -#: git-submodule.sh:196 +#: git-submodule.sh:237 #, sh-format msgid "No submodule mapping found in .gitmodules for path '$sm_path'" msgstr "" "Không tìm thấy ánh xạ (mapping) mô-Ä‘un-con trong .gitmodules cho Ä‘Æ°á»ng dẫn " "“$sm_pathâ€" -#: git-submodule.sh:239 +#: git-submodule.sh:281 #, sh-format msgid "Clone of '$url' into submodule path '$sm_path' failed" msgstr "Nhân bản “$url†và o Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$sm_path†gặp lá»—i" -#: git-submodule.sh:251 +#: git-submodule.sh:293 #, sh-format msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa" msgstr "" "Gitdir “$a†là bá»™ pháºn của Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$b†hoặc \"vice versa\"" -#: git-submodule.sh:349 +#: git-submodule.sh:403 +msgid "Relative path can only be used from the toplevel of the working tree" +msgstr "" +"ÄÆ°á»ng dẫn tÆ°Æ¡ng đối chỉ có thể dùng từ thÆ° mục ở mức cao nhất của cây là m " +"việc" + +#: git-submodule.sh:413 #, sh-format msgid "repo URL: '$repo' must be absolute or begin with ./|../" msgstr "" "repo URL: “$repo†phải là đưá»ng dẫn tuyệt đối hoặc là bắt đầu bằng ./|../" -#: git-submodule.sh:366 +#: git-submodule.sh:430 #, sh-format msgid "'$sm_path' already exists in the index" msgstr "â€$sm_path†thá»±c sá»± đã tồn tại ở bảng mục lục rồi" -#: git-submodule.sh:370 +#: git-submodule.sh:434 #, sh-format msgid "" "The following path is ignored by one of your .gitignore files:\n" @@ -9970,36 +10302,36 @@ msgstr "" "$sm_path\n" "Sá» dụng -f nếu bạn thá»±c sá»± muốn thêm nó và o." -#: git-submodule.sh:388 +#: git-submodule.sh:452 #, sh-format msgid "Adding existing repo at '$sm_path' to the index" msgstr "Äang thêm repo có sẵn tại “$sm_path†và o bảng mục lục" -#: git-submodule.sh:390 +#: git-submodule.sh:454 #, sh-format msgid "'$sm_path' already exists and is not a valid git repo" msgstr "â€$sm_path†đã tồn tại từ trÆ°á»›c và không phải là má»™t kho git hợp lệ" -#: git-submodule.sh:398 +#: git-submodule.sh:462 #, sh-format msgid "A git directory for '$sm_name' is found locally with remote(s):" msgstr "" "ThÆ° mục git cho “$sm_name†được tìm thấy má»™t cách cục bá»™ vá»›i các máy chủ:" -#: git-submodule.sh:400 +#: git-submodule.sh:464 #, sh-format msgid "" "If you want to reuse this local git directory instead of cloning again from" msgstr "Nếu bạn muốn dùng lại thÆ° mục git ná»™i bá»™ nà y thay vì nhân bản từ nó" -#: git-submodule.sh:402 +#: git-submodule.sh:466 #, sh-format msgid "" "use the '--force' option. If the local git directory is not the correct repo" msgstr "" "dùng tùy chá»n “--forceâ€. Nếu thÆ° mục git ná»™i bá»™ không phải là repo (kho) đúng" -#: git-submodule.sh:403 +#: git-submodule.sh:467 #, sh-format msgid "" "or you are unsure what this means choose another name with the '--name' " @@ -10008,70 +10340,71 @@ msgstr "" "hay bạn không chắc chắn Ä‘iá»u đó có nghÄ©a gì chá»n tên khác vá»›i tùy chá»n “--" "nameâ€." -#: git-submodule.sh:405 +#: git-submodule.sh:469 #, sh-format msgid "Reactivating local git directory for submodule '$sm_name'." msgstr "" "Phục hồi sá»± hoạt Ä‘á»™ng của thÆ° mục git ná»™i bá»™ cho mô-Ä‘un-con “$sm_nameâ€." -#: git-submodule.sh:417 +#: git-submodule.sh:481 #, sh-format msgid "Unable to checkout submodule '$sm_path'" -msgstr "Không thể checkout mô-Ä‘un con “$sm_pathâ€" +msgstr "Không thể checkout mô-Ä‘un-con “$sm_pathâ€" -#: git-submodule.sh:422 +#: git-submodule.sh:486 #, sh-format msgid "Failed to add submodule '$sm_path'" -msgstr "Gặp lá»—i khi thêm mô-Ä‘un con “$sm_pathâ€" +msgstr "Gặp lá»—i khi thêm mô-Ä‘un-con “$sm_pathâ€" -#: git-submodule.sh:431 +#: git-submodule.sh:495 #, sh-format msgid "Failed to register submodule '$sm_path'" -msgstr "Gặp lá»—i khi đăng ký vá»›i hệ thống mô-Ä‘un con “$sm_pathâ€" +msgstr "Gặp lá»—i khi đăng ký vá»›i hệ thống mô-Ä‘un-con “$sm_pathâ€" -#: git-submodule.sh:474 +#: git-submodule.sh:539 #, sh-format -msgid "Entering '$prefix$sm_path'" -msgstr "Äang nháºp “$prefix$sm_pathâ€" +msgid "Entering '$prefix$displaypath'" +msgstr "Äang và o “$prefix$displaypathâ€" -#: git-submodule.sh:488 +#: git-submodule.sh:554 #, sh-format -msgid "Stopping at '$sm_path'; script returned non-zero status." -msgstr "Dừng lại tại “$sm_pathâ€; script trả vá» trạng thái khác không." +msgid "Stopping at '$prefix$displaypath'; script returned non-zero status." +msgstr "" +"Dừng lại tại “$prefix$displaypathâ€; script trả vá» trạng thái khác không." -#: git-submodule.sh:532 +#: git-submodule.sh:600 #, sh-format -msgid "No url found for submodule path '$sm_path' in .gitmodules" +msgid "No url found for submodule path '$displaypath' in .gitmodules" msgstr "" -"Không tìm thấy url cho Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$sm_path†trong .gitmodules" +"Không tìm thấy url cho Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypath†trong .gitmodules" -#: git-submodule.sh:541 +#: git-submodule.sh:609 #, sh-format -msgid "Failed to register url for submodule path '$sm_path'" -msgstr "Gặp lá»—i khi đăng ký url cho Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$sm_pathâ€" +msgid "Failed to register url for submodule path '$displaypath'" +msgstr "Gặp lá»—i khi đăng ký url cho Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€" -#: git-submodule.sh:543 +#: git-submodule.sh:611 #, sh-format -msgid "Submodule '$name' ($url) registered for path '$sm_path'" -msgstr "Mô-Ä‘un-con “$name†($url) được đăng ký cho Ä‘Æ°á»ng dẫn “$sm_pathâ€" +msgid "Submodule '$name' ($url) registered for path '$displaypath'" +msgstr "Mô-Ä‘un-con “$name†($url) được đăng ký cho Ä‘Æ°á»ng dẫn “$displaypathâ€" -#: git-submodule.sh:551 +#: git-submodule.sh:619 #, sh-format -msgid "Failed to register update mode for submodule path '$sm_path'" +msgid "Failed to register update mode for submodule path '$displaypath'" msgstr "" -"Gặp lá»—i khi đăng ký chế Ä‘á»™ cáºp nháºt cho Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$sm_pathâ€" +"Gặp lá»—i khi đăng ký chế Ä‘á»™ cáºp nháºt cho Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€" -#: git-submodule.sh:588 +#: git-submodule.sh:656 #, sh-format msgid "Use '.' if you really want to deinitialize all submodules" msgstr "Dùng “.†nếu bạn thá»±c sá»± muốn gỡ bá» má»i mô-Ä‘un-con" -#: git-submodule.sh:603 +#: git-submodule.sh:673 #, sh-format -msgid "Submodule work tree '$sm_path' contains a .git directory" -msgstr "Cây là m việc mô-Ä‘un-con “$sm_path†có chứa thÆ° mục .git" +msgid "Submodule work tree '$displaypath' contains a .git directory" +msgstr "Cây là m việc mô-Ä‘un-con “$displaypath†có chứa thÆ° mục .git" -#: git-submodule.sh:604 +#: git-submodule.sh:674 #, sh-format msgid "" "(use 'rm -rf' if you really want to remove it including all of its history)" @@ -10079,147 +10412,201 @@ msgstr "" "(dùng “rm -rf†nếu bạn thá»±c sá»± muốn gỡ bá» nó cùng vá»›i tất cả lịch sá» của " "chúng)" -#: git-submodule.sh:610 +#: git-submodule.sh:680 #, sh-format msgid "" -"Submodule work tree '$sm_path' contains local modifications; use '-f' to " +"Submodule work tree '$displaypath' contains local modifications; use '-f' to " "discard them" msgstr "" -"Cây là m việc mô-Ä‘un-con “$sm_path†chứa các thay đổi ná»™i bá»™; hãy dùng “-f†" -"để loại bá» chúng Ä‘i" +"Cây là m việc mô-Ä‘un-con “$displaypath†chứa các thay đổi ná»™i bá»™; hãy dùng “-" +"f†để loại bá» chúng Ä‘i" -#: git-submodule.sh:613 +#: git-submodule.sh:683 #, sh-format -msgid "Cleared directory '$sm_path'" -msgstr "ThÆ° mục được dá»n “$sm_pathâ€" +msgid "Cleared directory '$displaypath'" +msgstr "Äã tạo thÆ° mục '$displaypath'" -#: git-submodule.sh:614 +#: git-submodule.sh:684 #, sh-format -msgid "Could not remove submodule work tree '$sm_path'" -msgstr "Không thể gỡ bá» cây là m việc mô-Ä‘un con “$sm_pathâ€" +msgid "Could not remove submodule work tree '$displaypath'" +msgstr "Không thể gỡ bá» cây là m việc mô-Ä‘un-con “$displaypathâ€" -#: git-submodule.sh:617 +#: git-submodule.sh:687 #, sh-format -msgid "Could not create empty submodule directory '$sm_path'" -msgstr "Không thể tạo thÆ° mục mô-Ä‘un-con rá»—ng “$sm_pathâ€" +msgid "Could not create empty submodule directory '$displaypath'" +msgstr "Không thể tạo thÆ° mục mô-Ä‘un-con rá»—ng “$displaypathâ€" -#: git-submodule.sh:626 +#: git-submodule.sh:696 #, sh-format -msgid "Submodule '$name' ($url) unregistered for path '$sm_path'" -msgstr "Mô-Ä‘un-con “$name†($url) được bỠđăng ký cho Ä‘Æ°á»ng dẫn “$sm_pathâ€" +msgid "Submodule '$name' ($url) unregistered for path '$displaypath'" +msgstr "Mô-Ä‘un-con “$name†($url) được bỠđăng ký cho Ä‘Æ°á»ng dẫn “$displaypathâ€" -#: git-submodule.sh:731 +#: git-submodule.sh:811 #, sh-format msgid "" -"Submodule path '$prefix$sm_path' not initialized\n" +"Submodule path '$displaypath' not initialized\n" "Maybe you want to use 'update --init'?" msgstr "" -"ÄÆ°á»ng dẫn mô-Ä‘un-con “$prefix$sm_path†chÆ°a được khởi tạo\n" +"ÄÆ°á»ng dẫn mô-Ä‘un-con “$displaypath†chÆ°a được khởi tạo.\n" "Có lẽ bạn muốn sá» dụng lệnh “update --initâ€?" -#: git-submodule.sh:744 +#: git-submodule.sh:824 #, sh-format -msgid "Unable to find current revision in submodule path '$prefix$sm_path'" +msgid "Unable to find current revision in submodule path '$displaypath'" msgstr "" -"Không tìm thấy Ä‘iểm xét lại hiện hà nh trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$prefix" -"$sm_pathâ€" +"Không tìm thấy Ä‘iểm xét duyệt hiện hà nh trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con " +"“$displaypathâ€" -#: git-submodule.sh:753 +#: git-submodule.sh:833 #, sh-format msgid "Unable to fetch in submodule path '$sm_path'" msgstr "Không thể lấy vá» (fetch) trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$sm_pathâ€" -#: git-submodule.sh:777 +#: git-submodule.sh:857 #, sh-format -msgid "Unable to fetch in submodule path '$prefix$sm_path'" -msgstr "Không thể lấy vá» (fetch) trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$prefix$sm_pathâ€" +msgid "Unable to fetch in submodule path '$displaypath'" +msgstr "Không thể lấy vá» (fetch) trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€" -#: git-submodule.sh:791 +#: git-submodule.sh:871 #, sh-format -msgid "Unable to rebase '$sha1' in submodule path '$prefix$sm_path'" -msgstr "Không thể rebase “$sha1†trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$prefix$sm_pathâ€" +msgid "Unable to rebase '$sha1' in submodule path '$displaypath'" +msgstr "Không thể rebase “$sha1†trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€" -#: git-submodule.sh:792 +#: git-submodule.sh:872 #, sh-format -msgid "Submodule path '$prefix$sm_path': rebased into '$sha1'" -msgstr "ÄÆ°á»ng dẫn mô-Ä‘un-con “$prefix$sm_pathâ€: được rebase và o trong “$sha1â€" +msgid "Submodule path '$displaypath': rebased into '$sha1'" +msgstr "ÄÆ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€: được rebase và o trong “$sha1â€" -#: git-submodule.sh:797 +#: git-submodule.sh:877 #, sh-format -msgid "Unable to merge '$sha1' in submodule path '$prefix$sm_path'" +msgid "Unable to merge '$sha1' in submodule path '$displaypath'" msgstr "" -"Không thể hòa trá»™n (merge) “$sha1†trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$prefix" -"$sm_pathâ€" +"Không thể hòa trá»™n (merge) “$sha1†trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€" -#: git-submodule.sh:798 +#: git-submodule.sh:878 #, sh-format -msgid "Submodule path '$prefix$sm_path': merged in '$sha1'" -msgstr "ÄÆ°á»ng dẫn mô-Ä‘un-con “$prefix$sm_pathâ€: được hòa trá»™n và o “$sha1â€" +msgid "Submodule path '$displaypath': merged in '$sha1'" +msgstr "ÄÆ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€: được hòa trá»™n và o “$sha1â€" -#: git-submodule.sh:803 +#: git-submodule.sh:883 #, sh-format -msgid "Unable to checkout '$sha1' in submodule path '$prefix$sm_path'" +msgid "" +"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'" msgstr "" -"Không thể checkout “$sha1†trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$prefix$sm_pathâ€" +"Thá»±c hiện không thà nh công lệnh “$command $sha1†trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con " +"“$prefix$sm_pathâ€" -#: git-submodule.sh:804 +#: git-submodule.sh:884 #, sh-format -msgid "Submodule path '$prefix$sm_path': checked out '$sha1'" -msgstr "ÄÆ°á»ng dẫn mô-Ä‘un-con “$prefix$sm_pathâ€: được checkout “$sha1â€" +msgid "Submodule path '$prefix$sm_path': '$command $sha1'" +msgstr "ÄÆ°á»ng dẫn mô-Ä‘un-con “$prefix$sm_pathâ€: “$command $sha1â€" -#: git-submodule.sh:831 +#: git-submodule.sh:889 #, sh-format -msgid "Failed to recurse into submodule path '$prefix$sm_path'" -msgstr "Gặp lá»—i khi đệ quy và o trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$prefix$sm_pathâ€" +msgid "Unable to checkout '$sha1' in submodule path '$displaypath'" +msgstr "Không thể checkout “$sha1†trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€" -#: git-submodule.sh:939 +#: git-submodule.sh:890 +#, sh-format +msgid "Submodule path '$displaypath': checked out '$sha1'" +msgstr "ÄÆ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€: đã checkout “$sha1â€" + +#: git-submodule.sh:917 +#, sh-format +msgid "Failed to recurse into submodule path '$displaypath'" +msgstr "Gặp lá»—i khi đệ quy và o trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$displaypathâ€" + +#: git-submodule.sh:1025 msgid "The --cached option cannot be used with the --files option" msgstr "Tùy chá»n --cached không thể dùng cùng vá»›i tùy chá»n --files" #. unexpected type -#: git-submodule.sh:979 +#: git-submodule.sh:1066 #, sh-format msgid "unexpected mode $mod_dst" msgstr "chế Ä‘á»™ không nhÆ° mong chá» $mod_dst" -#: git-submodule.sh:997 +#: git-submodule.sh:1086 #, sh-format -msgid " Warn: $name doesn't contain commit $sha1_src" -msgstr " Cảnh báo: $name không chứa lần chuyển giao (commit) $sha1_src" +msgid " Warn: $display_name doesn't contain commit $sha1_src" +msgstr "" +" Cảnh báo: $display_name không chứa lần chuyển giao (commit) $sha1_src" -#: git-submodule.sh:1000 +#: git-submodule.sh:1089 #, sh-format -msgid " Warn: $name doesn't contain commit $sha1_dst" -msgstr " Cảnh báo: $name không chứa lần chuyển giao (commit) $sha1_dst" +msgid " Warn: $display_name doesn't contain commit $sha1_dst" +msgstr "" +" Cảnh báo: $display_name không chứa lần chuyển giao (commit) $sha1_dst" -#: git-submodule.sh:1003 +#: git-submodule.sh:1092 #, sh-format -msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst" +msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst" msgstr "" -" Cảnh báo: $name không chứa những lần chuyển giao (commit) $sha1_src và " -"$sha1_dst" +" Cảnh báo: $display_name không chứa những lần chuyển giao (commit) " +"$sha1_src và $sha1_dst" -#: git-submodule.sh:1028 +#: git-submodule.sh:1117 msgid "blob" msgstr "blob" -#: git-submodule.sh:1066 +#: git-submodule.sh:1155 msgid "Submodules changed but not updated:" msgstr "Những mô-Ä‘un-con đã bị thay đổi nhÆ°ng chÆ°a được cáºp nháºt:" -#: git-submodule.sh:1068 +#: git-submodule.sh:1157 msgid "Submodule changes to be committed:" msgstr "Những mô-Ä‘un-con thay đổi đã được chuyển giao (commit):" -#: git-submodule.sh:1153 +#: git-submodule.sh:1242 #, sh-format msgid "Failed to recurse into submodule path '$sm_path'" msgstr "Gặp lá»—i khi đệ quy và o trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$sm_pathâ€" -#: git-submodule.sh:1216 +#: git-submodule.sh:1306 #, sh-format -msgid "Synchronizing submodule url for '$prefix$sm_path'" -msgstr "Url Mô-Ä‘un-con đồng bá»™ hóa cho “$prefix$sm_pathâ€" +msgid "Synchronizing submodule url for '$displaypath'" +msgstr "Url Mô-Ä‘un-con đồng bá»™ hóa cho “$displaypathâ€" + +#~ msgid " (fix conflicts and then run \"git am --resolved\")" +#~ msgstr " (sá»a các xung Ä‘á»™t và sau đó chạy lệnh \"git am --resolved\")" + +#~ msgid " (all conflicts fixed: run \"git commit\")" +#~ msgstr " (khi tất cả các xung Ä‘á»™t đã sá»a xong: chạy lệnh \"git commit\")" + +#~ msgid "more than %d trees given: '%s'" +#~ msgstr "đã chỉ ra nhiá»u hÆ¡n %d cây (tree): “%sâ€" + +#~ msgid "You cannot combine --no-ff with --ff-only." +#~ msgstr "Bạn không thể kết hợp --no-ff vá»›i --ff-only." + +#~ msgid "" +#~ "submodule '%s' (or one of its nested submodules) uses a .git directory\n" +#~ "(use 'rm -rf' if you really want to remove it including all of its " +#~ "history)" +#~ msgstr "" +#~ "mô-Ä‘un-con “%s†(hoặc cái nằm trong các mô-Ä‘un-con) dùng thÆ° mục .git\n" +#~ "(dùng “rm -rf†nếu bạn thá»±c sá»± muốn gỡ bá» nó cùng vá»›i tất cả lịch sá» của " +#~ "chúng)" + +#~ msgid "" +#~ "'%s' has changes staged in the index\n" +#~ "(use --cached to keep the file, or -f to force removal)" +#~ msgstr "" +#~ "“%s†có các thay đổi được lÆ°u trạng thái trong bảng mục lục\n" +#~ "(dùng tùy chá»n --cached để giữ táºp tin, hoặc -f để ép buá»™c gỡ bá»)" + +#~ msgid "show commits where no parent comes before its children" +#~ msgstr "hiển thị các lần chuyển giao nÆ¡i mà cha mẹ đến trÆ°á»›c con của nó" + +#~ msgid "show the HEAD reference" +#~ msgstr "hiển thị tham chiếu của HEAD" + +#~ msgid "Unable to fetch in submodule path '$prefix$sm_path'" +#~ msgstr "" +#~ "Không thể lấy vá» (fetch) trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$prefix$sm_pathâ€" + +#~ msgid "Failed to recurse into submodule path '$prefix$sm_path'" +#~ msgstr "Gặp lá»—i khi đệ quy và o trong Ä‘Æ°á»ng dẫn mô-Ä‘un-con “$prefix$sm_pathâ€" #~ msgid "It took %.2f seconds to enumerate untracked files. 'status -uno'" #~ msgstr "Cần %.2f giây để đếm các táºp tin chÆ°a được theo vết. “status -unoâ€" diff --git a/po/zh_CN.po b/po/zh_CN.po index ba757d9afd..b7b46f14f0 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: Git\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2013-04-30 08:25+0800\n" -"PO-Revision-Date: 2013-04-12 09:23+0800\n" +"POT-Creation-Date: 2013-08-06 14:10+0800\n" +"PO-Revision-Date: 2013-08-06 14:45+0800\n" "Last-Translator: Jiang Xin <worldhello.net@gmail.com>\n" "Language-Team: GitHub <https://github.com/gotgit/git/>\n" "Language: zh_CN\n" @@ -22,7 +22,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: advice.c:53 +#: advice.c:57 #, c-format msgid "hint: %.*s\n" msgstr "æ示:%.*s\n" @@ -31,7 +31,7 @@ msgstr "æ示:%.*s\n" #. * Message used both when 'git commit' fails and when #. * other commands doing a merge do. #. -#: advice.c:83 +#: advice.c:87 msgid "" "Fix them up in the work tree,\n" "and then use 'git add/rm <file>' as\n" @@ -68,7 +68,7 @@ msgstr "æ ¼å¼" msgid "archive format" msgstr "å½’æ¡£æ ¼å¼" -#: archive.c:324 builtin/log.c:1126 +#: archive.c:324 builtin/log.c:1173 msgid "prefix" msgstr "å‰ç¼€" @@ -76,11 +76,11 @@ msgstr "å‰ç¼€" msgid "prepend prefix to each pathname in the archive" msgstr "为归档ä¸æ¯ä¸ªè·¯å¾„ååŠ ä¸Šå‰ç¼€" -#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2371 -#: builtin/blame.c:2372 builtin/config.c:55 builtin/fast-export.c:665 -#: builtin/fast-export.c:667 builtin/grep.c:715 builtin/hash-object.c:77 -#: builtin/ls-files.c:490 builtin/ls-files.c:493 builtin/notes.c:536 -#: builtin/notes.c:693 builtin/read-tree.c:107 parse-options.h:149 +#: archive.c:326 builtin/archive.c:88 builtin/blame.c:2292 +#: builtin/blame.c:2293 builtin/config.c:56 builtin/fast-export.c:673 +#: builtin/fast-export.c:675 builtin/grep.c:714 builtin/hash-object.c:77 +#: builtin/ls-files.c:496 builtin/ls-files.c:499 builtin/notes.c:408 +#: builtin/notes.c:565 builtin/read-tree.c:108 parse-options.h:152 msgid "file" msgstr "文件" @@ -112,7 +112,7 @@ msgstr "压缩效果更好" msgid "list supported archive formats" msgstr "列出支æŒçš„å½’æ¡£æ ¼å¼" -#: archive.c:345 builtin/archive.c:90 builtin/clone.c:86 +#: archive.c:345 builtin/archive.c:90 builtin/clone.c:85 msgid "repo" msgstr "版本库" @@ -120,7 +120,7 @@ msgstr "版本库" msgid "retrieve the archive from remote repository <repo>" msgstr "从远程版本库(<版本库>)æå–归档文件" -#: archive.c:347 builtin/archive.c:92 builtin/notes.c:615 +#: archive.c:347 builtin/archive.c:92 builtin/notes.c:487 msgid "command" msgstr "命令" @@ -205,17 +205,17 @@ msgstr "一个分支å '%s' å·²ç»å˜åœ¨ã€‚" msgid "Cannot force update the current branch." msgstr "æ— æ³•å¼ºåˆ¶æ›´æ–°å½“å‰åˆ†æ”¯ã€‚" -#: branch.c:201 +#: branch.c:216 #, c-format msgid "Cannot setup tracking information; starting point '%s' is not a branch." msgstr "æ— æ³•è®¾ç½®è·Ÿè¸ªä¿¡æ¯ï¼›èµ·å§‹ç‚¹ '%s' ä¸æ˜¯ä¸€ä¸ªåˆ†æ”¯ã€‚" -#: branch.c:203 +#: branch.c:218 #, c-format msgid "the requested upstream branch '%s' does not exist" msgstr "请求的上游分支 '%s' ä¸å˜åœ¨" -#: branch.c:205 +#: branch.c:220 msgid "" "\n" "If you are planning on basing your work on an upstream\n" @@ -233,26 +233,26 @@ msgstr "" "如果您æ£è®¡åˆ’推é€ä¸€ä¸ªèƒ½ä¸Žå¯¹åº”远程分支建立跟踪的新的本地分支,\n" "您å¯èƒ½éœ€è¦ä½¿ç”¨ \"git push -u\" 推é€åˆ†æ”¯å¹¶é…置和上游的关è”。" -#: branch.c:250 +#: branch.c:265 #, c-format msgid "Not a valid object name: '%s'." msgstr "ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„对象å:'%s'。" -#: branch.c:270 +#: branch.c:285 #, c-format msgid "Ambiguous object name: '%s'." msgstr "æ§ä¹‰çš„对象å:'%s'。" -#: branch.c:275 +#: branch.c:290 #, c-format msgid "Not a valid branch point: '%s'." msgstr "æ— æ•ˆçš„åˆ†æ”¯ç‚¹ï¼š'%s'。" -#: branch.c:281 +#: branch.c:296 msgid "Failed to lock ref for update" msgstr "æ— æ³•ä¸ºæ›´æ–°é”定引用" -#: branch.c:299 +#: branch.c:314 msgid "Failed to write ref" msgstr "ä¸èƒ½å†™å¼•ç”¨" @@ -266,7 +266,7 @@ msgstr "'%s' ä¸åƒæ˜¯ä¸€ä¸ª v2 版本的包文件" msgid "unrecognized header: %s%s (%d)" msgstr "未能识别的包头:%s%s (%d)" -#: bundle.c:89 builtin/commit.c:676 +#: bundle.c:89 builtin/commit.c:697 #, c-format msgid "could not open '%s'" msgstr "ä¸èƒ½æ‰“å¼€ '%s'" @@ -275,9 +275,9 @@ msgstr "ä¸èƒ½æ‰“å¼€ '%s'" msgid "Repository lacks these prerequisite commits:" msgstr "版本库缺少这些必备的æ交:" -#: bundle.c:164 sequencer.c:651 sequencer.c:1101 builtin/log.c:300 -#: builtin/log.c:770 builtin/log.c:1344 builtin/log.c:1570 builtin/merge.c:349 -#: builtin/shortlog.c:155 +#: bundle.c:164 sequencer.c:661 sequencer.c:1111 builtin/log.c:331 +#: builtin/log.c:801 builtin/log.c:1399 builtin/log.c:1625 builtin/merge.c:364 +#: builtin/shortlog.c:156 msgid "revision walk setup failed" msgstr "版本é历设置失败" @@ -303,7 +303,7 @@ msgstr[1] "è¿™ä¸ªåŒ…éœ€è¦ %d 个引用:" msgid "rev-list died" msgstr "rev-list 终æ¢" -#: bundle.c:300 builtin/log.c:1255 builtin/shortlog.c:258 +#: bundle.c:300 builtin/log.c:1310 builtin/shortlog.c:259 #, c-format msgid "unrecognized argument: %s" msgstr "未能识别的å‚数:%s" @@ -334,12 +334,12 @@ msgstr "ä¸èƒ½åˆ›å»º '%s'" msgid "index-pack died" msgstr "index-pack 终æ¢" -#: commit.c:50 +#: commit.c:53 #, c-format msgid "could not parse %s" msgstr "ä¸èƒ½è§£æž %s" -#: commit.c:52 +#: commit.c:55 #, c-format msgid "%s %s is not a commit!" msgstr "%s %s ä¸æ˜¯ä¸€ä¸ªæ交!" @@ -348,16 +348,16 @@ msgstr "%s %s ä¸æ˜¯ä¸€ä¸ªæ交!" msgid "memory exhausted" msgstr "内å˜è€—å°½" -#: connected.c:39 +#: connected.c:60 msgid "Could not run 'git rev-list'" msgstr "ä¸èƒ½æ‰§è¡Œ 'git rev-list'" -#: connected.c:48 +#: connected.c:80 #, c-format msgid "failed write to rev-list: %s" msgstr "æ— æ³•å†™å…¥ rev-list:%s" -#: connected.c:56 +#: connected.c:88 #, c-format msgid "failed to close rev-list's stdin: %s" msgstr "æ— æ³•å…³é— rev-list çš„æ ‡å‡†è¾“å…¥ï¼š%s" @@ -455,7 +455,7 @@ msgstr "" "å‘现é…ç½®å˜é‡ 'diff.dirstat' ä¸çš„错误:\n" "%s" -#: diff.c:3481 +#: diff.c:3487 #, c-format msgid "" "Failed to parse --dirstat/-X option parameter:\n" @@ -464,7 +464,7 @@ msgstr "" "æ— æ³•è§£æž --dirstat/-X 选项的å‚数:\n" "%s" -#: diff.c:3495 +#: diff.c:3501 #, c-format msgid "Failed to parse --submodule option parameter: '%s'" msgstr "æ— æ³•è§£æž --submodule 选项的å‚数:'%s'" @@ -506,20 +506,20 @@ msgstr "'%s':%s" msgid "'%s': short read %s" msgstr "'%s':读å–ä¸å®Œæ•´ %s" -#: help.c:212 +#: help.c:210 #, c-format msgid "available git commands in '%s'" msgstr "在 '%s' 下å¯ç”¨çš„ git 命令" -#: help.c:219 +#: help.c:217 msgid "git commands available from elsewhere on your $PATH" msgstr "在 $PATH 路径ä¸çš„其他地方å¯ç”¨çš„ git 命令" -#: help.c:235 +#: help.c:233 msgid "The most commonly used git commands are:" msgstr "最常用的 git 命令有:" -#: help.c:292 +#: help.c:290 #, c-format msgid "" "'%s' appears to be a git command, but we were not\n" @@ -528,11 +528,11 @@ msgstr "" "'%s' åƒæ˜¯ä¸€ä¸ª git 命令,但å´æ— 法è¿è¡Œã€‚\n" "å¯èƒ½æ˜¯ git-%s å—æŸï¼Ÿ" -#: help.c:349 +#: help.c:347 msgid "Uh oh. Your system reports no Git commands at all." msgstr "唉呀,您的系统ä¸æœªå‘现 Git 命令。" -#: help.c:371 +#: help.c:369 #, c-format msgid "" "WARNING: You called a Git command named '%s', which does not exist.\n" @@ -541,17 +541,17 @@ msgstr "" "è¦å‘Šï¼šæ‚¨è¿è¡Œä¸€ä¸ªä¸å˜åœ¨çš„ Git 命令 '%s'。继ç»æ‰§è¡Œå‡å®šæ‚¨è¦è¦è¿è¡Œçš„\n" "是 '%s'" -#: help.c:376 +#: help.c:374 #, c-format msgid "in %0.1f seconds automatically..." msgstr "在 %0.1f 秒钟åŽè‡ªåŠ¨è¿è¡Œ..." -#: help.c:383 +#: help.c:381 #, c-format msgid "git: '%s' is not a git command. See 'git --help'." msgstr "git:'%s' ä¸æ˜¯ä¸€ä¸ª git 命令。å‚è§ 'git --help'。" -#: help.c:387 +#: help.c:385 help.c:444 msgid "" "\n" "Did you mean this?" @@ -565,12 +565,17 @@ msgstr[1] "" "\n" "您指的是这其ä¸çš„æŸä¸€ä¸ªä¹ˆï¼Ÿ" +#: help.c:440 +#, c-format +msgid "%s: %s - %s" +msgstr "%s:%s - %s" + #: merge.c:56 msgid "failed to read the cache" msgstr "æ— æ³•è¯»å–缓å˜" #: merge.c:110 builtin/checkout.c:365 builtin/checkout.c:566 -#: builtin/clone.c:645 +#: builtin/clone.c:656 msgid "unable to write new index file" msgstr "æ— æ³•å†™æ–°çš„ç´¢å¼•æ–‡ä»¶" @@ -584,70 +589,70 @@ msgstr "(åæ交)\n" msgid "addinfo_cache failed for path '%s'" msgstr "为路径 '%s' addinfo_cache 失败" -#: merge-recursive.c:268 +#: merge-recursive.c:269 msgid "error building trees" msgstr "æ— æ³•åˆ›å»ºæ ‘" -#: merge-recursive.c:672 +#: merge-recursive.c:673 #, c-format msgid "failed to create path '%s'%s" msgstr "æ— æ³•åˆ›å»ºè·¯å¾„ '%s'%s" -#: merge-recursive.c:683 +#: merge-recursive.c:684 #, c-format msgid "Removing %s to make room for subdirectory\n" msgstr "åˆ é™¤ %s 以便为å目录留出空间\n" #. something else exists #. .. but not some other error (who really cares what?) -#: merge-recursive.c:697 merge-recursive.c:718 +#: merge-recursive.c:698 merge-recursive.c:719 msgid ": perhaps a D/F conflict?" msgstr ":å¯èƒ½æ˜¯ä¸€ä¸ªç›®å½•/文件冲çªï¼Ÿ" -#: merge-recursive.c:708 +#: merge-recursive.c:709 #, c-format msgid "refusing to lose untracked file at '%s'" msgstr "æ‹’ç»ä¸¢å¼ƒ '%s' ä¸çš„未跟踪文件" -#: merge-recursive.c:748 +#: merge-recursive.c:749 #, c-format msgid "cannot read object %s '%s'" msgstr "ä¸èƒ½è¯»å–对象 %s '%s'" -#: merge-recursive.c:750 +#: merge-recursive.c:751 #, c-format msgid "blob expected for %s '%s'" msgstr "%s '%s' 应为数æ®ï¼ˆblob)对象" -#: merge-recursive.c:773 builtin/clone.c:313 +#: merge-recursive.c:774 builtin/clone.c:312 #, c-format msgid "failed to open '%s'" msgstr "æ— æ³•æ‰“å¼€ '%s'" -#: merge-recursive.c:781 +#: merge-recursive.c:782 #, c-format msgid "failed to symlink '%s'" msgstr "æ— æ³•åˆ›å»ºç¬¦å·é“¾æŽ¥ '%s'" -#: merge-recursive.c:784 +#: merge-recursive.c:785 #, c-format msgid "do not know what to do with %06o %s '%s'" msgstr "ä¸çŸ¥é“å¦‚ä½•å¤„ç† %06o %s '%s'" -#: merge-recursive.c:922 +#: merge-recursive.c:923 msgid "Failed to execute internal merge" msgstr "æ— æ³•æ‰§è¡Œå†…éƒ¨åˆå¹¶" -#: merge-recursive.c:926 +#: merge-recursive.c:927 #, c-format msgid "Unable to add %s to database" msgstr "ä¸èƒ½æ·»åŠ %s 至对象库" -#: merge-recursive.c:942 +#: merge-recursive.c:943 msgid "unsupported object type in the tree" msgstr "åœ¨æ ‘ä¸æœ‰ä¸æ”¯æŒçš„对象类型" -#: merge-recursive.c:1021 merge-recursive.c:1035 +#: merge-recursive.c:1022 merge-recursive.c:1036 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " @@ -656,7 +661,7 @@ msgstr "" "冲çªï¼ˆ%1$s/åˆ é™¤ï¼‰ï¼š%2$s 在 %3$s ä¸è¢«åˆ 除,在 %5$s ä¸è¢« %4$s。%7$s 在 %6$s ä¸" "的版本被ä¿ç•™ã€‚" -#: merge-recursive.c:1027 merge-recursive.c:1040 +#: merge-recursive.c:1028 merge-recursive.c:1041 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " @@ -665,20 +670,20 @@ msgstr "" "冲çªï¼ˆ%1$s/åˆ é™¤ï¼‰ï¼š%2$s 在 %3$s ä¸è¢«åˆ 除,在 %5$s ä¸è¢« %4$s。%7$s 在 %6$s ä¸" "的版本ä¿ç•™äºŽ %8$s ä¸ã€‚" -#: merge-recursive.c:1081 +#: merge-recursive.c:1082 msgid "rename" msgstr "é‡å‘½å" -#: merge-recursive.c:1081 +#: merge-recursive.c:1082 msgid "renamed" msgstr "é‡å‘½å" -#: merge-recursive.c:1137 +#: merge-recursive.c:1138 #, c-format msgid "%s is a directory in %s adding as %s instead" msgstr "%s 是 %s ä¸çš„一个目录而以 %s 为åè¢«æ·»åŠ " -#: merge-recursive.c:1159 +#: merge-recursive.c:1160 #, c-format msgid "" "CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s" @@ -687,148 +692,169 @@ msgstr "" "冲çªï¼ˆé‡å‘½å/é‡å‘½å):在分支 \"%3$s\" ä¸é‡å‘½å \"%1$s\"->\"%2$s\",在分支 " "\"%6$s\" ä¸é‡å‘½å \"%4$s\"->\"%5$s\"%7$s" -#: merge-recursive.c:1164 +#: merge-recursive.c:1165 msgid " (left unresolved)" msgstr "(留下未解决)" -#: merge-recursive.c:1218 +#: merge-recursive.c:1219 #, c-format msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s" msgstr "" "冲çªï¼ˆé‡å‘½å/é‡å‘½å):在 %3$s ä¸é‡å‘½å %1$s->%2$s,在 %6$s ä¸é‡å‘½å %4$s->" "%5$s" -#: merge-recursive.c:1248 +#: merge-recursive.c:1249 #, c-format msgid "Renaming %s to %s and %s to %s instead" msgstr "而是é‡å‘½å %s 至 %sï¼Œä»¥åŠ %s 至 %s" -#: merge-recursive.c:1447 +#: merge-recursive.c:1448 #, c-format msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s" msgstr "冲çªï¼ˆé‡å‘½å/æ·»åŠ ï¼‰ï¼šåœ¨ %3$s ä¸é‡å‘½å %1$s->%2$s。在 %5$s ä¸æ·»åŠ %4$s" -#: merge-recursive.c:1457 +#: merge-recursive.c:1458 #, c-format msgid "Adding merged %s" msgstr "æ·»åŠ åˆå¹¶åŽçš„ %s" -#: merge-recursive.c:1462 merge-recursive.c:1660 +#: merge-recursive.c:1463 merge-recursive.c:1661 #, c-format msgid "Adding as %s instead" msgstr "而是以 %s 为åæ·»åŠ " -#: merge-recursive.c:1513 +#: merge-recursive.c:1514 #, c-format msgid "cannot read object %s" msgstr "ä¸èƒ½è¯»å–对象 %s" -#: merge-recursive.c:1516 +#: merge-recursive.c:1517 #, c-format msgid "object %s is not a blob" msgstr "对象 %s ä¸æ˜¯ä¸€ä¸ªæ•°æ®ï¼ˆblob)对象" -#: merge-recursive.c:1564 +#: merge-recursive.c:1565 msgid "modify" msgstr "修改" -#: merge-recursive.c:1564 +#: merge-recursive.c:1565 msgid "modified" msgstr "修改" -#: merge-recursive.c:1574 +#: merge-recursive.c:1575 msgid "content" msgstr "内容" -#: merge-recursive.c:1581 +#: merge-recursive.c:1582 msgid "add/add" msgstr "æ·»åŠ /æ·»åŠ " -#: merge-recursive.c:1615 +#: merge-recursive.c:1616 #, c-format msgid "Skipped %s (merged same as existing)" msgstr "略过 %s(已ç»åšè¿‡ç›¸åŒåˆå¹¶ï¼‰" -#: merge-recursive.c:1629 +#: merge-recursive.c:1630 #, c-format msgid "Auto-merging %s" msgstr "自动åˆå¹¶ %s" -#: merge-recursive.c:1633 git-submodule.sh:1029 +#: merge-recursive.c:1634 git-submodule.sh:1118 msgid "submodule" msgstr "å模组" -#: merge-recursive.c:1634 +#: merge-recursive.c:1635 #, c-format msgid "CONFLICT (%s): Merge conflict in %s" msgstr "冲çªï¼ˆ%s):åˆå¹¶å†²çªäºŽ %s" -#: merge-recursive.c:1724 +#: merge-recursive.c:1725 #, c-format msgid "Removing %s" msgstr "åˆ é™¤ %s" -#: merge-recursive.c:1749 +#: merge-recursive.c:1750 msgid "file/directory" msgstr "文件/目录" -#: merge-recursive.c:1755 +#: merge-recursive.c:1756 msgid "directory/file" msgstr "目录/文件" -#: merge-recursive.c:1760 +#: merge-recursive.c:1761 #, c-format msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s" msgstr "冲çªï¼ˆ%1$s):在 %3$s ä¸æœ‰ä¸€ä¸ªå为 %2$s 的目录。以 %5$s 为åæ·»åŠ %4$s" -#: merge-recursive.c:1770 +#: merge-recursive.c:1771 #, c-format msgid "Adding %s" msgstr "æ·»åŠ %s" -#: merge-recursive.c:1787 +#: merge-recursive.c:1788 msgid "Fatal merge failure, shouldn't happen." msgstr "严é‡çš„åˆå¹¶é”™è¯¯ï¼Œä¸åº”å‘生。" -#: merge-recursive.c:1806 +#: merge-recursive.c:1807 msgid "Already up-to-date!" msgstr "å·²ç»æ˜¯æœ€æ–°çš„ï¼" -#: merge-recursive.c:1815 +#: merge-recursive.c:1816 #, c-format msgid "merging of trees %s and %s failed" msgstr "æ— æ³•åˆå¹¶æ ‘ %s å’Œ %s" -#: merge-recursive.c:1845 +#: merge-recursive.c:1846 #, c-format msgid "Unprocessed path??? %s" msgstr "未处ç†çš„路径??? %s" -#: merge-recursive.c:1890 +#: merge-recursive.c:1891 msgid "Merging:" msgstr "åˆå¹¶ï¼š" -#: merge-recursive.c:1903 +#: merge-recursive.c:1904 #, c-format msgid "found %u common ancestor:" msgid_plural "found %u common ancestors:" msgstr[0] "å‘现 %u 个共åŒç¥–先:" msgstr[1] "å‘现 %u 个共åŒç¥–先:" -#: merge-recursive.c:1940 +#: merge-recursive.c:1941 msgid "merge returned no commit" msgstr "åˆå¹¶æœªè¿”回æ交" -#: merge-recursive.c:1997 +#: merge-recursive.c:1998 #, c-format msgid "Could not parse object '%s'" msgstr "ä¸èƒ½è§£æžå¯¹è±¡ '%s'" -#: merge-recursive.c:2009 builtin/merge.c:658 +#: merge-recursive.c:2010 builtin/merge.c:672 msgid "Unable to write index." msgstr "ä¸èƒ½å†™å…¥ç´¢å¼•ã€‚" -#: object.c:195 +#: notes-utils.c:40 +msgid "Cannot commit uninitialized/unreferenced notes tree" +msgstr "ä¸èƒ½æ交未åˆå§‹åŒ–/æœªå¼•ç”¨çš„æ³¨è§£æ ‘" + +#: notes-utils.c:81 +#, c-format +msgid "Bad notes.rewriteMode value: '%s'" +msgstr "åçš„ notes.rewriteMode 值:'%s'" + +#: notes-utils.c:91 +#, c-format +msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" +msgstr "æ‹’ç»å‘ %s(在 refs/notes/ 之外)写入注解" + +#. TRANSLATORS: The first %s is the name of the +#. environment variable, the second %s is its value +#: notes-utils.c:118 +#, c-format +msgid "Bad %s value: '%s'" +msgstr "åçš„ %s 值:'%s'" + +#: object.c:204 #, c-format msgid "unable to parse object: %s" msgstr "ä¸èƒ½è§£æžå¯¹è±¡ï¼š%s" @@ -869,18 +895,18 @@ msgstr "路径 '%s' 属于模组 '%.*s'" msgid "'%s' is beyond a symbolic link" msgstr "'%s' ä½äºŽç¬¦å·é“¾æŽ¥ä¸" -#: remote.c:1781 +#: remote.c:1788 #, c-format msgid "Your branch is ahead of '%s' by %d commit.\n" msgid_plural "Your branch is ahead of '%s' by %d commits.\n" msgstr[0] "您的分支领先 '%s' å…± %d 个æ交。\n" msgstr[1] "您的分支领先 '%s' å…± %d 个æ交。\n" -#: remote.c:1787 +#: remote.c:1794 msgid " (use \"git push\" to publish your local commits)\n" msgstr " (使用 \"git push\" æ¥å‘布您的本地æ交)\n" -#: remote.c:1790 +#: remote.c:1797 #, c-format msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n" msgid_plural "" @@ -889,11 +915,11 @@ msgstr[0] "您的分支è½åŽ '%s' å…± %d 个æ交,并且å¯ä»¥å¿«è¿›ã€‚\n" msgstr[1] "您的分支è½åŽ '%s' å…± %d 个æ交,并且å¯ä»¥å¿«è¿›ã€‚\n" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: remote.c:1798 +#: remote.c:1805 msgid " (use \"git pull\" to update your local branch)\n" msgstr " (使用 \"git pull\" æ¥æ›´æ–°æ‚¨çš„本地分支)\n" -#: remote.c:1801 +#: remote.c:1808 #, c-format msgid "" "Your branch and '%s' have diverged,\n" @@ -909,18 +935,27 @@ msgstr[1] "" "并且分别有 %d å’Œ %d 处ä¸åŒçš„æ交。\n" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: remote.c:1811 +#: remote.c:1818 msgid " (use \"git pull\" to merge the remote branch into yours)\n" msgstr " (使用 \"git pull\" æ¥åˆå¹¶è¿œç¨‹åˆ†æ”¯ï¼‰\n" -#: sequencer.c:206 builtin/merge.c:776 builtin/merge.c:889 builtin/merge.c:999 -#: builtin/merge.c:1009 +#: run-command.c:80 +msgid "open /dev/null failed" +msgstr "ä¸èƒ½æ‰“å¼€ /dev/null" + +#: run-command.c:82 +#, c-format +msgid "dup2(%d,%d) failed" +msgstr "ä¸èƒ½è°ƒç”¨ dup2(%d,%d)" + +#: sequencer.c:206 builtin/merge.c:790 builtin/merge.c:903 +#: builtin/merge.c:1013 builtin/merge.c:1023 #, c-format msgid "Could not open '%s' for writing" msgstr "ä¸èƒ½ä¸ºå†™å…¥æ‰“å¼€ '%s'" -#: sequencer.c:208 builtin/merge.c:335 builtin/merge.c:779 -#: builtin/merge.c:1001 builtin/merge.c:1014 +#: sequencer.c:208 builtin/merge.c:350 builtin/merge.c:793 +#: builtin/merge.c:1015 builtin/merge.c:1028 #, c-format msgid "Could not write to '%s'" msgstr "ä¸èƒ½å†™å…¥ '%s'" @@ -942,7 +977,7 @@ msgstr "" "冲çªè§£å†³å®Œæ¯•åŽï¼Œç”¨ 'git add <paths>' 或 'git rm <paths>'\n" "对修æ£åŽçš„文件åšæ ‡è®°ï¼Œç„¶åŽç”¨ 'git commit' æ交" -#: sequencer.c:245 sequencer.c:859 sequencer.c:942 +#: sequencer.c:245 sequencer.c:869 sequencer.c:952 #, c-format msgid "Could not write to %s" msgstr "ä¸èƒ½å†™å…¥ %s" @@ -965,215 +1000,236 @@ msgid "Commit your changes or stash them to proceed." msgstr "æ交您的修改或ä¿å˜è¿›åº¦åŽå†ç»§ç»ã€‚" #. TRANSLATORS: %s will be "revert" or "cherry-pick" -#: sequencer.c:319 +#: sequencer.c:324 #, c-format msgid "%s: Unable to write new index file" msgstr "%sï¼šæ— æ³•å†™å…¥æ–°ç´¢å¼•æ–‡ä»¶" -#: sequencer.c:350 +#: sequencer.c:355 msgid "Could not resolve HEAD commit\n" msgstr "ä¸èƒ½è§£æž HEAD æ交\n" -#: sequencer.c:371 +#: sequencer.c:377 msgid "Unable to update cache tree\n" msgstr "ä¸èƒ½æ›´æ–°ç¼“å˜\n" -#: sequencer.c:416 +#: sequencer.c:422 #, c-format msgid "Could not parse commit %s\n" msgstr "ä¸èƒ½è§£æžæ交 %s\n" -#: sequencer.c:421 +#: sequencer.c:427 #, c-format msgid "Could not parse parent commit %s\n" msgstr "ä¸èƒ½è§£æžçˆ¶æ交 %s\n" -#: sequencer.c:487 +#: sequencer.c:493 msgid "Your index file is unmerged." msgstr "您的索引文件未完æˆåˆå¹¶ã€‚" -#: sequencer.c:506 +#: sequencer.c:512 #, c-format msgid "Commit %s is a merge but no -m option was given." msgstr "æ交 %s 是一个åˆå¹¶æ交但未æä¾› -m 选项。" -#: sequencer.c:514 +#: sequencer.c:520 #, c-format msgid "Commit %s does not have parent %d" msgstr "æ交 %s 没有父æ交 %d" -#: sequencer.c:518 +#: sequencer.c:524 #, c-format msgid "Mainline was specified but commit %s is not a merge." msgstr "指定了主线但æ交 %s ä¸æ˜¯ä¸€ä¸ªåˆå¹¶ã€‚" #. TRANSLATORS: The first %s will be "revert" or #. "cherry-pick", the second %s a SHA1 -#: sequencer.c:531 +#: sequencer.c:537 #, c-format msgid "%s: cannot parse parent commit %s" msgstr "%s:ä¸èƒ½è§£æžçˆ¶æ交 %s" -#: sequencer.c:535 +#: sequencer.c:541 #, c-format msgid "Cannot get commit message for %s" msgstr "ä¸èƒ½å¾—到 %s çš„æ交说明" -#: sequencer.c:621 +#: sequencer.c:627 #, c-format msgid "could not revert %s... %s" msgstr "ä¸èƒ½è¿˜åŽŸ %s... %s" -#: sequencer.c:622 +#: sequencer.c:628 #, c-format msgid "could not apply %s... %s" msgstr "ä¸èƒ½åº”用 %s... %s" -#: sequencer.c:654 +#: sequencer.c:664 msgid "empty commit set passed" msgstr "æ供了空的æ交集" -#: sequencer.c:662 +#: sequencer.c:672 #, c-format msgid "git %s: failed to read the index" msgstr "git %sï¼šæ— æ³•è¯»å–索引" -#: sequencer.c:667 +#: sequencer.c:677 #, c-format msgid "git %s: failed to refresh the index" msgstr "git %sï¼šæ— æ³•åˆ·æ–°ç´¢å¼•" -#: sequencer.c:725 +#: sequencer.c:735 #, c-format msgid "Cannot %s during a %s" msgstr "æ— æ³• %s 在一个 %s 过程ä¸" -#: sequencer.c:747 +#: sequencer.c:757 #, c-format msgid "Could not parse line %d." msgstr "ä¸èƒ½è§£æžç¬¬ %d 行。" -#: sequencer.c:752 +#: sequencer.c:762 msgid "No commits parsed." msgstr "没有æ交被解æžã€‚" -#: sequencer.c:765 +#: sequencer.c:775 #, c-format msgid "Could not open %s" msgstr "ä¸èƒ½æ‰“å¼€ %s" -#: sequencer.c:769 +#: sequencer.c:779 #, c-format msgid "Could not read %s." msgstr "ä¸èƒ½è¯»å– %s。" -#: sequencer.c:776 +#: sequencer.c:786 #, c-format msgid "Unusable instruction sheet: %s" msgstr "æ— ç”¨çš„æŒ‡ä»¤è¡¨å•ï¼š%s" -#: sequencer.c:804 +#: sequencer.c:814 #, c-format msgid "Invalid key: %s" msgstr "æ— æ•ˆé”®å:%s" -#: sequencer.c:807 +#: sequencer.c:817 #, c-format msgid "Invalid value for %s: %s" msgstr "%s çš„å€¼æ— æ•ˆï¼š%s" -#: sequencer.c:819 +#: sequencer.c:829 #, c-format msgid "Malformed options sheet: %s" msgstr "éžæ³•çš„选项表å•ï¼š%s" -#: sequencer.c:840 +#: sequencer.c:850 msgid "a cherry-pick or revert is already in progress" msgstr "一个拣选或还原æ“作已在进行" -#: sequencer.c:841 +#: sequencer.c:851 msgid "try \"git cherry-pick (--continue | --quit | --abort)\"" msgstr "å°è¯• \"git cherry-pick (--continue | --quit | --abort)\"" -#: sequencer.c:845 +#: sequencer.c:855 #, c-format msgid "Could not create sequencer directory %s" msgstr "ä¸èƒ½åˆ›å»ºåºåˆ—目录 %s" -#: sequencer.c:861 sequencer.c:946 +#: sequencer.c:871 sequencer.c:956 #, c-format msgid "Error wrapping up %s." msgstr "错误收尾 %s。" -#: sequencer.c:880 sequencer.c:1014 +#: sequencer.c:890 sequencer.c:1024 msgid "no cherry-pick or revert in progress" msgstr "拣选或还原æ“作并未进行" -#: sequencer.c:882 +#: sequencer.c:892 msgid "cannot resolve HEAD" msgstr "ä¸èƒ½è§£æž HEAD" -#: sequencer.c:884 +#: sequencer.c:894 msgid "cannot abort from a branch yet to be born" msgstr "ä¸èƒ½ä»Žå°šæœªå»ºç«‹çš„分支终æ¢" -#: sequencer.c:906 builtin/apply.c:4060 +#: sequencer.c:916 builtin/apply.c:4061 #, c-format msgid "cannot open %s: %s" msgstr "ä¸èƒ½æ‰“å¼€ %s:%s" -#: sequencer.c:909 +#: sequencer.c:919 #, c-format msgid "cannot read %s: %s" msgstr "ä¸èƒ½è¯»å– %s:%s" -#: sequencer.c:910 +#: sequencer.c:920 msgid "unexpected end of file" msgstr "æ„外的文件结æŸ" -#: sequencer.c:916 +#: sequencer.c:926 #, c-format msgid "stored pre-cherry-pick HEAD file '%s' is corrupt" msgstr "ä¿å˜æ‹£é€‰æ交å‰çš„ HEAD 文件 '%s' æŸå" -#: sequencer.c:939 +#: sequencer.c:949 #, c-format msgid "Could not format %s." msgstr "ä¸èƒ½æ ¼å¼åŒ– %s。" -#: sequencer.c:1083 +#: sequencer.c:1092 #, c-format msgid "%s: can't cherry-pick a %s" msgstr "%s:ä¸èƒ½æ‹£é€‰ä¸€ä¸ª%s" -#: sequencer.c:1085 +#: sequencer.c:1095 #, c-format msgid "%s: bad revision" msgstr "%s:错误的版本" -#: sequencer.c:1119 +#: sequencer.c:1129 msgid "Can't revert as initial commit" msgstr "ä¸èƒ½ä½œä¸ºåˆå§‹æ交还原" -#: sequencer.c:1120 +#: sequencer.c:1130 msgid "Can't cherry-pick into empty head" msgstr "ä¸èƒ½æ‹£é€‰åˆ°ç©ºåˆ†æ”¯" -#: sha1_name.c:1036 +#: sha1_name.c:440 +msgid "" +"Git normally never creates a ref that ends with 40 hex characters\n" +"because it will be ignored when you just specify 40-hex. These refs\n" +"may be created by mistake. For example,\n" +"\n" +" git checkout -b $br $(git rev-parse ...)\n" +"\n" +"where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" +"examine these refs and maybe delete them. Turn this message off by\n" +"running \"git config advice.objectNameWarning false\"" +msgstr "" +"Git 通常ä¸ä¼šåˆ›å»ºä¸€ä¸ªä»¥40ä½åå…进制å—符命åçš„å¼•ç”¨ï¼Œå› ä¸ºå½“ä½ æä¾›40ä½\n" +"åå…进制å—符时将被忽略。ä¸è¿‡è¿™äº›å¼•ç”¨ä¹Ÿå¯èƒ½è¢«é”™è¯¯åœ°åˆ›å»ºã€‚例如:\n" +"\n" +" git checkout -b $br $(git rev-parse ...)\n" +"\n" +"当 \"$br\" 空白时一个40ä½åå…进制的引用将被创建。请检查这些引用,\n" +"å¯èƒ½éœ€è¦åˆ 除它们。用 \"git config advice.objectNameWarning false\"\n" +"命令关é—本消æ¯é€šçŸ¥ã€‚" + +#: sha1_name.c:1097 msgid "HEAD does not point to a branch" msgstr "HEAD 没有指å‘一个分支" -#: sha1_name.c:1039 +#: sha1_name.c:1100 #, c-format msgid "No such branch: '%s'" msgstr "没有æ¤åˆ†æ”¯ï¼š'%s'" -#: sha1_name.c:1041 +#: sha1_name.c:1102 #, c-format msgid "No upstream configured for branch '%s'" msgstr "尚未给分支 '%s' 设置上游" -#: sha1_name.c:1044 +#: sha1_name.c:1106 #, c-format msgid "Upstream branch '%s' not stored as a remote-tracking branch" msgstr "上游分支 '%s' 没有å˜å‚¨ä¸ºä¸€ä¸ªè¿œç¨‹è·Ÿè¸ªåˆ†æ”¯" @@ -1183,181 +1239,181 @@ msgstr "上游分支 '%s' 没有å˜å‚¨ä¸ºä¸€ä¸ªè¿œç¨‹è·Ÿè¸ªåˆ†æ”¯" msgid "unable to access '%s': %s" msgstr "ä¸èƒ½è®¿é—® '%s':%s" -#: wrapper.c:423 +#: wrapper.c:429 #, c-format msgid "unable to access '%s'" msgstr "ä¸èƒ½è®¿é—® '%s'" -#: wrapper.c:434 +#: wrapper.c:440 #, c-format msgid "unable to look up current user in the passwd file: %s" msgstr "æ— æ³•åœ¨å£ä»¤æ–‡ä»¶ä¸æŸ¥è¯¢åˆ°å½“å‰ç”¨æˆ·ï¼š%s" -#: wrapper.c:435 +#: wrapper.c:441 msgid "no such user" msgstr "æ— æ¤ç”¨æˆ·" -#: wt-status.c:140 +#: wt-status.c:141 msgid "Unmerged paths:" msgstr "未åˆå¹¶çš„路径:" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: wt-status.c:167 wt-status.c:194 +#: wt-status.c:168 wt-status.c:195 #, c-format msgid " (use \"git reset %s <file>...\" to unstage)" msgstr " (使用 \"git reset %s <file>...\" 撤出暂å˜åŒºï¼‰" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: wt-status.c:169 wt-status.c:196 +#: wt-status.c:170 wt-status.c:197 msgid " (use \"git rm --cached <file>...\" to unstage)" msgstr " (使用 \"git rm --cached <file>...\" 撤出暂å˜åŒºï¼‰" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: wt-status.c:173 +#: wt-status.c:174 msgid " (use \"git add <file>...\" to mark resolution)" msgstr " (使用 \"git add <file>...\" æ ‡è®°è§£å†³æ–¹æ¡ˆï¼‰" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: wt-status.c:175 wt-status.c:179 +#: wt-status.c:176 wt-status.c:180 msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)" msgstr " (酌情使用 \"git add/rm <file>...\" æ ‡è®°è§£å†³æ–¹æ¡ˆï¼‰" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: wt-status.c:177 +#: wt-status.c:178 msgid " (use \"git rm <file>...\" to mark resolution)" msgstr " (使用 \"git rm <file>...\" æ ‡è®°è§£å†³æ–¹æ¡ˆï¼‰" -#: wt-status.c:188 +#: wt-status.c:189 msgid "Changes to be committed:" msgstr "è¦æ交的å˜æ›´ï¼š" -#: wt-status.c:206 +#: wt-status.c:207 msgid "Changes not staged for commit:" msgstr "尚未暂å˜ä»¥å¤‡æ交的å˜æ›´ï¼š" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: wt-status.c:210 +#: wt-status.c:211 msgid " (use \"git add <file>...\" to update what will be committed)" msgstr " (使用 \"git add <file>...\" æ›´æ–°è¦æ交的内容)" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: wt-status.c:212 +#: wt-status.c:213 msgid " (use \"git add/rm <file>...\" to update what will be committed)" msgstr " (使用 \"git add/rm <file>...\" æ›´æ–°è¦æ交的内容)" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: wt-status.c:213 +#: wt-status.c:214 msgid "" " (use \"git checkout -- <file>...\" to discard changes in working directory)" msgstr " (使用 \"git checkout -- <file>...\" 丢弃工作区的改动)" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: wt-status.c:215 +#: wt-status.c:216 msgid " (commit or discard the untracked or modified content in submodules)" msgstr " (æ交或丢弃å模组ä¸æœªè·Ÿè¸ªæˆ–修改的内容)" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: wt-status.c:227 +#: wt-status.c:228 #, c-format msgid " (use \"git %s <file>...\" to include in what will be committed)" msgstr " (使用 \"git %s <file>...\" 以包å«è¦æ交的内容)" -#: wt-status.c:244 +#: wt-status.c:245 msgid "bug" msgstr "bug" -#: wt-status.c:249 +#: wt-status.c:250 msgid "both deleted:" msgstr "åŒæ–¹åˆ 除:" -#: wt-status.c:250 +#: wt-status.c:251 msgid "added by us:" msgstr "ç”±æˆ‘ä»¬æ·»åŠ ï¼š" -#: wt-status.c:251 +#: wt-status.c:252 msgid "deleted by them:" msgstr "ç”±ä»–ä»¬åˆ é™¤ï¼š" -#: wt-status.c:252 +#: wt-status.c:253 msgid "added by them:" msgstr "ç”±ä»–ä»¬æ·»åŠ ï¼š" -#: wt-status.c:253 +#: wt-status.c:254 msgid "deleted by us:" msgstr "ç”±æˆ‘ä»¬åˆ é™¤ï¼š" -#: wt-status.c:254 +#: wt-status.c:255 msgid "both added:" msgstr "åŒæ–¹æ·»åŠ :" -#: wt-status.c:255 +#: wt-status.c:256 msgid "both modified:" msgstr "åŒæ–¹ä¿®æ”¹ï¼š" # 译者:末尾两个å—节å¯èƒ½è¢«åˆ å‡ï¼Œå¦‚果翻译为ä¸æ–‡æ ‡ç‚¹ä¼šå‡ºçŽ°åŠä¸ªæ±‰å— -#: wt-status.c:285 +#: wt-status.c:286 msgid "new commits, " msgstr "æ–°æ交, " # 译者:末尾两个å—节å¯èƒ½è¢«åˆ å‡ï¼Œå¦‚果翻译为ä¸æ–‡æ ‡ç‚¹ä¼šå‡ºçŽ°åŠä¸ªæ±‰å— -#: wt-status.c:287 +#: wt-status.c:288 msgid "modified content, " msgstr "修改的内容, " # 译者:末尾两个å—节å¯èƒ½è¢«åˆ å‡ï¼Œå¦‚果翻译为ä¸æ–‡æ ‡ç‚¹ä¼šå‡ºçŽ°åŠä¸ªæ±‰å— -#: wt-status.c:289 +#: wt-status.c:290 msgid "untracked content, " msgstr "未跟踪的内容, " # 译者:为ä¿è¯åœ¨è¾“出ä¸å¯¹é½ï¼Œæ³¨æ„调整å¥ä¸ç©ºæ ¼ï¼ -#: wt-status.c:306 +#: wt-status.c:307 #, c-format msgid "new file: %s" msgstr "新文件: %s" # 译者:为ä¿è¯åœ¨è¾“出ä¸å¯¹é½ï¼Œæ³¨æ„调整å¥ä¸ç©ºæ ¼ï¼ -#: wt-status.c:309 +#: wt-status.c:310 #, c-format msgid "copied: %s -> %s" msgstr "æ‹·è´ï¼š %s -> %s" # 译者:为ä¿è¯åœ¨è¾“出ä¸å¯¹é½ï¼Œæ³¨æ„调整å¥ä¸ç©ºæ ¼ï¼ -#: wt-status.c:312 +#: wt-status.c:313 #, c-format msgid "deleted: %s" msgstr "åˆ é™¤ï¼š %s" # 译者:为ä¿è¯åœ¨è¾“出ä¸å¯¹é½ï¼Œæ³¨æ„调整å¥ä¸ç©ºæ ¼ï¼ -#: wt-status.c:315 +#: wt-status.c:316 #, c-format msgid "modified: %s" msgstr "修改: %s" # 译者:为ä¿è¯åœ¨è¾“出ä¸å¯¹é½ï¼Œæ³¨æ„调整å¥ä¸ç©ºæ ¼ï¼ -#: wt-status.c:318 +#: wt-status.c:319 #, c-format msgid "renamed: %s -> %s" msgstr "é‡å‘½å: %s -> %s" # 译者:为ä¿è¯åœ¨è¾“出ä¸å¯¹é½ï¼Œæ³¨æ„调整å¥ä¸ç©ºæ ¼ï¼ -#: wt-status.c:321 +#: wt-status.c:322 #, c-format msgid "typechange: %s" msgstr "类型å˜æ›´ï¼š %s" # 译者:为ä¿è¯åœ¨è¾“出ä¸å¯¹é½ï¼Œæ³¨æ„调整å¥ä¸ç©ºæ ¼ï¼ -#: wt-status.c:324 +#: wt-status.c:325 #, c-format msgid "unknown: %s" msgstr "未知: %s" # 译者:为ä¿è¯åœ¨è¾“出ä¸å¯¹é½ï¼Œæ³¨æ„调整å¥ä¸ç©ºæ ¼ï¼ -#: wt-status.c:327 +#: wt-status.c:328 #, c-format msgid "unmerged: %s" msgstr "未åˆå¹¶ï¼š %s" -#: wt-status.c:330 +#: wt-status.c:331 #, c-format msgid "bug: unhandled diff status %c" msgstr "bug:未处ç†çš„å·®å¼‚çŠ¶æ€ %c" @@ -1367,7 +1423,7 @@ msgid "You have unmerged paths." msgstr "您有尚未åˆå¹¶çš„路径。" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: wt-status.c:806 wt-status.c:958 +#: wt-status.c:806 msgid " (fix conflicts and run \"git commit\")" msgstr " (解决冲çªå¹¶è¿è¡Œ \"git commit\")" @@ -1390,8 +1446,8 @@ msgstr "当å‰çš„è¡¥ä¸ä¸ºç©ºã€‚" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ #: wt-status.c:829 -msgid " (fix conflicts and then run \"git am --resolved\")" -msgstr " (解决冲çªï¼Œç„¶åŽè¿è¡Œ \"git am --resolved\")" +msgid " (fix conflicts and then run \"git am --continue\")" +msgstr " (解决冲çªï¼Œç„¶åŽè¿è¡Œ \"git am --continue\")" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ #: wt-status.c:831 @@ -1472,41 +1528,51 @@ msgid "You are currently cherry-picking." msgstr "您æ£åœ¨åšæ‹£é€‰æ“作。" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ +#: wt-status.c:958 +msgid " (fix conflicts and run \"git cherry-pick --continue\")" +msgstr " (解决冲çªå¹¶è¿è¡Œ \"git cherry-pick --continue\")" + +# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ #: wt-status.c:961 -msgid " (all conflicts fixed: run \"git commit\")" -msgstr " (解决所有冲çªåŽï¼Œæ‰§è¡Œ \"git commit\")" +msgid " (all conflicts fixed: run \"git cherry-pick --continue\")" +msgstr " (所有冲çªå·²è§£å†³ï¼šè¿è¡Œ \"git cherry-pick --continue\")" -#: wt-status.c:970 +# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ +#: wt-status.c:963 +msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)" +msgstr " (使用 \"git cherry-pick --abort\" 以å–消拣选æ“作)" + +#: wt-status.c:972 #, c-format msgid "You are currently reverting commit %s." msgstr "您æ£åœ¨å转æ交 %s 。" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: wt-status.c:975 +#: wt-status.c:977 msgid " (fix conflicts and run \"git revert --continue\")" msgstr " (解决冲çªå¹¶è¿è¡Œ \"git revert --continue\")" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: wt-status.c:978 +#: wt-status.c:980 msgid " (all conflicts fixed: run \"git revert --continue\")" msgstr " (所有冲çªå·²è§£å†³ï¼šè¿è¡Œ \"git revert --continue\")" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: wt-status.c:980 +#: wt-status.c:982 msgid " (use \"git revert --abort\" to cancel the revert operation)" msgstr " (使用 \"git revert --abort\" 以å–消å转æ交æ“作)" -#: wt-status.c:991 +#: wt-status.c:993 #, c-format msgid "You are currently bisecting, started from branch '%s'." msgstr "您æ£åœ¨ä»Žåˆ†æ”¯ '%s' 开始åšäºŒåˆ†æŸ¥æ‰¾ã€‚" -#: wt-status.c:995 +#: wt-status.c:997 msgid "You are currently bisecting." msgstr "您æ£åœ¨åšäºŒåˆ†æŸ¥æ‰¾ã€‚" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: wt-status.c:998 +#: wt-status.c:1000 msgid " (use \"git bisect reset\" to get back to the original branch)" msgstr " (使用 \"git bisect reset\" 以回到原有分支)" @@ -1514,31 +1580,35 @@ msgstr " (使用 \"git bisect reset\" 以回到原有分支)" msgid "On branch " msgstr "ä½äºŽåˆ†æ”¯ " -#: wt-status.c:1184 +#: wt-status.c:1180 +msgid "rebase in progress; onto " +msgstr "å˜åŸºæ£åœ¨è¿›è¡Œä¸ï¼›è‡³ " + +#: wt-status.c:1187 msgid "HEAD detached at " msgstr "头指针分离于 " -#: wt-status.c:1186 +#: wt-status.c:1189 msgid "HEAD detached from " msgstr "头指针分离自 " -#: wt-status.c:1189 +#: wt-status.c:1192 msgid "Not currently on any branch." msgstr "当å‰ä¸åœ¨ä»»ä½•åˆ†æ”¯ä¸Šã€‚" -#: wt-status.c:1206 +#: wt-status.c:1209 msgid "Initial commit" msgstr "åˆå§‹æ交" -#: wt-status.c:1220 +#: wt-status.c:1223 msgid "Untracked files" msgstr "未跟踪的文件" -#: wt-status.c:1222 +#: wt-status.c:1225 msgid "Ignored files" msgstr "忽略的文件" -#: wt-status.c:1226 +#: wt-status.c:1229 #, c-format msgid "" "It took %.2f seconds to enumerate untracked files. 'status -uno'\n" @@ -1548,90 +1618,90 @@ msgstr "" "耗费了 %.2f 秒以枚举未跟踪的文件。'status -uno' 也许能æ高速度,\n" "但您需è¦å°å¿ƒä¸è¦å¿˜äº†æ·»åŠ 新文件(å‚è§ 'git help status')。" -#: wt-status.c:1232 +#: wt-status.c:1235 #, c-format msgid "Untracked files not listed%s" msgstr "未跟踪的文件没有列出%s" # 译者:ä¸æ–‡å—符串拼接,å¯åˆ 除å‰å¯¼ç©ºæ ¼ -#: wt-status.c:1234 +#: wt-status.c:1237 msgid " (use -u option to show untracked files)" msgstr "(使用 -u å‚数显示未跟踪的文件)" -#: wt-status.c:1240 +#: wt-status.c:1243 msgid "No changes" msgstr "没有修改" -#: wt-status.c:1245 +#: wt-status.c:1248 #, c-format msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n" msgstr "ä¿®æ”¹å°šæœªåŠ å…¥æ交(使用 \"git add\" å’Œ/或 \"git commit -a\")\n" -#: wt-status.c:1248 +#: wt-status.c:1251 #, c-format msgid "no changes added to commit\n" msgstr "ä¿®æ”¹å°šæœªåŠ å…¥æ交\n" -#: wt-status.c:1251 +#: wt-status.c:1254 #, c-format msgid "" "nothing added to commit but untracked files present (use \"git add\" to " "track)\n" msgstr "æ交为空,但是å˜åœ¨å°šæœªè·Ÿè¸ªçš„文件(使用 \"git add\" 建立跟踪)\n" -#: wt-status.c:1254 +#: wt-status.c:1257 #, c-format msgid "nothing added to commit but untracked files present\n" msgstr "æ交为空,但是å˜åœ¨å°šæœªè·Ÿè¸ªçš„文件\n" # 译者:ä¸æ–‡å—符串拼接,å¯åˆ 除å‰å¯¼ç©ºæ ¼ -#: wt-status.c:1257 +#: wt-status.c:1260 #, c-format msgid "nothing to commit (create/copy files and use \"git add\" to track)\n" msgstr "æ— æ–‡ä»¶è¦æ交(创建/æ‹·è´æ–‡ä»¶å¹¶ä½¿ç”¨ \"git add\" 建立跟踪)\n" -#: wt-status.c:1260 wt-status.c:1265 +#: wt-status.c:1263 wt-status.c:1268 #, c-format msgid "nothing to commit\n" msgstr "æ— æ–‡ä»¶è¦æ交\n" # 译者:ä¸æ–‡å—符串拼接,å¯åˆ 除å‰å¯¼ç©ºæ ¼ -#: wt-status.c:1263 +#: wt-status.c:1266 #, c-format msgid "nothing to commit (use -u to show untracked files)\n" msgstr "æ— æ–‡ä»¶è¦æ交(使用 -u 显示未跟踪的文件)\n" # 译者:ä¸æ–‡å—符串拼接,å¯åˆ 除å‰å¯¼ç©ºæ ¼ -#: wt-status.c:1267 +#: wt-status.c:1270 #, c-format msgid "nothing to commit, working directory clean\n" msgstr "æ— æ–‡ä»¶è¦æ交,干净的工作区\n" -#: wt-status.c:1375 +#: wt-status.c:1378 msgid "HEAD (no branch)" msgstr "HEAD(éžåˆ†æ”¯ï¼‰" # 译者:注æ„ä¿æŒå¥å°¾ç©ºæ ¼ -#: wt-status.c:1381 +#: wt-status.c:1384 msgid "Initial commit on " msgstr "åˆå§‹æ交于 " # 译者:注æ„ä¿æŒå¥å°¾ç©ºæ ¼ -#: wt-status.c:1396 +#: wt-status.c:1399 msgid "behind " msgstr "è½åŽ " # 译者:注æ„ä¿æŒå¥å°¾ç©ºæ ¼ -#: wt-status.c:1399 wt-status.c:1402 +#: wt-status.c:1402 wt-status.c:1405 msgid "ahead " msgstr "领先 " # 译者:注æ„ä¿æŒå¥å°¾ç©ºæ ¼ -#: wt-status.c:1404 +#: wt-status.c:1407 msgid ", behind " msgstr ",è½åŽ " -#: compat/precompose_utf8.c:58 builtin/clone.c:352 +#: compat/precompose_utf8.c:58 builtin/clone.c:351 #, c-format msgid "failed to unlink '%s'" msgstr "æ— æ³•åˆ é™¤ '%s'" @@ -1716,7 +1786,7 @@ msgstr "" msgid "unexpected diff status %c" msgstr "æ„å¤–çš„å·®å¼‚çŠ¶æ€ %c" -#: builtin/add.c:149 builtin/commit.c:233 +#: builtin/add.c:149 builtin/commit.c:252 msgid "updating files failed" msgstr "更新文件失败" @@ -1729,7 +1799,7 @@ msgstr "åˆ é™¤ '%s'\n" msgid "Unstaged changes after refreshing the index:" msgstr "刷新索引之åŽå°šæœªè¢«æš‚å˜çš„å˜æ›´ï¼š" -#: builtin/add.c:256 builtin/add.c:572 builtin/rm.c:275 +#: builtin/add.c:256 builtin/add.c:573 builtin/rm.c:337 #, c-format msgid "pathspec '%s' did not match any files" msgstr "路径 '%s' 未匹é…任何文件" @@ -1738,127 +1808,127 @@ msgstr "路径 '%s' 未匹é…任何文件" msgid "Could not read the index" msgstr "ä¸èƒ½è¯»å–索引" -#: builtin/add.c:349 +#: builtin/add.c:350 #, c-format msgid "Could not open '%s' for writing." msgstr "ä¸èƒ½æ‰“å¼€ '%s' 以写入。" -#: builtin/add.c:353 +#: builtin/add.c:354 msgid "Could not write patch" msgstr "ä¸èƒ½ç”Ÿæˆè¡¥ä¸" -#: builtin/add.c:358 +#: builtin/add.c:359 #, c-format msgid "Could not stat '%s'" msgstr "ä¸èƒ½æŸ¥çœ‹æ–‡ä»¶çŠ¶æ€ '%s'" -#: builtin/add.c:360 +#: builtin/add.c:361 msgid "Empty patch. Aborted." msgstr "空补ä¸ã€‚异常终æ¢ã€‚" -#: builtin/add.c:366 +#: builtin/add.c:367 #, c-format msgid "Could not apply '%s'" msgstr "ä¸èƒ½åº”用 '%s'" -#: builtin/add.c:376 +#: builtin/add.c:377 msgid "The following paths are ignored by one of your .gitignore files:\n" msgstr "ä¸‹åˆ—è·¯å¾„æ ¹æ®æ‚¨çš„一个 .gitignore 文件而被忽略:\n" -#: builtin/add.c:393 builtin/clean.c:161 builtin/fetch.c:78 builtin/mv.c:63 -#: builtin/prune-packed.c:76 builtin/push.c:425 builtin/remote.c:1253 -#: builtin/rm.c:206 +#: builtin/add.c:394 builtin/clean.c:875 builtin/fetch.c:78 builtin/mv.c:63 +#: builtin/prune-packed.c:73 builtin/push.c:451 builtin/remote.c:1253 +#: builtin/rm.c:268 msgid "dry run" msgstr "æ¼”ä¹ " -#: builtin/add.c:394 builtin/apply.c:4409 builtin/check-ignore.c:19 -#: builtin/commit.c:1152 builtin/count-objects.c:95 builtin/fsck.c:613 -#: builtin/log.c:1518 builtin/mv.c:62 builtin/read-tree.c:112 +#: builtin/add.c:395 builtin/apply.c:4410 builtin/check-ignore.c:19 +#: builtin/commit.c:1220 builtin/count-objects.c:95 builtin/fsck.c:613 +#: builtin/log.c:1573 builtin/mv.c:62 builtin/read-tree.c:113 msgid "be verbose" msgstr "冗长输出" -#: builtin/add.c:396 +#: builtin/add.c:397 msgid "interactive picking" msgstr "交互å¼æ‹£é€‰" -#: builtin/add.c:397 builtin/checkout.c:1063 builtin/reset.c:258 +#: builtin/add.c:398 builtin/checkout.c:1073 builtin/reset.c:261 msgid "select hunks interactively" msgstr "交互å¼æŒ‘选数æ®å—" -#: builtin/add.c:398 +#: builtin/add.c:399 msgid "edit current diff and apply" msgstr "编辑当å‰å·®å¼‚并应用" -#: builtin/add.c:399 +#: builtin/add.c:400 msgid "allow adding otherwise ignored files" msgstr "å…è®¸æ·»åŠ å¿½ç•¥çš„æ–‡ä»¶" -#: builtin/add.c:400 +#: builtin/add.c:401 msgid "update tracked files" msgstr "更新已跟踪的文件" -#: builtin/add.c:401 +#: builtin/add.c:402 msgid "record only the fact that the path will be added later" msgstr "åªè®°å½•ï¼Œè¯¥è·¯å¾„ç¨åŽå†æ·»åŠ " -#: builtin/add.c:402 +#: builtin/add.c:403 msgid "add changes from all tracked and untracked files" msgstr "æ·»åŠ æ‰€æœ‰æ”¹å˜çš„已跟踪文件和未跟踪文件" #. takes no arguments -#: builtin/add.c:405 +#: builtin/add.c:406 msgid "ignore paths removed in the working tree (same as --no-all)" msgstr "忽略工作区ä¸ç§»é™¤çš„路径(和 --no-all 相åŒï¼‰" -#: builtin/add.c:407 +#: builtin/add.c:408 msgid "don't add, only refresh the index" msgstr "ä¸æ·»åŠ ,åªåˆ·æ–°ç´¢å¼•" -#: builtin/add.c:408 +#: builtin/add.c:409 msgid "just skip files which cannot be added because of errors" msgstr "è·³è¿‡å› å‡ºé”™ä¸èƒ½æ·»åŠ 的文件" -#: builtin/add.c:409 +#: builtin/add.c:410 msgid "check if - even missing - files are ignored in dry run" msgstr "æ£€æŸ¥åœ¨æ¼”ä¹ æ¨¡å¼ä¸‹æ–‡ä»¶ï¼ˆå³ä½¿ä¸å˜åœ¨ï¼‰æ˜¯å¦è¢«å¿½ç•¥" -#: builtin/add.c:431 +#: builtin/add.c:432 #, c-format msgid "Use -f if you really want to add them.\n" msgstr "使用 -f å‚数如果您确实è¦æ·»åŠ 它们。\n" -#: builtin/add.c:432 +#: builtin/add.c:433 msgid "no files added" msgstr "æ²¡æœ‰æ–‡ä»¶è¢«æ·»åŠ " -#: builtin/add.c:438 +#: builtin/add.c:439 msgid "adding files failed" msgstr "æ·»åŠ æ–‡ä»¶å¤±è´¥" -#: builtin/add.c:477 +#: builtin/add.c:478 msgid "-A and -u are mutually incompatible" msgstr "-A å’Œ -u 选项互斥" -#: builtin/add.c:495 +#: builtin/add.c:496 msgid "Option --ignore-missing can only be used together with --dry-run" msgstr "选项 --ignore-missing åªèƒ½å’Œ --dry-run åŒæ—¶ä½¿ç”¨" -#: builtin/add.c:525 +#: builtin/add.c:526 #, c-format msgid "Nothing specified, nothing added.\n" msgstr "æ²¡æœ‰æŒ‡å®šæ–‡ä»¶ï¼Œä¹Ÿæ²¡æœ‰æ–‡ä»¶è¢«æ·»åŠ ã€‚\n" -#: builtin/add.c:526 +#: builtin/add.c:527 #, c-format msgid "Maybe you wanted to say 'git add .'?\n" msgstr "也许您想è¦æ‰§è¡Œ 'git add .'?\n" -#: builtin/add.c:532 builtin/check-ignore.c:66 builtin/clean.c:204 -#: builtin/commit.c:293 builtin/mv.c:82 builtin/rm.c:235 +#: builtin/add.c:533 builtin/check-ignore.c:161 builtin/clean.c:919 +#: builtin/commit.c:312 builtin/mv.c:82 builtin/rm.c:297 msgid "index file corrupt" msgstr "索引文件æŸå" -#: builtin/add.c:604 builtin/apply.c:4505 builtin/mv.c:229 builtin/rm.c:370 +#: builtin/add.c:605 builtin/apply.c:4506 builtin/mv.c:229 builtin/rm.c:432 msgid "Unable to write new index file" msgstr "æ— æ³•å†™å…¥æ–°ç´¢å¼•æ–‡ä»¶" @@ -2037,293 +2107,293 @@ msgstr "打补ä¸å¤±è´¥ï¼š%s:%ld" msgid "cannot checkout %s" msgstr "ä¸èƒ½æ£€å‡º %s" -#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3193 +#: builtin/apply.c:3140 builtin/apply.c:3149 builtin/apply.c:3194 #, c-format msgid "read of %s failed" msgstr "è¯»å– %s 失败" -#: builtin/apply.c:3173 builtin/apply.c:3395 +#: builtin/apply.c:3174 builtin/apply.c:3396 #, c-format msgid "path %s has been renamed/deleted" msgstr "路径 %s å·²ç»è¢«é‡å‘½å/åˆ é™¤" -#: builtin/apply.c:3254 builtin/apply.c:3409 +#: builtin/apply.c:3255 builtin/apply.c:3410 #, c-format msgid "%s: does not exist in index" msgstr "%s:ä¸å˜åœ¨äºŽç´¢å¼•ä¸" -#: builtin/apply.c:3258 builtin/apply.c:3401 builtin/apply.c:3423 +#: builtin/apply.c:3259 builtin/apply.c:3402 builtin/apply.c:3424 #, c-format msgid "%s: %s" msgstr "%s:%s" -#: builtin/apply.c:3263 builtin/apply.c:3417 +#: builtin/apply.c:3264 builtin/apply.c:3418 #, c-format msgid "%s: does not match index" msgstr "%s:和索引ä¸åŒ¹é…" -#: builtin/apply.c:3365 +#: builtin/apply.c:3366 msgid "removal patch leaves file contents" msgstr "移除补ä¸ä»ç•™ä¸‹äº†æ–‡ä»¶å†…容" -#: builtin/apply.c:3434 +#: builtin/apply.c:3435 #, c-format msgid "%s: wrong type" msgstr "%s:错误类型" -#: builtin/apply.c:3436 +#: builtin/apply.c:3437 #, c-format msgid "%s has type %o, expected %o" msgstr "%s 的类型是 %o,应为 %o" -#: builtin/apply.c:3537 +#: builtin/apply.c:3538 #, c-format msgid "%s: already exists in index" msgstr "%s:已ç»å˜åœ¨äºŽç´¢å¼•ä¸" -#: builtin/apply.c:3540 +#: builtin/apply.c:3541 #, c-format msgid "%s: already exists in working directory" msgstr "%s:已ç»å˜åœ¨äºŽå·¥ä½œåŒºä¸" -#: builtin/apply.c:3560 +#: builtin/apply.c:3561 #, c-format msgid "new mode (%o) of %s does not match old mode (%o)" msgstr "%2$s 的新模å¼ï¼ˆ%1$o)和旧模å¼ï¼ˆ%3$o)ä¸åŒ¹é…" -#: builtin/apply.c:3565 +#: builtin/apply.c:3566 #, c-format msgid "new mode (%o) of %s does not match old mode (%o) of %s" msgstr "%2$s 的新模å¼ï¼ˆ%1$o)和 %4$s 的旧模å¼ï¼ˆ%3$o)ä¸åŒ¹é…" -#: builtin/apply.c:3573 +#: builtin/apply.c:3574 #, c-format msgid "%s: patch does not apply" msgstr "%s:补ä¸æœªåº”用" -#: builtin/apply.c:3586 +#: builtin/apply.c:3587 #, c-format msgid "Checking patch %s..." msgstr "æ£€æŸ¥è¡¥ä¸ %s..." -#: builtin/apply.c:3679 builtin/checkout.c:216 builtin/reset.c:124 +#: builtin/apply.c:3680 builtin/checkout.c:216 builtin/reset.c:127 #, c-format msgid "make_cache_entry failed for path '%s'" msgstr "对路径 '%s' çš„ make_cache_entry æ“作失败" -#: builtin/apply.c:3822 +#: builtin/apply.c:3823 #, c-format msgid "unable to remove %s from index" msgstr "ä¸èƒ½ä»Žç´¢å¼•ä¸ç§»é™¤ %s" -#: builtin/apply.c:3850 +#: builtin/apply.c:3851 #, c-format -msgid "corrupt patch for subproject %s" -msgstr "å项目 %s æŸåçš„è¡¥ä¸" +msgid "corrupt patch for submodule %s" +msgstr "å模组 %s æŸåçš„è¡¥ä¸" -#: builtin/apply.c:3854 +#: builtin/apply.c:3855 #, c-format msgid "unable to stat newly created file '%s'" msgstr "ä¸èƒ½æžšä¸¾æ–°å»ºæ–‡ä»¶ '%s' 的状æ€" -#: builtin/apply.c:3859 +#: builtin/apply.c:3860 #, c-format msgid "unable to create backing store for newly created file %s" msgstr "ä¸èƒ½ä¸ºæ–°å»ºæ–‡ä»¶ %s 创建åŽç«¯å˜å‚¨" -#: builtin/apply.c:3862 builtin/apply.c:3970 +#: builtin/apply.c:3863 builtin/apply.c:3971 #, c-format msgid "unable to add cache entry for %s" msgstr "æ— æ³•ä¸º %s æ·»åŠ ç¼“å˜æ¡ç›®" -#: builtin/apply.c:3895 +#: builtin/apply.c:3896 #, c-format msgid "closing file '%s'" msgstr "å…³é—文件 '%s'" -#: builtin/apply.c:3944 +#: builtin/apply.c:3945 #, c-format msgid "unable to write file '%s' mode %o" msgstr "ä¸èƒ½å†™æ–‡ä»¶ '%s' æƒé™ %o" -#: builtin/apply.c:4031 +#: builtin/apply.c:4032 #, c-format msgid "Applied patch %s cleanly." msgstr "æˆåŠŸåº”ç”¨è¡¥ä¸ %s。" -#: builtin/apply.c:4039 +#: builtin/apply.c:4040 msgid "internal error" msgstr "内部错误" #. Say this even without --verbose -#: builtin/apply.c:4042 +#: builtin/apply.c:4043 #, c-format msgid "Applying patch %%s with %d reject..." msgid_plural "Applying patch %%s with %d rejects..." msgstr[0] "应用 %%s 个补ä¸ï¼Œå…¶ä¸ %d 个被拒ç»..." msgstr[1] "应用 %%s 个补ä¸ï¼Œå…¶ä¸ %d 个被拒ç»..." -#: builtin/apply.c:4052 +#: builtin/apply.c:4053 #, c-format msgid "truncating .rej filename to %.*s.rej" msgstr "æˆªçŸ .rej 文件å为 %.*s.rej" -#: builtin/apply.c:4073 +#: builtin/apply.c:4074 #, c-format msgid "Hunk #%d applied cleanly." msgstr "第 #%d 个片段æˆåŠŸåº”用。" -#: builtin/apply.c:4076 +#: builtin/apply.c:4077 #, c-format msgid "Rejected hunk #%d." msgstr "æ‹’ç»ç¬¬ #%d 个片段。" -#: builtin/apply.c:4226 +#: builtin/apply.c:4227 msgid "unrecognized input" msgstr "未能识别的输入" -#: builtin/apply.c:4237 +#: builtin/apply.c:4238 msgid "unable to read index file" msgstr "æ— æ³•è¯»å–索引文件" -#: builtin/apply.c:4356 builtin/apply.c:4359 builtin/clone.c:92 +#: builtin/apply.c:4357 builtin/apply.c:4360 builtin/clone.c:91 #: builtin/fetch.c:63 msgid "path" msgstr "路径" -#: builtin/apply.c:4357 +#: builtin/apply.c:4358 msgid "don't apply changes matching the given path" msgstr "ä¸è¦åº”用与给出路径å‘匹é…çš„å˜æ›´" -#: builtin/apply.c:4360 +#: builtin/apply.c:4361 msgid "apply changes matching the given path" msgstr "应用与给出路径å‘匹é…çš„å˜æ›´" -#: builtin/apply.c:4362 +#: builtin/apply.c:4363 msgid "num" msgstr "æ•°å—" -#: builtin/apply.c:4363 +#: builtin/apply.c:4364 msgid "remove <num> leading slashes from traditional diff paths" msgstr "ä»Žä¼ ç»Ÿçš„ diff 路径ä¸ç§»é™¤æŒ‡å®šæ•°é‡çš„å‰å¯¼æ–œçº¿" -#: builtin/apply.c:4366 +#: builtin/apply.c:4367 msgid "ignore additions made by the patch" msgstr "忽略补ä¸ä¸çš„æ·»åŠ çš„æ–‡ä»¶" -#: builtin/apply.c:4368 +#: builtin/apply.c:4369 msgid "instead of applying the patch, output diffstat for the input" msgstr "ä¸åº”用补ä¸ï¼Œè€Œæ˜¯æ˜¾ç¤ºè¾“入的差异统计(diffstat)" -#: builtin/apply.c:4372 +#: builtin/apply.c:4373 msgid "show number of added and deleted lines in decimal notation" msgstr "以åè¿›åˆ¶æ•°æ˜¾ç¤ºæ·»åŠ å’Œåˆ é™¤çš„è¡Œæ•°" -#: builtin/apply.c:4374 +#: builtin/apply.c:4375 msgid "instead of applying the patch, output a summary for the input" msgstr "ä¸åº”用补ä¸ï¼Œè€Œæ˜¯æ˜¾ç¤ºè¾“入的概è¦" -#: builtin/apply.c:4376 +#: builtin/apply.c:4377 msgid "instead of applying the patch, see if the patch is applicable" msgstr "ä¸åº”用补ä¸ï¼Œè€Œæ˜¯æŸ¥çœ‹è¡¥ä¸æ˜¯å¦å¯åº”用" -#: builtin/apply.c:4378 +#: builtin/apply.c:4379 msgid "make sure the patch is applicable to the current index" msgstr "确认补ä¸å¯ä»¥åº”用到当å‰ç´¢å¼•" -#: builtin/apply.c:4380 +#: builtin/apply.c:4381 msgid "apply a patch without touching the working tree" msgstr "应用补ä¸è€Œä¸ä¿®æ”¹å·¥ä½œåŒº" -#: builtin/apply.c:4382 +#: builtin/apply.c:4383 msgid "also apply the patch (use with --stat/--summary/--check)" msgstr "还应用æ¤è¡¥ä¸ï¼ˆä¸Ž --stat/--summary/--check 选项åŒæ—¶ä½¿ç”¨ï¼‰" -#: builtin/apply.c:4384 +#: builtin/apply.c:4385 msgid "attempt three-way merge if a patch does not apply" msgstr "如果一个补ä¸ä¸èƒ½åº”用则å°è¯•ä¸‰è·¯åˆå¹¶" -#: builtin/apply.c:4386 +#: builtin/apply.c:4387 msgid "build a temporary index based on embedded index information" msgstr "创建一个临时索引基于嵌入的索引信æ¯" -#: builtin/apply.c:4388 builtin/checkout-index.c:197 builtin/ls-files.c:456 +#: builtin/apply.c:4389 builtin/checkout-index.c:197 builtin/ls-files.c:462 msgid "paths are separated with NUL character" msgstr "路径以 NUL å—符分隔" -#: builtin/apply.c:4391 +#: builtin/apply.c:4392 msgid "ensure at least <n> lines of context match" msgstr "ç¡®ä¿è‡³å°‘åŒ¹é… <n> 行上下文" -#: builtin/apply.c:4392 +#: builtin/apply.c:4393 msgid "action" msgstr "动作" -#: builtin/apply.c:4393 +#: builtin/apply.c:4394 msgid "detect new or modified lines that have whitespace errors" msgstr "检查新增和修改的行ä¸é—´çš„空白å—符滥用" -#: builtin/apply.c:4396 builtin/apply.c:4399 +#: builtin/apply.c:4397 builtin/apply.c:4400 msgid "ignore changes in whitespace when finding context" msgstr "查找上下文时忽略空白å—符的å˜æ›´" -#: builtin/apply.c:4402 +#: builtin/apply.c:4403 msgid "apply the patch in reverse" msgstr "åå‘应用补ä¸" -#: builtin/apply.c:4404 +#: builtin/apply.c:4405 msgid "don't expect at least one line of context" msgstr "æ— éœ€è‡³å°‘ä¸€è¡Œä¸Šä¸‹æ–‡" -#: builtin/apply.c:4406 +#: builtin/apply.c:4407 msgid "leave the rejected hunks in corresponding *.rej files" msgstr "将拒ç»çš„è¡¥ä¸ç‰‡æ®µä¿å˜åœ¨å¯¹åº”çš„ *.rej 文件ä¸" -#: builtin/apply.c:4408 +#: builtin/apply.c:4409 msgid "allow overlapping hunks" msgstr "å…许é‡å çš„è¡¥ä¸ç‰‡æ®µ" -#: builtin/apply.c:4411 +#: builtin/apply.c:4412 msgid "tolerate incorrectly detected missing new-line at the end of file" msgstr "å…许ä¸æ£ç¡®çš„文件末尾æ¢è¡Œç¬¦" -#: builtin/apply.c:4414 +#: builtin/apply.c:4415 msgid "do not trust the line counts in the hunk headers" msgstr "ä¸ä¿¡ä»»è¡¥ä¸ç‰‡æ®µçš„头信æ¯ä¸çš„è¡Œå·" -#: builtin/apply.c:4416 +#: builtin/apply.c:4417 msgid "root" msgstr "æ ¹ç›®å½•" -#: builtin/apply.c:4417 +#: builtin/apply.c:4418 msgid "prepend <root> to all filenames" msgstr "为所有文件åå‰æ·»åŠ <æ ¹ç›®å½•>" -#: builtin/apply.c:4439 +#: builtin/apply.c:4440 msgid "--3way outside a repository" msgstr "--3way 在一个版本库之外" -#: builtin/apply.c:4447 +#: builtin/apply.c:4448 msgid "--index outside a repository" msgstr "--index 在一个版本库之外" -#: builtin/apply.c:4450 +#: builtin/apply.c:4451 msgid "--cached outside a repository" msgstr "--cached 在一个版本库之外" -#: builtin/apply.c:4466 +#: builtin/apply.c:4467 #, c-format msgid "can't open patch '%s'" msgstr "ä¸èƒ½æ‰“å¼€è¡¥ä¸ '%s'" -#: builtin/apply.c:4480 +#: builtin/apply.c:4481 #, c-format msgid "squelched %d whitespace error" msgid_plural "squelched %d whitespace errors" msgstr[0] "抑制下ä»æœ‰ %d 个空白å—符误用" msgstr[1] "抑制下ä»æœ‰ %d 个空白å—符误用" -#: builtin/apply.c:4486 builtin/apply.c:4496 +#: builtin/apply.c:4487 builtin/apply.c:4497 #, c-format msgid "%d line adds whitespace errors." msgid_plural "%d lines add whitespace errors." @@ -2377,103 +2447,103 @@ msgstr "执行 'git bisect next'" msgid "update BISECT_HEAD instead of checking out the current commit" msgstr "æ›´æ–° BISECT_HEAD 而éžæ£€å‡ºå½“å‰æ交" -#: builtin/blame.c:25 +#: builtin/blame.c:26 msgid "git blame [options] [rev-opts] [rev] [--] file" msgstr "git blame [选项] [版本选项] [版本] [--] 文件" -#: builtin/blame.c:30 +#: builtin/blame.c:31 msgid "[rev-opts] are documented in git-rev-list(1)" msgstr "[版本选项] 的文档记录在 git-rev-list(1) ä¸" -#: builtin/blame.c:2355 +#: builtin/blame.c:2276 msgid "Show blame entries as we find them, incrementally" msgstr "增é‡å¼åœ°æ˜¾ç¤ºå‘现的 blame æ¡ç›®" -#: builtin/blame.c:2356 +#: builtin/blame.c:2277 msgid "Show blank SHA-1 for boundary commits (Default: off)" msgstr "边界æ交显示空的 SHA-1(默认:关é—)" -#: builtin/blame.c:2357 +#: builtin/blame.c:2278 msgid "Do not treat root commits as boundaries (Default: off)" msgstr "ä¸æŠŠæ ¹æ交作为边界(默认:关é—)" -#: builtin/blame.c:2358 +#: builtin/blame.c:2279 msgid "Show work cost statistics" msgstr "显示命令消耗统计" -#: builtin/blame.c:2359 +#: builtin/blame.c:2280 msgid "Show output score for blame entries" msgstr "æ˜¾ç¤ºåˆ¤æ– blame æ¡ç›®ä½ç§»çš„得分诊æ–ä¿¡æ¯" -#: builtin/blame.c:2360 +#: builtin/blame.c:2281 msgid "Show original filename (Default: auto)" msgstr "显示原始文件å(默认:自动)" -#: builtin/blame.c:2361 +#: builtin/blame.c:2282 msgid "Show original linenumber (Default: off)" msgstr "显示原始的行å·ï¼ˆé»˜è®¤ï¼šå…³é—)" -#: builtin/blame.c:2362 +#: builtin/blame.c:2283 msgid "Show in a format designed for machine consumption" msgstr "显示为一个适åˆæœºå™¨è¯»å–çš„æ ¼å¼" -#: builtin/blame.c:2363 +#: builtin/blame.c:2284 msgid "Show porcelain format with per-line commit information" msgstr "为æ¯ä¸€è¡Œæ˜¾ç¤ºæœºå™¨é€‚用的æ交信æ¯" -#: builtin/blame.c:2364 +#: builtin/blame.c:2285 msgid "Use the same output mode as git-annotate (Default: off)" msgstr "使用和 git-annotate 相åŒçš„输出模å¼ï¼ˆé»˜è®¤ï¼šå…³é—)" -#: builtin/blame.c:2365 +#: builtin/blame.c:2286 msgid "Show raw timestamp (Default: off)" msgstr "显示原始时间戳(默认:关é—)" -#: builtin/blame.c:2366 +#: builtin/blame.c:2287 msgid "Show long commit SHA1 (Default: off)" msgstr "显示长的SHA1æ交å·ï¼ˆé»˜è®¤ï¼šå…³é—)" -#: builtin/blame.c:2367 +#: builtin/blame.c:2288 msgid "Suppress author name and timestamp (Default: off)" msgstr "éšè—作者åå—和时间戳(默认:关é—)" -#: builtin/blame.c:2368 +#: builtin/blame.c:2289 msgid "Show author email instead of name (Default: off)" msgstr "显示作者的邮箱而ä¸æ˜¯åå—(默认:关é—)" -#: builtin/blame.c:2369 +#: builtin/blame.c:2290 msgid "Ignore whitespace differences" msgstr "忽略空白差异" -#: builtin/blame.c:2370 +#: builtin/blame.c:2291 msgid "Spend extra cycles to find better match" msgstr "花费é¢å¤–的循环æ¥æ‰¾åˆ°æ›´å¥½çš„匹é…" -#: builtin/blame.c:2371 +#: builtin/blame.c:2292 msgid "Use revisions from <file> instead of calling git-rev-list" msgstr "使用æ¥è‡ª <file> 的修订集而ä¸æ˜¯è°ƒç”¨ git-rev-list" -#: builtin/blame.c:2372 +#: builtin/blame.c:2293 msgid "Use <file>'s contents as the final image" msgstr "使用 <file> 的内容作为最终的图片" -#: builtin/blame.c:2373 builtin/blame.c:2374 +#: builtin/blame.c:2294 builtin/blame.c:2295 msgid "score" msgstr "得分" -#: builtin/blame.c:2373 +#: builtin/blame.c:2294 msgid "Find line copies within and across files" msgstr "找到文件内åŠè·¨æ–‡ä»¶çš„行拷è´" -#: builtin/blame.c:2374 +#: builtin/blame.c:2295 msgid "Find line movements within and across files" msgstr "找到文件内åŠè·¨æ–‡ä»¶çš„行移动" -#: builtin/blame.c:2375 +#: builtin/blame.c:2296 msgid "n,m" msgstr "n,m" -#: builtin/blame.c:2375 +#: builtin/blame.c:2296 msgid "Process only line range n,m, counting from 1" msgstr "åªå¤„ç†è¡ŒèŒƒå›´åœ¨ n å’Œ m 之间的,从 1 开始" @@ -2707,8 +2777,8 @@ msgid "act on remote-tracking branches" msgstr "作用于远程跟踪分支" #: builtin/branch.c:805 builtin/branch.c:811 builtin/branch.c:832 -#: builtin/branch.c:838 builtin/commit.c:1368 builtin/commit.c:1369 -#: builtin/commit.c:1370 builtin/commit.c:1371 builtin/tag.c:468 +#: builtin/branch.c:838 builtin/commit.c:1433 builtin/commit.c:1434 +#: builtin/commit.c:1435 builtin/commit.c:1436 builtin/tag.c:468 msgid "commit" msgstr "æ交" @@ -2772,7 +2842,7 @@ msgstr "以列的方å¼æ˜¾ç¤ºåˆ†æ”¯" msgid "Failed to resolve HEAD as a valid ref." msgstr "æ— æ³•å°† HEAD 解æžä¸ºæœ‰æ•ˆå¼•ç”¨ã€‚" -#: builtin/branch.c:860 builtin/clone.c:619 +#: builtin/branch.c:860 builtin/clone.c:630 msgid "HEAD not found below refs/heads!" msgstr "HEAD 没有ä½äºŽ /refs/heads 之下ï¼" @@ -2889,43 +2959,43 @@ msgstr "需è¦ä¸€ä¸ªç‰ˆæœ¬åº“æ¥åˆ›å»ºåŒ…。" msgid "Need a repository to unbundle." msgstr "需è¦ä¸€ä¸ªç‰ˆæœ¬åº“æ¥è§£åŒ…。" -#: builtin/cat-file.c:176 +#: builtin/cat-file.c:285 msgid "git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>" msgstr "git cat-file (-t|-s|-e|-p|<类型>|--textconv) <对象>" -#: builtin/cat-file.c:177 +#: builtin/cat-file.c:286 msgid "git cat-file (--batch|--batch-check) < <list_of_objects>" msgstr "git cat-file (--batch|--batch-check) < <对象列表>" -#: builtin/cat-file.c:195 +#: builtin/cat-file.c:323 msgid "<type> can be one of: blob, tree, commit, tag" msgstr "<类型> å¯ä»¥æ˜¯å…¶ä¸ä¹‹ä¸€ï¼šblobã€treeã€commitã€tag" -#: builtin/cat-file.c:196 +#: builtin/cat-file.c:324 msgid "show object type" msgstr "显示对象类型" -#: builtin/cat-file.c:197 +#: builtin/cat-file.c:325 msgid "show object size" msgstr "显示对象大å°" -#: builtin/cat-file.c:199 +#: builtin/cat-file.c:327 msgid "exit with zero when there's no error" msgstr "当没有错误时退出并返回零" -#: builtin/cat-file.c:200 +#: builtin/cat-file.c:328 msgid "pretty-print object's content" msgstr "美观地打å°å¯¹è±¡çš„内容" -#: builtin/cat-file.c:202 +#: builtin/cat-file.c:330 msgid "for blob objects, run textconv on object's content" msgstr "对于数æ®ï¼ˆblob)对象,对其内容执行 textconv" -#: builtin/cat-file.c:204 +#: builtin/cat-file.c:332 msgid "show info and content of objects fed from the standard input" msgstr "æ˜¾ç¤ºä»Žæ ‡å‡†è¾“å…¥æ供的对象的信æ¯å’Œå†…容" -#: builtin/cat-file.c:207 +#: builtin/cat-file.c:335 msgid "show info about objects fed from the standard input" msgstr "æ˜¾ç¤ºä»Žæ ‡å‡†è¾“å…¥æ供的对象的信æ¯" @@ -2953,30 +3023,55 @@ msgstr "ä»Žæ ‡å‡†è¾“å…¥è¯»å‡ºæ–‡ä»¶å" msgid "input paths are terminated by a null character" msgstr "输入路径以nullå—符终æ¢" -#: builtin/check-ignore.c:18 builtin/checkout.c:1044 builtin/gc.c:177 +#: builtin/check-ignore.c:18 builtin/checkout.c:1054 builtin/gc.c:177 msgid "suppress progress reporting" msgstr "ä¸æ˜¾ç¤ºè¿›åº¦æŠ¥å‘Š" -#: builtin/check-ignore.c:146 +#: builtin/check-ignore.c:26 +msgid "show non-matching input paths" +msgstr "显示未匹é…的输入路径" + +#: builtin/check-ignore.c:143 msgid "cannot specify pathnames with --stdin" msgstr "ä¸èƒ½åŒæ—¶æä¾›è·¯å¾„åŠ --stdin å‚æ•°" -#: builtin/check-ignore.c:149 +#: builtin/check-ignore.c:146 msgid "-z only makes sense with --stdin" msgstr "-z 需è¦å’Œ --stdin å‚数共用æ‰æœ‰æ„义" -#: builtin/check-ignore.c:151 +#: builtin/check-ignore.c:148 msgid "no path specified" msgstr "未指定路径" -#: builtin/check-ignore.c:155 +#: builtin/check-ignore.c:152 msgid "--quiet is only valid with a single pathname" msgstr "å‚æ•° --quiet åªåœ¨æ供一个路径å时有效" -#: builtin/check-ignore.c:157 +#: builtin/check-ignore.c:154 msgid "cannot have both --quiet and --verbose" msgstr "ä¸èƒ½åŒæ—¶æä¾› --quiet å’Œ --verbose å‚æ•°" +#: builtin/check-ignore.c:157 +msgid "--non-matching is only valid with --verbose" +msgstr "--non-matching 选项åªåœ¨ä½¿ç”¨ --verbose 时有效" + +#: builtin/check-mailmap.c:8 +msgid "git check-mailmap [options] <contact>..." +msgstr "git check-mailmap [选项] <è”系地å€>..." + +#: builtin/check-mailmap.c:13 +msgid "also read contacts from stdin" +msgstr "è¿˜ä»Žæ ‡å‡†è¾“å…¥è¯»å–è”系地å€" + +#: builtin/check-mailmap.c:24 +#, c-format +msgid "unable to parse contact: %s" +msgstr "ä¸èƒ½è§£æžè”系地å€ï¼š%s" + +#: builtin/check-mailmap.c:47 +msgid "no contacts specified" +msgstr "未指定è”系地å€" + #: builtin/checkout-index.c:126 msgid "git checkout-index [options] [--] [<file>...]" msgstr "git checkout-index [选项] [--] [<文件>...]" @@ -3093,43 +3188,43 @@ msgstr "您需è¦å…ˆè§£å†³å½“å‰ç´¢å¼•çš„冲çª" msgid "Can not do reflog for '%s'\n" msgstr "ä¸èƒ½å¯¹ '%s' 执行 reflog æ“作\n" -#: builtin/checkout.c:634 +#: builtin/checkout.c:639 msgid "HEAD is now at" msgstr "HEAD ç›®å‰ä½äºŽ" -#: builtin/checkout.c:641 +#: builtin/checkout.c:646 #, c-format msgid "Reset branch '%s'\n" msgstr "é‡ç½®åˆ†æ”¯ '%s'\n" -#: builtin/checkout.c:644 +#: builtin/checkout.c:649 #, c-format msgid "Already on '%s'\n" msgstr "å·²ç»ä½äºŽ '%s'\n" -#: builtin/checkout.c:648 +#: builtin/checkout.c:653 #, c-format msgid "Switched to and reset branch '%s'\n" msgstr "切æ¢å¹¶é‡ç½®åˆ†æ”¯ '%s'\n" -#: builtin/checkout.c:650 builtin/checkout.c:987 +#: builtin/checkout.c:655 builtin/checkout.c:997 #, c-format msgid "Switched to a new branch '%s'\n" msgstr "切æ¢åˆ°ä¸€ä¸ªæ–°åˆ†æ”¯ '%s'\n" -#: builtin/checkout.c:652 +#: builtin/checkout.c:657 #, c-format msgid "Switched to branch '%s'\n" msgstr "切æ¢åˆ°åˆ†æ”¯ '%s'\n" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: builtin/checkout.c:708 +#: builtin/checkout.c:713 #, c-format msgid " ... and %d more.\n" msgstr " ... åŠå…¶å®ƒ %d 个。\n" #. The singular version -#: builtin/checkout.c:714 +#: builtin/checkout.c:719 #, c-format msgid "" "Warning: you are leaving %d commit behind, not connected to\n" @@ -3150,7 +3245,7 @@ msgstr[1] "" "\n" "%s\n" -#: builtin/checkout.c:732 +#: builtin/checkout.c:737 #, c-format msgid "" "If you want to keep them by creating a new branch, this may be a good time\n" @@ -3165,136 +3260,136 @@ msgstr "" " git branch new_branch_name %s\n" "\n" -#: builtin/checkout.c:762 +#: builtin/checkout.c:767 msgid "internal error in revision walk" msgstr "在版本é历时é‡åˆ°å†…部错误" -#: builtin/checkout.c:766 +#: builtin/checkout.c:771 msgid "Previous HEAD position was" msgstr "之å‰çš„ HEAD ä½ç½®æ˜¯" -#: builtin/checkout.c:793 builtin/checkout.c:982 +#: builtin/checkout.c:798 builtin/checkout.c:992 msgid "You are on a branch yet to be born" msgstr "您ä½äºŽä¸€ä¸ªå°šæœªåˆå§‹åŒ–的分支" #. case (1) -#: builtin/checkout.c:918 +#: builtin/checkout.c:928 #, c-format msgid "invalid reference: %s" msgstr "æ— æ•ˆå¼•ç”¨ï¼š%s" #. case (1): want a tree -#: builtin/checkout.c:957 +#: builtin/checkout.c:967 #, c-format msgid "reference is not a tree: %s" msgstr "引用ä¸æ˜¯ä¸€ä¸ªæ ‘:%s" -#: builtin/checkout.c:996 +#: builtin/checkout.c:1006 msgid "paths cannot be used with switching branches" msgstr "路径ä¸èƒ½å’Œåˆ‡æ¢åˆ†æ”¯åŒæ—¶ä½¿ç”¨" -#: builtin/checkout.c:999 builtin/checkout.c:1003 +#: builtin/checkout.c:1009 builtin/checkout.c:1013 #, c-format msgid "'%s' cannot be used with switching branches" msgstr "'%s' ä¸èƒ½å’Œåˆ‡æ¢åˆ†æ”¯åŒæ—¶ä½¿ç”¨" -#: builtin/checkout.c:1007 builtin/checkout.c:1010 builtin/checkout.c:1015 -#: builtin/checkout.c:1018 +#: builtin/checkout.c:1017 builtin/checkout.c:1020 builtin/checkout.c:1025 +#: builtin/checkout.c:1028 #, c-format msgid "'%s' cannot be used with '%s'" msgstr "'%s' ä¸èƒ½å’Œ '%s' åŒæ—¶ä½¿ç”¨" -#: builtin/checkout.c:1023 +#: builtin/checkout.c:1033 #, c-format msgid "Cannot switch branch to a non-commit '%s'" msgstr "ä¸èƒ½åˆ‡æ¢åˆ†æ”¯åˆ°ä¸€ä¸ªéžæ交 '%s'" -#: builtin/checkout.c:1045 builtin/checkout.c:1047 builtin/clone.c:90 +#: builtin/checkout.c:1055 builtin/checkout.c:1057 builtin/clone.c:89 #: builtin/remote.c:169 builtin/remote.c:171 msgid "branch" msgstr "分支" -#: builtin/checkout.c:1046 +#: builtin/checkout.c:1056 msgid "create and checkout a new branch" msgstr "创建并检出一个新的分支" -#: builtin/checkout.c:1048 +#: builtin/checkout.c:1058 msgid "create/reset and checkout a branch" msgstr "创建/é‡ç½®å¹¶æ£€å‡ºä¸€ä¸ªåˆ†æ”¯" -#: builtin/checkout.c:1049 +#: builtin/checkout.c:1059 msgid "create reflog for new branch" msgstr "为新的分支创建引用日志" -#: builtin/checkout.c:1050 +#: builtin/checkout.c:1060 msgid "detach the HEAD at named commit" msgstr "æˆä¸ºæŒ‡å‘该æ交的分离头指针" -#: builtin/checkout.c:1051 +#: builtin/checkout.c:1061 msgid "set upstream info for new branch" msgstr "为新的分支设置上游信æ¯" -#: builtin/checkout.c:1053 +#: builtin/checkout.c:1063 msgid "new branch" msgstr "新分支" -#: builtin/checkout.c:1053 +#: builtin/checkout.c:1063 msgid "new unparented branch" msgstr "新的没有父æ交的分支" -#: builtin/checkout.c:1054 +#: builtin/checkout.c:1064 msgid "checkout our version for unmerged files" msgstr "对尚未åˆå¹¶çš„文件检出我们的版本" -#: builtin/checkout.c:1056 +#: builtin/checkout.c:1066 msgid "checkout their version for unmerged files" msgstr "对尚未åˆå¹¶çš„文件检出他们的版本" -#: builtin/checkout.c:1058 +#: builtin/checkout.c:1068 msgid "force checkout (throw away local modifications)" msgstr "强制检出(丢弃本地修改)" -#: builtin/checkout.c:1059 +#: builtin/checkout.c:1069 msgid "perform a 3-way merge with the new branch" msgstr "和新的分支执行三路åˆå¹¶" -#: builtin/checkout.c:1060 builtin/merge.c:217 +#: builtin/checkout.c:1070 builtin/merge.c:232 msgid "update ignored files (default)" msgstr "更新忽略的文件(默认)" -#: builtin/checkout.c:1061 builtin/log.c:1158 parse-options.h:245 +#: builtin/checkout.c:1071 builtin/log.c:1208 parse-options.h:249 msgid "style" msgstr "é£Žæ ¼" -#: builtin/checkout.c:1062 +#: builtin/checkout.c:1072 msgid "conflict style (merge or diff3)" msgstr "冲çªè¾“å‡ºé£Žæ ¼ï¼ˆmerge 或 diff3)" -#: builtin/checkout.c:1065 +#: builtin/checkout.c:1075 msgid "do not limit pathspecs to sparse entries only" msgstr "对路径ä¸åšç¨€ç–检出的é™åˆ¶" -#: builtin/checkout.c:1067 +#: builtin/checkout.c:1077 msgid "second guess 'git checkout no-such-branch'" msgstr "å†è€…猜测'git checkout no-such-branch'" -#: builtin/checkout.c:1091 +#: builtin/checkout.c:1101 msgid "-b, -B and --orphan are mutually exclusive" msgstr "-bã€-B å’Œ --orphan 是互斥的" -#: builtin/checkout.c:1108 +#: builtin/checkout.c:1118 msgid "--track needs a branch name" msgstr "--track 需è¦ä¸€ä¸ªåˆ†æ”¯å" -#: builtin/checkout.c:1115 +#: builtin/checkout.c:1125 msgid "Missing branch name; try -b" msgstr "缺少分支åï¼›å°è¯• -b" -#: builtin/checkout.c:1150 +#: builtin/checkout.c:1160 msgid "invalid path specification" msgstr "æ— æ•ˆçš„è·¯å¾„è§„æ ¼" -#: builtin/checkout.c:1157 +#: builtin/checkout.c:1167 #, c-format msgid "" "Cannot update paths and switch to branch '%s' at the same time.\n" @@ -3303,227 +3398,330 @@ msgstr "" "ä¸èƒ½åŒæ—¶æ›´æ–°è·¯å¾„并切æ¢åˆ°åˆ†æ”¯'%s'。\n" "您是想è¦æ£€å‡º '%s' 但其未能解æžä¸ºæ交么?" -#: builtin/checkout.c:1162 +#: builtin/checkout.c:1172 #, c-format msgid "git checkout: --detach does not take a path argument '%s'" msgstr "git checkout:--detach ä¸èƒ½æŽ¥æ”¶è·¯å¾„å‚æ•° '%s'" -#: builtin/checkout.c:1166 +#: builtin/checkout.c:1176 msgid "" "git checkout: --ours/--theirs, --force and --merge are incompatible when\n" "checking out of the index." msgstr "" "git checkout:在从索引检出时,--ours/--theirsã€--force å’Œ --merge ä¸å…¼å®¹ã€‚" -#: builtin/clean.c:20 -msgid "git clean [-d] [-f] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." -msgstr "git clean [-d] [-f] [-n] [-q] [-e <模å¼>] [-x | -X] [--] <路径>..." +#: builtin/clean.c:25 +msgid "" +"git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..." +msgstr "" +"git clean [-d] [-f] [-i] [-n] [-q] [-e <模å¼>] [-x | -X] [--] <路径>..." -#: builtin/clean.c:24 +#: builtin/clean.c:29 #, c-format msgid "Removing %s\n" msgstr "æ£åˆ 除 %s\n" -#: builtin/clean.c:25 +#: builtin/clean.c:30 #, c-format msgid "Would remove %s\n" msgstr "å°†åˆ é™¤ %s\n" -#: builtin/clean.c:26 +#: builtin/clean.c:31 #, c-format msgid "Skipping repository %s\n" msgstr "忽略版本库 %s\n" -#: builtin/clean.c:27 +#: builtin/clean.c:32 #, c-format msgid "Would skip repository %s\n" msgstr "将忽略版本库 %s\n" -#: builtin/clean.c:28 +#: builtin/clean.c:33 #, c-format msgid "failed to remove %s" msgstr "æ— æ³•åˆ é™¤ %s" -#: builtin/clean.c:160 +#: builtin/clean.c:293 +msgid "" +"Prompt help:\n" +"1 - select a numbered item\n" +"foo - select item based on unique prefix\n" +" - (empty) select nothing" +msgstr "" +"帮助:\n" +"1 - 通过编å·é€‰æ‹©ä¸€ä¸ªé€‰é¡¹\n" +"foo - é€šè¿‡æ ‡é¢˜é€‰æ‹©ä¸€ä¸ªé€‰é¡¹\n" +" - (空)什么也ä¸é€‰æ‹©" + +#: builtin/clean.c:297 +msgid "" +"Prompt help:\n" +"1 - select a single item\n" +"3-5 - select a range of items\n" +"2-3,6-9 - select multiple ranges\n" +"foo - select item based on unique prefix\n" +"-... - unselect specified items\n" +"* - choose all items\n" +" - (empty) finish selecting" +msgstr "" +"帮助:\n" +"1 - 选择一个选项\n" +"3-5 - 选择一个范围内的所有选项\n" +"2-3,6-9 - 选择多个范围内的所有选项\n" +"foo - é€šè¿‡æ ‡é¢˜é€‰æ‹©ä¸€ä¸ªé€‰é¡¹\n" +"-... - å选特定的选项\n" +"* - 选择所有选项\n" +" - (空)结æŸé€‰æ‹©" + +#: builtin/clean.c:515 +#, c-format +msgid "Huh (%s)?" +msgstr "嗯(%s)?" + +#: builtin/clean.c:658 +#, c-format +msgid "Input ignore patterns>> " +msgstr "输入模版以排除æ¡ç›®>> " + +#: builtin/clean.c:695 +#, c-format +msgid "WARNING: Cannot find items matched by: %s" +msgstr "è¦å‘Šï¼šæ— 法找到和 %s 匹é…çš„æ¡ç›®" + +#: builtin/clean.c:716 +msgid "Select items to delete" +msgstr "选择è¦åˆ 除的æ¡ç›®" + +#: builtin/clean.c:756 +#, c-format +msgid "remove %s? " +msgstr "åˆ é™¤ %s?" + +#: builtin/clean.c:781 +msgid "Bye." +msgstr "å†è§ã€‚" + +#: builtin/clean.c:789 +msgid "" +"clean - start cleaning\n" +"filter by pattern - exclude items from deletion\n" +"select by numbers - select items to be deleted by numbers\n" +"ask each - confirm each deletion (like \"rm -i\")\n" +"quit - stop cleaning\n" +"help - this screen\n" +"? - help for prompt selection" +msgstr "" +"clean - 开始清ç†\n" +"filter by pattern - 通过模版排除è¦åˆ 除的æ¡ç›®\n" +"select by numbers - 通过数å—选择è¦åˆ 除的æ¡ç›®\n" +"ask each - é’ˆå¯¹åˆ é™¤é€ä¸€è¯¢é—®ï¼ˆå°±åƒ \"rm -i\")\n" +"quit - åœæ¢åˆ 除并退出\n" +"help - 显示本帮助\n" +"? - 显示如何在æ示符下选择的帮助" + +#: builtin/clean.c:816 +msgid "*** Commands ***" +msgstr "*** 命令 ***" + +#: builtin/clean.c:817 +msgid "What now" +msgstr "请选择" + +#: builtin/clean.c:825 +msgid "Would remove the following item:" +msgid_plural "Would remove the following items:" +msgstr[0] "å°†åˆ é™¤å¦‚ä¸‹æ¡ç›®ï¼š" +msgstr[1] "å°†åˆ é™¤å¦‚ä¸‹æ¡ç›®ï¼š" + +#: builtin/clean.c:842 +msgid "No more files to clean, exiting." +msgstr "没有è¦æ¸…ç†çš„文件,退出。" + +#: builtin/clean.c:874 msgid "do not print names of files removed" msgstr "ä¸æ‰“å°åˆ 除文件的å称" -#: builtin/clean.c:162 +#: builtin/clean.c:876 msgid "force" msgstr "强制" -#: builtin/clean.c:164 +#: builtin/clean.c:877 +msgid "interactive cleaning" +msgstr "交互å¼æ¸…除" + +#: builtin/clean.c:879 msgid "remove whole directories" msgstr "åˆ é™¤æ•´ä¸ªç›®å½•" -#: builtin/clean.c:165 builtin/describe.c:412 builtin/grep.c:717 -#: builtin/ls-files.c:487 builtin/name-rev.c:231 builtin/show-ref.c:182 +#: builtin/clean.c:880 builtin/describe.c:420 builtin/grep.c:716 +#: builtin/ls-files.c:493 builtin/name-rev.c:315 builtin/show-ref.c:186 msgid "pattern" msgstr "模å¼" -#: builtin/clean.c:166 +#: builtin/clean.c:881 msgid "add <pattern> to ignore rules" msgstr "æ·»åŠ <模å¼>到忽略规则" -#: builtin/clean.c:167 +#: builtin/clean.c:882 msgid "remove ignored files, too" msgstr "ä¹Ÿåˆ é™¤å¿½ç•¥çš„æ–‡ä»¶" -#: builtin/clean.c:169 +#: builtin/clean.c:884 msgid "remove only ignored files" msgstr "åªåˆ 除忽略的文件" -#: builtin/clean.c:187 +#: builtin/clean.c:902 msgid "-x and -X cannot be used together" msgstr "-x å’Œ -X ä¸èƒ½åŒæ—¶ä½¿ç”¨" -#: builtin/clean.c:191 +#: builtin/clean.c:906 msgid "" -"clean.requireForce set to true and neither -n nor -f given; refusing to clean" +"clean.requireForce set to true and neither -i, -n nor -f given; refusing to " +"clean" msgstr "" -"clean.requireForce 设置为 true 且未æä¾› -n 或 -f 选项,拒ç»æ‰§è¡Œæ¸…ç†åŠ¨ä½œ" +"clean.requireForce 设置为 true 且未æä¾› -iã€-n 或 -f 选项,拒ç»æ‰§è¡Œæ¸…ç†åŠ¨ä½œ" -#: builtin/clean.c:194 +#: builtin/clean.c:909 msgid "" -"clean.requireForce defaults to true and neither -n nor -f given; refusing to " -"clean" +"clean.requireForce defaults to true and neither -i, -n nor -f given; " +"refusing to clean" msgstr "" -"clean.requireForce 默认为 true 且未æä¾› -n 或 -f 选项,拒ç»æ‰§è¡Œæ¸…ç†åŠ¨ä½œ" +"clean.requireForce 默认为 true 且未æä¾› -iã€-n 或 -f 选项,拒ç»æ‰§è¡Œæ¸…ç†åŠ¨ä½œ" -#: builtin/clone.c:37 +#: builtin/clone.c:36 msgid "git clone [options] [--] <repo> [<dir>]" msgstr "git clone [选项] [--] <版本库> [<路径>]" -#: builtin/clone.c:65 builtin/fetch.c:82 builtin/merge.c:214 -#: builtin/push.c:436 +#: builtin/clone.c:64 builtin/fetch.c:82 builtin/merge.c:229 +#: builtin/push.c:462 msgid "force progress reporting" msgstr "强制显示进度报告" -#: builtin/clone.c:67 +#: builtin/clone.c:66 msgid "don't create a checkout" msgstr "ä¸åˆ›å»ºä¸€ä¸ªæ£€å‡º" -#: builtin/clone.c:68 builtin/clone.c:70 builtin/init-db.c:488 +#: builtin/clone.c:67 builtin/clone.c:69 builtin/init-db.c:488 msgid "create a bare repository" msgstr "创建一个裸版本库" -#: builtin/clone.c:73 +#: builtin/clone.c:72 msgid "create a mirror repository (implies bare)" msgstr "创建一个镜åƒç‰ˆæœ¬åº“(也是裸版本库)" -#: builtin/clone.c:75 +#: builtin/clone.c:74 msgid "to clone from a local repository" msgstr "从本地版本库克隆" -#: builtin/clone.c:77 +#: builtin/clone.c:76 msgid "don't use local hardlinks, always copy" msgstr "ä¸ä½¿ç”¨æœ¬åœ°ç¡¬é“¾æŽ¥ï¼Œå§‹ç»ˆå¤åˆ¶" -#: builtin/clone.c:79 +#: builtin/clone.c:78 msgid "setup as shared repository" msgstr "设置为共享版本库" -#: builtin/clone.c:81 builtin/clone.c:83 +#: builtin/clone.c:80 builtin/clone.c:82 msgid "initialize submodules in the clone" msgstr "在克隆时åˆå§‹åŒ–å模组" -#: builtin/clone.c:84 builtin/init-db.c:485 +#: builtin/clone.c:83 builtin/init-db.c:485 msgid "template-directory" msgstr "模æ¿ç›®å½•" -#: builtin/clone.c:85 builtin/init-db.c:486 +#: builtin/clone.c:84 builtin/init-db.c:486 msgid "directory from which templates will be used" msgstr "模æ¿ç›®å½•å°†è¢«ä½¿ç”¨" -#: builtin/clone.c:87 +#: builtin/clone.c:86 msgid "reference repository" msgstr "引用版本库" -#: builtin/clone.c:88 builtin/column.c:26 builtin/merge-file.c:44 +#: builtin/clone.c:87 builtin/column.c:26 builtin/merge-file.c:44 msgid "name" msgstr "å称" -#: builtin/clone.c:89 +#: builtin/clone.c:88 msgid "use <name> instead of 'origin' to track upstream" msgstr "使用<å称>而ä¸æ˜¯ 'origin' 去跟踪上游" -#: builtin/clone.c:91 +#: builtin/clone.c:90 msgid "checkout <branch> instead of the remote's HEAD" msgstr "检出<分支>而ä¸æ˜¯è¿œç¨‹HEAD" -#: builtin/clone.c:93 +#: builtin/clone.c:92 msgid "path to git-upload-pack on the remote" msgstr "远程 git-upload-pack 路径" -#: builtin/clone.c:94 builtin/fetch.c:83 builtin/grep.c:662 +#: builtin/clone.c:93 builtin/fetch.c:83 builtin/grep.c:661 msgid "depth" msgstr "深度" -#: builtin/clone.c:95 +#: builtin/clone.c:94 msgid "create a shallow clone of that depth" msgstr "创建一个指定深度的浅克隆" -#: builtin/clone.c:97 +#: builtin/clone.c:96 msgid "clone only one branch, HEAD or --branch" msgstr "åªå…‹éš†ä¸€ä¸ªåˆ†æ”¯ã€HEAD 或 --branch" -#: builtin/clone.c:98 builtin/init-db.c:494 +#: builtin/clone.c:97 builtin/init-db.c:494 msgid "gitdir" msgstr "git目录" -#: builtin/clone.c:99 builtin/init-db.c:495 +#: builtin/clone.c:98 builtin/init-db.c:495 msgid "separate git dir from working tree" msgstr "git目录和工作区分离" -#: builtin/clone.c:100 +#: builtin/clone.c:99 msgid "key=value" msgstr "key=value" -#: builtin/clone.c:101 +#: builtin/clone.c:100 msgid "set config inside the new repository" msgstr "在新版本库ä¸è®¾ç½®é…置信æ¯" -#: builtin/clone.c:254 +#: builtin/clone.c:253 #, c-format msgid "reference repository '%s' is not a local repository." msgstr "引用版本库 '%s' ä¸æ˜¯ä¸€ä¸ªæœ¬åœ°ç‰ˆæœ¬åº“。" -#: builtin/clone.c:317 +#: builtin/clone.c:316 #, c-format msgid "failed to create directory '%s'" msgstr "æ— æ³•åˆ›å»ºç›®å½• '%s'" -#: builtin/clone.c:319 builtin/diff.c:77 +#: builtin/clone.c:318 builtin/diff.c:77 #, c-format msgid "failed to stat '%s'" msgstr "æ— æ³•æžšä¸¾ '%s' 状æ€" -#: builtin/clone.c:321 +#: builtin/clone.c:320 #, c-format msgid "%s exists and is not a directory" msgstr "%s å˜åœ¨ä¸”ä¸æ˜¯ä¸€ä¸ªç›®å½•" -#: builtin/clone.c:335 +#: builtin/clone.c:334 #, c-format msgid "failed to stat %s\n" msgstr "æ— æ³•æžšä¸¾ %s 状æ€\n" -#: builtin/clone.c:357 +#: builtin/clone.c:356 #, c-format msgid "failed to create link '%s'" msgstr "æ— æ³•åˆ›å»ºé“¾æŽ¥ '%s'" -#: builtin/clone.c:361 +#: builtin/clone.c:360 #, c-format msgid "failed to copy file to '%s'" msgstr "æ— æ³•æ‹·è´æ–‡ä»¶è‡³ '%s'" -#: builtin/clone.c:384 +#: builtin/clone.c:383 #, c-format msgid "done.\n" msgstr "完æˆã€‚\n" -#: builtin/clone.c:397 +#: builtin/clone.c:396 msgid "" "Clone succeeded, but checkout failed.\n" "You can inspect what was checked out with 'git status'\n" @@ -3533,90 +3731,104 @@ msgstr "" "您å¯ä»¥é€šè¿‡ 'git status' 检查哪些已被检出,然åŽä½¿ç”¨å‘½ä»¤\n" "'git checkout -f HEAD' é‡è¯•\n" -#: builtin/clone.c:476 +#: builtin/clone.c:475 #, c-format msgid "Could not find remote branch %s to clone." msgstr "ä¸èƒ½å‘现è¦å…‹éš†çš„远程分支 %s。" -#: builtin/clone.c:550 +#: builtin/clone.c:555 +#, c-format +msgid "Checking connectivity... " +msgstr "检查连接... " + +#: builtin/clone.c:558 msgid "remote did not send all necessary objects" msgstr "远程没有å‘é€æ‰€æœ‰å¿…须的对象" -#: builtin/clone.c:610 +#: builtin/clone.c:560 +#, c-format +msgid "done\n" +msgstr "完æˆ\n" + +#: builtin/clone.c:621 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" msgstr "远程 HEAD 指å‘一个ä¸å˜åœ¨çš„å¼•ç”¨ï¼Œæ— æ³•æ£€å‡ºã€‚\n" -#: builtin/clone.c:641 +#: builtin/clone.c:652 msgid "unable to checkout working tree" msgstr "ä¸èƒ½æ£€å‡ºå·¥ä½œåŒº" -#: builtin/clone.c:749 +#: builtin/clone.c:760 msgid "Too many arguments." msgstr "太多å‚数。" -#: builtin/clone.c:753 +#: builtin/clone.c:764 msgid "You must specify a repository to clone." msgstr "您必须指定一个版本库æ¥å…‹éš†ã€‚" -#: builtin/clone.c:764 +#: builtin/clone.c:775 #, c-format msgid "--bare and --origin %s options are incompatible." msgstr "--bare å’Œ --origin %s 选项ä¸å…¼å®¹ã€‚" -#: builtin/clone.c:767 +#: builtin/clone.c:778 msgid "--bare and --separate-git-dir are incompatible." msgstr "--bare å’Œ --separate-git-dir 选项ä¸å…¼å®¹ã€‚" -#: builtin/clone.c:780 +#: builtin/clone.c:791 #, c-format msgid "repository '%s' does not exist" msgstr "版本库 '%s' ä¸å˜åœ¨" -#: builtin/clone.c:785 +#: builtin/clone.c:796 msgid "--depth is ignored in local clones; use file:// instead." msgstr "--depth 在本地克隆被忽略,改为 file:// å议试试。" -#: builtin/clone.c:795 +#: builtin/clone.c:798 +msgid "--local is ignored" +msgstr "--local 被忽略" + +#: builtin/clone.c:808 #, c-format msgid "destination path '%s' already exists and is not an empty directory." msgstr "ç›®æ ‡è·¯å¾„ '%s' å·²ç»å˜åœ¨ï¼Œå¹¶ä¸”ä¸æ˜¯ä¸€ä¸ªç©ºç›®å½•ã€‚" -#: builtin/clone.c:805 +#: builtin/clone.c:818 #, c-format msgid "working tree '%s' already exists." msgstr "工作区 '%s' å·²ç»å˜åœ¨ã€‚" -#: builtin/clone.c:818 builtin/clone.c:830 +#: builtin/clone.c:831 builtin/clone.c:843 #, c-format msgid "could not create leading directories of '%s'" msgstr "ä¸èƒ½ä¸º '%s' 创建先导目录" -#: builtin/clone.c:821 +#: builtin/clone.c:834 #, c-format msgid "could not create work tree dir '%s'." msgstr "ä¸èƒ½ä¸º '%s' 创建工作区目录。" -#: builtin/clone.c:840 +#: builtin/clone.c:853 #, c-format msgid "Cloning into bare repository '%s'...\n" msgstr "克隆到裸版本库 '%s'...\n" -#: builtin/clone.c:842 +#: builtin/clone.c:855 #, c-format msgid "Cloning into '%s'...\n" msgstr "æ£å…‹éš†åˆ° '%s'...\n" -#: builtin/clone.c:877 +#: builtin/clone.c:890 #, c-format msgid "Don't know how to clone %s" msgstr "ä¸çŸ¥é“如何克隆 %s" -#: builtin/clone.c:926 +#: builtin/clone.c:942 #, c-format msgid "Remote branch %s not found in upstream %s" msgstr "远程分支 %s 在上游 %s 未å‘现" -#: builtin/clone.c:933 +#: builtin/clone.c:949 msgid "You appear to have cloned an empty repository." msgstr "您似乎克隆了一个空版本库。" @@ -3652,15 +3864,15 @@ msgstr "两列之间的填充空间" msgid "--command must be the first argument" msgstr "--command 必须是第一个å‚æ•°" -#: builtin/commit.c:34 +#: builtin/commit.c:35 msgid "git commit [options] [--] <pathspec>..." msgstr "git commit [选项] [--] <路径匹é…>..." -#: builtin/commit.c:39 +#: builtin/commit.c:40 msgid "git status [options] [--] <pathspec>..." msgstr "git status [选项] [--] <路径匹é…>..." -#: builtin/commit.c:44 +#: builtin/commit.c:45 msgid "" "Your name and email address were configured automatically based\n" "on your username and hostname. Please check that they are accurate.\n" @@ -3683,7 +3895,7 @@ msgstr "" "\n" " git commit --amend --reset-author\n" -#: builtin/commit.c:56 +#: builtin/commit.c:57 msgid "" "You asked to amend the most recent commit, but doing so would make\n" "it empty. You can repeat your command with --allow-empty, or you can\n" @@ -3692,109 +3904,127 @@ msgstr "" "您è¦ä¿®è¡¥æœ€è¿‘çš„æ交,但这么åšä¼šè®©å®ƒæˆä¸ºç©ºæ交。您å¯ä»¥é‡å¤æ‚¨çš„命令并带上\n" "--allow-empty 选项,或者您å¯ç”¨å‘½ä»¤ \"git reset HEAD^\" æ•´ä¸ªåˆ é™¤è¯¥æ交。\n" -#: builtin/commit.c:61 +#: builtin/commit.c:62 msgid "" "The previous cherry-pick is now empty, possibly due to conflict resolution.\n" "If you wish to commit it anyway, use:\n" "\n" " git commit --allow-empty\n" "\n" -"Otherwise, please use 'git reset'\n" msgstr "" "之å‰çš„拣选æ“作现在是一个空æ交,å¯èƒ½æ˜¯ç”±å†²çªè§£å†³å¯¼è‡´çš„ã€‚å¦‚æžœæ‚¨æ— è®ºå¦‚ä½•\n" "也è¦æ交,使用命令:\n" "\n" " git commit --allow-empty\n" "\n" -"å¦åˆ™ï¼Œè¯·ä½¿ç”¨å‘½ä»¤ 'git reset'\n" -#: builtin/commit.c:260 +#: builtin/commit.c:69 +msgid "Otherwise, please use 'git reset'\n" +msgstr "å¦åˆ™ï¼Œè¯·ä½¿ç”¨å‘½ä»¤ 'git reset'\n" + +#: builtin/commit.c:72 +msgid "" +"If you wish to skip this commit, use:\n" +"\n" +" git reset\n" +"\n" +"Then \"git cherry-pick --continue\" will resume cherry-picking\n" +"the remaining commits.\n" +msgstr "" +"如果您想跳过这个æ交,使用命令:\n" +"\n" +" git reset\n" +"\n" +"然åŽæ‰§è¡Œ \"git cherry-pick --continue\" 继ç»å¯¹å…¶ä½™æ交执行拣选\n" +"æ“作。\n" + +#: builtin/commit.c:279 msgid "failed to unpack HEAD tree object" msgstr "æ— æ³•è§£åŒ… HEAD æ ‘å¯¹è±¡" -#: builtin/commit.c:302 +#: builtin/commit.c:321 msgid "unable to create temporary index" msgstr "ä¸èƒ½åˆ›å»ºä¸´æ—¶ç´¢å¼•" -#: builtin/commit.c:308 +#: builtin/commit.c:327 msgid "interactive add failed" msgstr "交互å¼æ·»åŠ 失败" -#: builtin/commit.c:341 builtin/commit.c:362 builtin/commit.c:412 +#: builtin/commit.c:360 builtin/commit.c:381 builtin/commit.c:431 msgid "unable to write new_index file" msgstr "æ— æ³•å†™ new_index 文件" -#: builtin/commit.c:393 +#: builtin/commit.c:412 msgid "cannot do a partial commit during a merge." msgstr "在åˆå¹¶è¿‡ç¨‹ä¸ä¸èƒ½åšéƒ¨åˆ†æ交。" -#: builtin/commit.c:395 +#: builtin/commit.c:414 msgid "cannot do a partial commit during a cherry-pick." msgstr "在拣选过程ä¸ä¸èƒ½åšéƒ¨åˆ†æ交。" -#: builtin/commit.c:405 +#: builtin/commit.c:424 msgid "cannot read the index" msgstr "æ— æ³•è¯»å–索引" -#: builtin/commit.c:425 +#: builtin/commit.c:444 msgid "unable to write temporary index file" msgstr "æ— æ³•å†™ä¸´æ—¶ç´¢å¼•æ–‡ä»¶" -#: builtin/commit.c:513 builtin/commit.c:519 +#: builtin/commit.c:535 builtin/commit.c:541 #, c-format msgid "invalid commit: %s" msgstr "æ— æ•ˆçš„æ交:%s" -#: builtin/commit.c:542 +#: builtin/commit.c:563 msgid "malformed --author parameter" msgstr "éžæ³•çš„ --author å‚æ•°" -#: builtin/commit.c:562 +#: builtin/commit.c:583 #, c-format msgid "Malformed ident string: '%s'" msgstr "éžæ³•çš„身份å—符串:'%s'" -#: builtin/commit.c:600 builtin/commit.c:633 builtin/commit.c:956 +#: builtin/commit.c:621 builtin/commit.c:654 builtin/commit.c:982 #, c-format msgid "could not lookup commit %s" msgstr "ä¸èƒ½æŸ¥è¯¢æ交 %s" -#: builtin/commit.c:612 builtin/shortlog.c:270 +#: builtin/commit.c:633 builtin/shortlog.c:271 #, c-format msgid "(reading log message from standard input)\n" msgstr "(æ£ä»Žæ ‡å‡†è¾“å…¥ä¸è¯»å–日志信æ¯ï¼‰\n" -#: builtin/commit.c:614 +#: builtin/commit.c:635 msgid "could not read log from standard input" msgstr "ä¸èƒ½ä»Žæ ‡å‡†è¾“å…¥ä¸è¯»å–日志信æ¯" -#: builtin/commit.c:618 +#: builtin/commit.c:639 #, c-format msgid "could not read log file '%s'" msgstr "ä¸èƒ½è¯»å–日志文件 '%s'" -#: builtin/commit.c:624 +#: builtin/commit.c:645 msgid "commit has empty message" msgstr "æ交说明为空" -#: builtin/commit.c:640 +#: builtin/commit.c:661 msgid "could not read MERGE_MSG" msgstr "ä¸èƒ½è¯»å– MERGE_MSG" -#: builtin/commit.c:644 +#: builtin/commit.c:665 msgid "could not read SQUASH_MSG" msgstr "ä¸èƒ½è¯»å– SQUASH_MSG" -#: builtin/commit.c:648 +#: builtin/commit.c:669 #, c-format msgid "could not read '%s'" msgstr "ä¸èƒ½è¯»å– '%s'" -#: builtin/commit.c:709 +#: builtin/commit.c:730 msgid "could not write commit template" msgstr "ä¸èƒ½å†™æ交模版" -#: builtin/commit.c:720 +#: builtin/commit.c:741 #, c-format msgid "" "\n" @@ -3808,7 +4038,7 @@ msgstr "" "\t%s\n" "然åŽé‡è¯•ã€‚\n" -#: builtin/commit.c:725 +#: builtin/commit.c:746 #, c-format msgid "" "\n" @@ -3822,7 +4052,7 @@ msgstr "" "\t%s\n" "然åŽé‡è¯•ã€‚\n" -#: builtin/commit.c:737 +#: builtin/commit.c:758 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" @@ -3831,7 +4061,7 @@ msgstr "" "请为您的å˜æ›´è¾“å…¥æ交说明。以 '%c' 开始的行将被忽略,而一个空的æ交\n" "说明将会终æ¢æ交。\n" -#: builtin/commit.c:742 +#: builtin/commit.c:763 #, c-format msgid "" "Please enter the commit message for your changes. Lines starting\n" @@ -3842,355 +4072,355 @@ msgstr "" "也å¯ä»¥åˆ 除它们。一个空的æ交说明将会终æ¢æ交。\n" # 译者:为ä¿è¯åœ¨è¾“出ä¸å¯¹é½ï¼Œæ³¨æ„调整å¥ä¸ç©ºæ ¼ï¼ -#: builtin/commit.c:755 +#: builtin/commit.c:776 #, c-format msgid "%sAuthor: %s" msgstr "%s作者: %s" # 译者:为ä¿è¯åœ¨è¾“出ä¸å¯¹é½ï¼Œæ³¨æ„调整å¥ä¸ç©ºæ ¼ï¼ -#: builtin/commit.c:762 +#: builtin/commit.c:783 #, c-format msgid "%sCommitter: %s" msgstr "%sæ交者: %s" -#: builtin/commit.c:782 +#: builtin/commit.c:803 msgid "Cannot read index" msgstr "æ— æ³•è¯»å–索引" -#: builtin/commit.c:819 +#: builtin/commit.c:845 msgid "Error building trees" msgstr "æ— æ³•åˆ›å»ºæ ‘å¯¹è±¡" -#: builtin/commit.c:834 builtin/tag.c:359 +#: builtin/commit.c:860 builtin/tag.c:359 #, c-format msgid "Please supply the message using either -m or -F option.\n" msgstr "请使用 -m 或 -F 选项æä¾›æ交说明。\n" -#: builtin/commit.c:931 +#: builtin/commit.c:957 #, c-format msgid "No existing author found with '%s'" msgstr "æ²¡æœ‰æ‰¾åˆ°åŒ¹é… '%s' 的作者" -#: builtin/commit.c:946 builtin/commit.c:1140 +#: builtin/commit.c:972 builtin/commit.c:1208 #, c-format msgid "Invalid untracked files mode '%s'" msgstr "æ— æ•ˆçš„æœªè¿½è¸ªæ–‡ä»¶å‚æ•° '%s'" -#: builtin/commit.c:976 +#: builtin/commit.c:1009 +msgid "--long and -z are incompatible" +msgstr "--long å’Œ -z 选项ä¸å…¼å®¹" + +#: builtin/commit.c:1039 msgid "Using both --reset-author and --author does not make sense" msgstr "åŒæ—¶ä½¿ç”¨ --reset-author å’Œ --author 没有æ„义" -#: builtin/commit.c:987 +#: builtin/commit.c:1050 msgid "You have nothing to amend." msgstr "您没有å¯ä¿®è¡¥çš„æ交。" -#: builtin/commit.c:990 +#: builtin/commit.c:1053 msgid "You are in the middle of a merge -- cannot amend." msgstr "您æ£å¤„于一个åˆå¹¶è¿‡ç¨‹ä¸ -- æ— æ³•ä¿®è¡¥æ交。" -#: builtin/commit.c:992 +#: builtin/commit.c:1055 msgid "You are in the middle of a cherry-pick -- cannot amend." msgstr "您æ£å¤„äºŽä¸€ä¸ªæ‹£é€‰è¿‡ç¨‹ä¸ -- æ— æ³•ä¿®è¡¥æ交。" -#: builtin/commit.c:995 +#: builtin/commit.c:1058 msgid "Options --squash and --fixup cannot be used together" msgstr "选项 --squash å’Œ --fixup ä¸èƒ½åŒæ—¶ä½¿ç”¨" -#: builtin/commit.c:1005 +#: builtin/commit.c:1068 msgid "Only one of -c/-C/-F/--fixup can be used." msgstr "åªèƒ½ç”¨ä¸€ä¸ª -c/-C/-F/--fixup 选项。" -#: builtin/commit.c:1007 +#: builtin/commit.c:1070 msgid "Option -m cannot be combined with -c/-C/-F/--fixup." msgstr "选项 -m ä¸èƒ½å’Œ -c/-C/-F/--fixup åŒæ—¶ä½¿ç”¨ã€‚" -#: builtin/commit.c:1015 +#: builtin/commit.c:1078 msgid "--reset-author can be used only with -C, -c or --amend." msgstr "--reset-author åªèƒ½å’Œ -Cã€-c 或 --amend åŒæ—¶ä½¿ç”¨ã€‚" -#: builtin/commit.c:1032 +#: builtin/commit.c:1095 msgid "Only one of --include/--only/--all/--interactive/--patch can be used." msgstr "åªèƒ½ç”¨ä¸€ä¸ª --include/--only/--all/--interactive/--patch 选项。" -#: builtin/commit.c:1034 +#: builtin/commit.c:1097 msgid "No paths with --include/--only does not make sense." msgstr "å‚æ•° --include/--only ä¸è·Ÿè·¯å¾„没有æ„义。" -#: builtin/commit.c:1036 +#: builtin/commit.c:1099 msgid "Clever... amending the last one with dirty index." msgstr "èªæ˜Ž... 在索引ä¸å¹²å‡€ä¸‹ä¿®è¡¥æœ€åŽçš„æ交。" -#: builtin/commit.c:1038 +#: builtin/commit.c:1101 msgid "Explicit paths specified without -i nor -o; assuming --only paths..." msgstr "指定了明确的路径而没有使用 -i 或 -o 选项;认为是 --only paths..." -#: builtin/commit.c:1048 builtin/tag.c:575 +#: builtin/commit.c:1111 builtin/tag.c:575 #, c-format msgid "Invalid cleanup mode %s" msgstr "æ— æ•ˆçš„æ¸…ç†æ¨¡å¼ %s" -#: builtin/commit.c:1053 +#: builtin/commit.c:1116 msgid "Paths with -a does not make sense." msgstr "路径和 -a 选项åŒæ—¶ä½¿ç”¨æ²¡æœ‰æ„义。" -#: builtin/commit.c:1059 builtin/commit.c:1194 -msgid "--long and -z are incompatible" -msgstr "--long å’Œ -z 选项ä¸å…¼å®¹" - -#: builtin/commit.c:1154 builtin/commit.c:1390 +#: builtin/commit.c:1222 builtin/commit.c:1455 msgid "show status concisely" msgstr "以简æ´çš„æ ¼å¼æ˜¾ç¤ºçŠ¶æ€" -#: builtin/commit.c:1156 builtin/commit.c:1392 +#: builtin/commit.c:1224 builtin/commit.c:1457 msgid "show branch information" msgstr "显示分支信æ¯" -#: builtin/commit.c:1158 builtin/commit.c:1394 builtin/push.c:426 +#: builtin/commit.c:1226 builtin/commit.c:1459 builtin/push.c:452 msgid "machine-readable output" msgstr "机器å¯è¯»çš„输出" -#: builtin/commit.c:1161 builtin/commit.c:1396 +#: builtin/commit.c:1229 builtin/commit.c:1461 msgid "show status in long format (default)" msgstr "ä»¥é•¿æ ¼å¼æ˜¾ç¤ºçŠ¶æ€ï¼ˆé»˜è®¤ï¼‰" -#: builtin/commit.c:1164 builtin/commit.c:1399 +#: builtin/commit.c:1232 builtin/commit.c:1464 msgid "terminate entries with NUL" msgstr "æ¡ç›®ä»¥NULå—符结尾" -#: builtin/commit.c:1166 builtin/commit.c:1402 builtin/fast-export.c:659 -#: builtin/fast-export.c:662 builtin/tag.c:459 +#: builtin/commit.c:1234 builtin/commit.c:1467 builtin/fast-export.c:667 +#: builtin/fast-export.c:670 builtin/tag.c:459 msgid "mode" msgstr "模å¼" -#: builtin/commit.c:1167 builtin/commit.c:1402 +#: builtin/commit.c:1235 builtin/commit.c:1467 msgid "show untracked files, optional modes: all, normal, no. (Default: all)" msgstr "显示未跟踪的文件,“模å¼â€çš„å¯é€‰å‚数:allã€normalã€no。(默认:all)" -#: builtin/commit.c:1170 +#: builtin/commit.c:1238 msgid "show ignored files" msgstr "显示忽略的文件" -#: builtin/commit.c:1171 parse-options.h:151 +#: builtin/commit.c:1239 parse-options.h:154 msgid "when" msgstr "何时" -#: builtin/commit.c:1172 +#: builtin/commit.c:1240 msgid "" "ignore changes to submodules, optional when: all, dirty, untracked. " "(Default: all)" msgstr "" "忽略å模组的更改,“何时â€çš„å¯é€‰å‚数:allã€dirtyã€untracked。(默认:all)" -#: builtin/commit.c:1174 +#: builtin/commit.c:1242 msgid "list untracked files in columns" msgstr "以列的方å¼æ˜¾ç¤ºæœªè·Ÿè¸ªçš„文件" -#: builtin/commit.c:1248 +#: builtin/commit.c:1313 msgid "couldn't look up newly created commit" msgstr "æ— æ³•æ‰¾åˆ°æ–°åˆ›å»ºçš„æ交" -#: builtin/commit.c:1250 +#: builtin/commit.c:1315 msgid "could not parse newly created commit" msgstr "ä¸èƒ½è§£æžæ–°åˆ›å»ºçš„æ交" -#: builtin/commit.c:1291 +#: builtin/commit.c:1356 msgid "detached HEAD" msgstr "分离头指针" # 译者:ä¸æ–‡å—符串拼接,å¯åˆ 除å‰å¯¼ç©ºæ ¼ -#: builtin/commit.c:1293 +#: builtin/commit.c:1358 msgid " (root-commit)" msgstr "ï¼ˆæ ¹æ交)" -#: builtin/commit.c:1360 +#: builtin/commit.c:1425 msgid "suppress summary after successful commit" msgstr "æ交æˆåŠŸåŽä¸æ˜¾ç¤ºæ¦‚è¿°ä¿¡æ¯" -#: builtin/commit.c:1361 +#: builtin/commit.c:1426 msgid "show diff in commit message template" msgstr "在æ交说明模æ¿é‡Œæ˜¾ç¤ºå·®å¼‚" -#: builtin/commit.c:1363 +#: builtin/commit.c:1428 msgid "Commit message options" msgstr "æ交说明选项" -#: builtin/commit.c:1364 builtin/tag.c:457 +#: builtin/commit.c:1429 builtin/tag.c:457 msgid "read message from file" msgstr "从文件ä¸è¯»å–æ交说明" -#: builtin/commit.c:1365 +#: builtin/commit.c:1430 msgid "author" msgstr "作者" -#: builtin/commit.c:1365 +#: builtin/commit.c:1430 msgid "override author for commit" msgstr "æ交时覆盖作者" -#: builtin/commit.c:1366 builtin/gc.c:178 +#: builtin/commit.c:1431 builtin/gc.c:178 msgid "date" msgstr "日期" -#: builtin/commit.c:1366 +#: builtin/commit.c:1431 msgid "override date for commit" msgstr "æ交时覆盖日期" -#: builtin/commit.c:1367 builtin/merge.c:208 builtin/notes.c:533 -#: builtin/notes.c:690 builtin/tag.c:455 +#: builtin/commit.c:1432 builtin/merge.c:223 builtin/notes.c:405 +#: builtin/notes.c:562 builtin/tag.c:455 msgid "message" msgstr "说明" -#: builtin/commit.c:1367 +#: builtin/commit.c:1432 msgid "commit message" msgstr "æ交说明" -#: builtin/commit.c:1368 +#: builtin/commit.c:1433 msgid "reuse and edit message from specified commit" msgstr "é‡ç”¨å¹¶ç¼–辑指定æ交的æ交说明" -#: builtin/commit.c:1369 +#: builtin/commit.c:1434 msgid "reuse message from specified commit" msgstr "é‡ç”¨æŒ‡å®šæ交的æ交说明" -#: builtin/commit.c:1370 +#: builtin/commit.c:1435 msgid "use autosquash formatted message to fixup specified commit" msgstr "使用 autosquash æ ¼å¼çš„æ交说明用以修æ£æŒ‡å®šçš„æ交" -#: builtin/commit.c:1371 +#: builtin/commit.c:1436 msgid "use autosquash formatted message to squash specified commit" msgstr "使用 autosquash æ ¼å¼çš„æ交说明用以压缩至指定的æ交" -#: builtin/commit.c:1372 +#: builtin/commit.c:1437 msgid "the commit is authored by me now (used with -C/-c/--amend)" msgstr "现在将该æ交的作者改为我(和 -C/-c/--amend å‚数共用)" -#: builtin/commit.c:1373 builtin/log.c:1113 builtin/revert.c:109 +#: builtin/commit.c:1438 builtin/log.c:1160 builtin/revert.c:111 msgid "add Signed-off-by:" msgstr "æ·»åŠ Signed-off-by: ç¾å" -#: builtin/commit.c:1374 +#: builtin/commit.c:1439 msgid "use specified template file" msgstr "使用指定的模æ¿æ–‡ä»¶" -#: builtin/commit.c:1375 +#: builtin/commit.c:1440 msgid "force edit of commit" msgstr "强制编辑æ交" # 译者:å¯é€‰å€¼ï¼Œä¸èƒ½ç¿»è¯‘(或是原文ä¸ç¬”误,应为 mode) -#: builtin/commit.c:1376 +#: builtin/commit.c:1441 msgid "default" msgstr "default" -#: builtin/commit.c:1376 builtin/tag.c:460 +#: builtin/commit.c:1441 builtin/tag.c:460 msgid "how to strip spaces and #comments from message" msgstr "è®¾ç½®å¦‚ä½•åˆ é™¤æäº¤è¯´æ˜Žé‡Œçš„ç©ºæ ¼å’Œ#注释" -#: builtin/commit.c:1377 +#: builtin/commit.c:1442 msgid "include status in commit message template" msgstr "在æ交说明模æ¿é‡ŒåŒ…å«çŠ¶æ€ä¿¡æ¯" -#: builtin/commit.c:1378 builtin/merge.c:215 builtin/tag.c:461 +#: builtin/commit.c:1443 builtin/merge.c:230 builtin/tag.c:461 msgid "key id" msgstr "key id" -#: builtin/commit.c:1379 builtin/merge.c:216 +#: builtin/commit.c:1444 builtin/merge.c:231 msgid "GPG sign commit" msgstr "GPG æ交ç¾å" #. end commit message options -#: builtin/commit.c:1382 +#: builtin/commit.c:1447 msgid "Commit contents options" msgstr "æ交内容选项" -#: builtin/commit.c:1383 +#: builtin/commit.c:1448 msgid "commit all changed files" msgstr "æ交所有改动的文件" -#: builtin/commit.c:1384 +#: builtin/commit.c:1449 msgid "add specified files to index for commit" msgstr "æ·»åŠ æŒ‡å®šçš„æ–‡ä»¶åˆ°ç´¢å¼•åŒºç‰å¾…æ交" -#: builtin/commit.c:1385 +#: builtin/commit.c:1450 msgid "interactively add files" msgstr "交互å¼æ·»åŠ 文件" -#: builtin/commit.c:1386 +#: builtin/commit.c:1451 msgid "interactively add changes" msgstr "交互å¼æ·»åŠ å˜æ›´" -#: builtin/commit.c:1387 +#: builtin/commit.c:1452 msgid "commit only specified files" msgstr "åªæ交指定的文件" -#: builtin/commit.c:1388 +#: builtin/commit.c:1453 msgid "bypass pre-commit hook" msgstr "绕过 pre-commit é’©å" -#: builtin/commit.c:1389 +#: builtin/commit.c:1454 msgid "show what would be committed" msgstr "显示将è¦æ交的内容" -#: builtin/commit.c:1400 +#: builtin/commit.c:1465 msgid "amend previous commit" msgstr "修改先å‰çš„æ交" -#: builtin/commit.c:1401 +#: builtin/commit.c:1466 msgid "bypass post-rewrite hook" msgstr "绕过 post-rewrite é’©å" -#: builtin/commit.c:1406 +#: builtin/commit.c:1471 msgid "ok to record an empty change" msgstr "å…许一个空æ交" -#: builtin/commit.c:1409 +#: builtin/commit.c:1474 msgid "ok to record a change with an empty message" msgstr "å…许空的æ交说明" -#: builtin/commit.c:1441 +#: builtin/commit.c:1507 msgid "could not parse HEAD commit" msgstr "ä¸èƒ½è§£æž HEAD æ交" -#: builtin/commit.c:1479 builtin/merge.c:510 +#: builtin/commit.c:1545 builtin/merge.c:525 #, c-format msgid "could not open '%s' for reading" msgstr "ä¸èƒ½ä¸ºè¯»å…¥æ‰“å¼€ '%s'" -#: builtin/commit.c:1486 +#: builtin/commit.c:1552 #, c-format msgid "Corrupt MERGE_HEAD file (%s)" msgstr "æŸåçš„ MERGE_HEAD 文件(%s)" -#: builtin/commit.c:1493 +#: builtin/commit.c:1559 msgid "could not read MERGE_MODE" msgstr "ä¸èƒ½è¯»å– MERGE_MODE" -#: builtin/commit.c:1512 +#: builtin/commit.c:1578 #, c-format msgid "could not read commit message: %s" msgstr "ä¸èƒ½è¯»å–æ交说明:%s" -#: builtin/commit.c:1526 +#: builtin/commit.c:1592 #, c-format msgid "Aborting commit; you did not edit the message.\n" msgstr "终æ¢æ交;您未更改æ¥è‡ªæ¨¡ç‰ˆçš„æ交说明。\n" -#: builtin/commit.c:1531 +#: builtin/commit.c:1597 #, c-format msgid "Aborting commit due to empty commit message.\n" msgstr "终æ¢æäº¤å› ä¸ºæ交说明为空。\n" -#: builtin/commit.c:1546 builtin/merge.c:847 builtin/merge.c:872 +#: builtin/commit.c:1612 builtin/merge.c:861 builtin/merge.c:886 msgid "failed to write commit object" msgstr "æ— æ³•å†™æ交对象" -#: builtin/commit.c:1567 +#: builtin/commit.c:1633 msgid "cannot lock HEAD ref" msgstr "æ— æ³•é”定 HEAD 引用" -#: builtin/commit.c:1571 +#: builtin/commit.c:1637 msgid "cannot update HEAD ref" msgstr "æ— æ³•æ›´æ–° HEAD 引用" -#: builtin/commit.c:1582 +#: builtin/commit.c:1648 msgid "" "Repository has been updated, but unable to write\n" "new_index file. Check that disk is not full or quota is\n" @@ -4203,115 +4433,123 @@ msgstr "" msgid "git config [options]" msgstr "git config [选项]" -#: builtin/config.c:51 +#: builtin/config.c:52 msgid "Config file location" msgstr "é…置文件ä½ç½®" -#: builtin/config.c:52 +#: builtin/config.c:53 msgid "use global config file" msgstr "使用全局é…置文件" -#: builtin/config.c:53 +#: builtin/config.c:54 msgid "use system config file" msgstr "使用系统级é…置文件" -#: builtin/config.c:54 +#: builtin/config.c:55 msgid "use repository config file" msgstr "使用版本库级é…置文件" -#: builtin/config.c:55 +#: builtin/config.c:56 msgid "use given config file" msgstr "使用指定的é…置文件" -#: builtin/config.c:56 +#: builtin/config.c:57 +msgid "blob-id" +msgstr "æ•°æ®å¯¹è±¡ID" + +#: builtin/config.c:57 +msgid "read config from given blob object" +msgstr "从给定的数æ®å¯¹è±¡è¯»å–é…ç½®" + +#: builtin/config.c:58 msgid "Action" msgstr "æ“作" -#: builtin/config.c:57 +#: builtin/config.c:59 msgid "get value: name [value-regex]" msgstr "获å–值:name [value-regex]" -#: builtin/config.c:58 +#: builtin/config.c:60 msgid "get all values: key [value-regex]" msgstr "获得所有的值:key [value-regex]" -#: builtin/config.c:59 +#: builtin/config.c:61 msgid "get values for regexp: name-regex [value-regex]" msgstr "æ ¹æ®æ£åˆ™è¡¨è¾¾å¼èŽ·å¾—值:name-regex [value-regex]" -#: builtin/config.c:60 +#: builtin/config.c:62 msgid "replace all matching variables: name value [value_regex]" msgstr "替æ¢æ‰€æœ‰åŒ¹é…çš„å˜é‡ï¼šname value [value_regex]" -#: builtin/config.c:61 +#: builtin/config.c:63 msgid "add a new variable: name value" msgstr "æ·»åŠ ä¸€ä¸ªæ–°çš„å˜é‡ï¼šname value" -#: builtin/config.c:62 +#: builtin/config.c:64 msgid "remove a variable: name [value-regex]" msgstr "åˆ é™¤ä¸€ä¸ªå˜é‡ï¼šname [value-regex]" -#: builtin/config.c:63 +#: builtin/config.c:65 msgid "remove all matches: name [value-regex]" msgstr "åˆ é™¤æ‰€æœ‰åŒ¹é…项:name [value-regex]" -#: builtin/config.c:64 +#: builtin/config.c:66 msgid "rename section: old-name new-name" msgstr "é‡å‘½åå°èŠ‚:old-name new-name" -#: builtin/config.c:65 +#: builtin/config.c:67 msgid "remove a section: name" msgstr "åˆ é™¤ä¸€ä¸ªå°èŠ‚:name" -#: builtin/config.c:66 +#: builtin/config.c:68 msgid "list all" msgstr "列出所有" -#: builtin/config.c:67 +#: builtin/config.c:69 msgid "open an editor" msgstr "打开一个编辑器" -#: builtin/config.c:68 builtin/config.c:69 +#: builtin/config.c:70 builtin/config.c:71 msgid "slot" msgstr "slot" -#: builtin/config.c:68 +#: builtin/config.c:70 msgid "find the color configured: [default]" msgstr "找到é…置的颜色:[默认]" -#: builtin/config.c:69 +#: builtin/config.c:71 msgid "find the color setting: [stdout-is-tty]" msgstr "找到颜色设置:[stdout-is-tty]" -#: builtin/config.c:70 +#: builtin/config.c:72 msgid "Type" msgstr "类型" -#: builtin/config.c:71 +#: builtin/config.c:73 msgid "value is \"true\" or \"false\"" msgstr "值是 \"true\" 或 \"false\"" -#: builtin/config.c:72 +#: builtin/config.c:74 msgid "value is decimal number" msgstr "值是å进制数" -#: builtin/config.c:73 +#: builtin/config.c:75 msgid "value is --bool or --int" msgstr "值是 --bool or --int" -#: builtin/config.c:74 +#: builtin/config.c:76 msgid "value is a path (file or directory name)" msgstr "值是一个路径(文件或目录å)" -#: builtin/config.c:75 +#: builtin/config.c:77 msgid "Other" msgstr "其它" -#: builtin/config.c:76 +#: builtin/config.c:78 msgid "terminate values with NUL byte" msgstr "终æ¢å€¼æ˜¯NULå—节" -#: builtin/config.c:77 +#: builtin/config.c:79 msgid "respect include directives on lookup" msgstr "查询时å‚ç…§ include 指令递归查找" @@ -4323,55 +4561,55 @@ msgstr "git count-objects [-v] [-H | --human-readable]" msgid "print sizes in human readable format" msgstr "以用户å¯è¯»çš„æ ¼å¼æ˜¾ç¤ºå¤§å°" -#: builtin/describe.c:15 +#: builtin/describe.c:16 msgid "git describe [options] <committish>*" msgstr "git describe [选项] <æ交å·>*" -#: builtin/describe.c:16 +#: builtin/describe.c:17 msgid "git describe [options] --dirty" msgstr "git describe [选项] --dirty" -#: builtin/describe.c:233 +#: builtin/describe.c:237 #, c-format msgid "annotated tag %s not available" msgstr "注释 tag %s æ— æ•ˆ" -#: builtin/describe.c:237 +#: builtin/describe.c:241 #, c-format msgid "annotated tag %s has no embedded name" msgstr "注释 tag %s 没有嵌入å称" -#: builtin/describe.c:239 +#: builtin/describe.c:243 #, c-format msgid "tag '%s' is really '%s' here" msgstr "tag '%s' 的确是在 '%s'" -#: builtin/describe.c:266 +#: builtin/describe.c:270 #, c-format msgid "Not a valid object name %s" msgstr "ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„对象å %s" -#: builtin/describe.c:269 +#: builtin/describe.c:273 #, c-format msgid "%s is not a valid '%s' object" msgstr "%s ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„ '%s' 对象" -#: builtin/describe.c:286 +#: builtin/describe.c:290 #, c-format msgid "no tag exactly matches '%s'" msgstr "没有 tag å‡†ç¡®åŒ¹é… '%s'" -#: builtin/describe.c:288 +#: builtin/describe.c:292 #, c-format msgid "searching to describe %s\n" msgstr "æœç´¢æè¿° %s\n" -#: builtin/describe.c:328 +#: builtin/describe.c:332 #, c-format msgid "finished search at %s\n" msgstr "完æˆæœç´¢ %s\n" -#: builtin/describe.c:352 +#: builtin/describe.c:359 #, c-format msgid "" "No annotated tags can describe '%s'.\n" @@ -4380,7 +4618,7 @@ msgstr "" "没有注释 tag 能æè¿° '%s'。\n" "然而,有éžæ³¨é‡Š tag:å°è¯• --tags。" -#: builtin/describe.c:356 +#: builtin/describe.c:363 #, c-format msgid "" "No tags can describe '%s'.\n" @@ -4389,12 +4627,12 @@ msgstr "" "没有注释 tag 能æè¿° '%s'。\n" "å°è¯• --always,或者创建一些 tag。" -#: builtin/describe.c:377 +#: builtin/describe.c:384 #, c-format msgid "traversed %lu commits\n" msgstr "å·²é历 %lu 个æ交\n" -#: builtin/describe.c:380 +#: builtin/describe.c:387 #, c-format msgid "" "more than %i tags found; listed %i most recent\n" @@ -4403,59 +4641,63 @@ msgstr "" "å‘现多于 %i 个 tag,列出最近的 %i 个\n" "在 %s 放弃æœç´¢\n" -#: builtin/describe.c:402 +#: builtin/describe.c:409 msgid "find the tag that comes after the commit" msgstr "寻找æ交之åŽçš„ tag(用于æè¿°æ交)" -#: builtin/describe.c:403 +#: builtin/describe.c:410 msgid "debug search strategy on stderr" msgstr "åœ¨æ ‡å‡†é”™è¯¯ä¸Šè°ƒè¯•æœç´¢ç–ç•¥" -#: builtin/describe.c:404 +#: builtin/describe.c:411 msgid "use any ref" msgstr "使用任æ„引用" -#: builtin/describe.c:405 +#: builtin/describe.c:412 msgid "use any tag, even unannotated" msgstr "ä½¿ç”¨ä»»æ„ tag,å³ä½¿æœªå¸¦æ³¨è§£" -#: builtin/describe.c:406 +#: builtin/describe.c:413 msgid "always use long format" msgstr "始终使用长æ交å·æ ¼å¼" -#: builtin/describe.c:409 +#: builtin/describe.c:414 +msgid "only follow first parent" +msgstr "åªè·Ÿéšç¬¬ä¸€ä¸ªçˆ¶æ交" + +#: builtin/describe.c:417 msgid "only output exact matches" msgstr "åªè¾“出精确匹é…" -#: builtin/describe.c:411 +#: builtin/describe.c:419 msgid "consider <n> most recent tags (default: 10)" msgstr "考虑最近 <n> 个 tags(默认:10)" -#: builtin/describe.c:413 +#: builtin/describe.c:421 msgid "only consider tags matching <pattern>" msgstr "åªè€ƒè™‘åŒ¹é… <模å¼> çš„ tags" -#: builtin/describe.c:415 builtin/name-rev.c:238 +#: builtin/describe.c:423 builtin/name-rev.c:322 msgid "show abbreviated commit object as fallback" msgstr "显示简写的æ交å·ä½œä¸ºåŽå¤‡" -#: builtin/describe.c:416 +#: builtin/describe.c:424 msgid "mark" msgstr "æ ‡è®°" -#: builtin/describe.c:417 +#: builtin/describe.c:425 msgid "append <mark> on dirty working tree (default: \"-dirty\")" msgstr "若工作区è„(有å˜æ›´ï¼‰åœ¨ç»“å°¾æ·»åŠ <æ ‡è®°>(默认:\"-dirty\")" -#: builtin/describe.c:435 +#: builtin/describe.c:443 msgid "--long is incompatible with --abbrev=0" msgstr "--long 与 --abbrev=0 ä¸å…¼å®¹" -#: builtin/describe.c:461 +#: builtin/describe.c:469 msgid "No names found, cannot describe anything." msgstr "没有å‘现åç§°ï¼Œæ— æ³•æ述任何东西。" -#: builtin/describe.c:481 +#: builtin/describe.c:489 msgid "--dirty is incompatible with committishes" msgstr "--dirty ä¸èƒ½ä¸Žæ交åŒæ—¶ä½¿ç”¨" @@ -4464,31 +4706,26 @@ msgstr "--dirty ä¸èƒ½ä¸Žæ交åŒæ—¶ä½¿ç”¨" msgid "'%s': not a regular file or symlink" msgstr "'%s':ä¸æ˜¯ä¸€ä¸ªæ£è§„文件或符å·é“¾æŽ¥" -#: builtin/diff.c:228 +#: builtin/diff.c:230 #, c-format msgid "invalid option: %s" msgstr "æ— æ•ˆé€‰é¡¹ï¼š%s" -#: builtin/diff.c:305 +#: builtin/diff.c:307 msgid "Not a git repository" msgstr "ä¸æ˜¯ä¸€ä¸ª git 版本库" -#: builtin/diff.c:348 +#: builtin/diff.c:350 #, c-format msgid "invalid object '%s' given." msgstr "æä¾›äº†æ— æ•ˆå¯¹è±¡ '%s'。" -#: builtin/diff.c:353 -#, c-format -msgid "more than %d trees given: '%s'" -msgstr "æ供了超过 %d ä¸ªæ ‘å¯¹è±¡ï¼š'%s'" - -#: builtin/diff.c:363 +#: builtin/diff.c:359 #, c-format msgid "more than two blobs given: '%s'" msgstr "æ供了超过两个数æ®ï¼ˆblob)对象:'%s'" -#: builtin/diff.c:371 +#: builtin/diff.c:366 #, c-format msgid "unhandled object '%s' given." msgstr "æä¾›äº†æ— æ³•å¤„ç†çš„对象 '%s'。" @@ -4497,39 +4734,39 @@ msgstr "æä¾›äº†æ— æ³•å¤„ç†çš„对象 '%s'。" msgid "git fast-export [rev-list-opts]" msgstr "git fast-export [rev-list-opts]" -#: builtin/fast-export.c:658 +#: builtin/fast-export.c:666 msgid "show progress after <n> objects" msgstr "在 <n> 个对象之åŽæ˜¾ç¤ºè¿›åº¦" -#: builtin/fast-export.c:660 +#: builtin/fast-export.c:668 msgid "select handling of signed tags" msgstr "选择如何处ç†ç¾å tags" -#: builtin/fast-export.c:663 +#: builtin/fast-export.c:671 msgid "select handling of tags that tag filtered objects" msgstr "选择当 tag 指å‘被过滤时 tags 的处ç†æ–¹å¼" -#: builtin/fast-export.c:666 +#: builtin/fast-export.c:674 msgid "Dump marks to this file" msgstr "æŠŠæ ‡è®°å˜å‚¨åˆ°è¿™ä¸ªæ–‡ä»¶" -#: builtin/fast-export.c:668 +#: builtin/fast-export.c:676 msgid "Import marks from this file" msgstr "ä»Žè¿™ä¸ªæ–‡ä»¶å¯¼å…¥æ ‡è®°" -#: builtin/fast-export.c:670 +#: builtin/fast-export.c:678 msgid "Fake a tagger when tags lack one" msgstr "当 tags ç¼ºå°‘æ ‡è®°è€…å—段时,å‡è£…æ供一个" -#: builtin/fast-export.c:672 +#: builtin/fast-export.c:680 msgid "Output full tree for each commit" msgstr "æ¯æ¬¡æäº¤éƒ½è¾“å‡ºæ•´ä¸ªæ ‘" -#: builtin/fast-export.c:674 +#: builtin/fast-export.c:682 msgid "Use the done feature to terminate the stream" msgstr "使用 done 功能æ¥ç»ˆæ¢æµ" -#: builtin/fast-export.c:675 +#: builtin/fast-export.c:683 msgid "Skip output of blob data" msgstr "跳过数æ®å¯¹è±¡çš„输出" @@ -4606,7 +4843,7 @@ msgstr "深化浅克隆的历å²" msgid "convert to a complete repository" msgstr "转æ¢ä¸ºä¸€ä¸ªå®Œæ•´çš„版本库" -#: builtin/fetch.c:88 builtin/log.c:1130 +#: builtin/fetch.c:88 builtin/log.c:1177 msgid "dir" msgstr "目录" @@ -4618,77 +4855,77 @@ msgstr "在å模组路径输出的å‰é¢åŠ 上æ¤ç›®å½•" msgid "default mode for recursion" msgstr "递归的默认模å¼" -#: builtin/fetch.c:204 +#: builtin/fetch.c:220 msgid "Couldn't find remote ref HEAD" msgstr "æ— æ³•å‘现远程 HEAD 引用" -#: builtin/fetch.c:257 +#: builtin/fetch.c:273 #, c-format msgid "object %s not found" msgstr "对象 %s 未å‘现" -#: builtin/fetch.c:262 +#: builtin/fetch.c:278 msgid "[up to date]" msgstr "[最新]" -#: builtin/fetch.c:276 +#: builtin/fetch.c:292 #, c-format msgid "! %-*s %-*s -> %s (can't fetch in current branch)" msgstr "! %-*s %-*s -> %s (在当å‰åˆ†æ”¯ä¸‹ä¸èƒ½èŽ·å–)" -#: builtin/fetch.c:277 builtin/fetch.c:363 +#: builtin/fetch.c:293 builtin/fetch.c:379 msgid "[rejected]" msgstr "[已拒ç»]" -#: builtin/fetch.c:288 +#: builtin/fetch.c:304 msgid "[tag update]" msgstr "[tagæ›´æ–°]" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: builtin/fetch.c:290 builtin/fetch.c:325 builtin/fetch.c:343 +#: builtin/fetch.c:306 builtin/fetch.c:341 builtin/fetch.c:359 msgid " (unable to update local ref)" msgstr " (ä¸èƒ½æ›´æ–°æœ¬åœ°å¼•ç”¨ï¼‰" -#: builtin/fetch.c:308 +#: builtin/fetch.c:324 msgid "[new tag]" msgstr "[æ–°tag]" -#: builtin/fetch.c:311 +#: builtin/fetch.c:327 msgid "[new branch]" msgstr "[新分支]" -#: builtin/fetch.c:314 +#: builtin/fetch.c:330 msgid "[new ref]" msgstr "[新引用]" -#: builtin/fetch.c:359 +#: builtin/fetch.c:375 msgid "unable to update local ref" msgstr "ä¸èƒ½æ›´æ–°æœ¬åœ°å¼•ç”¨" -#: builtin/fetch.c:359 +#: builtin/fetch.c:375 msgid "forced update" msgstr "强制更新" -#: builtin/fetch.c:365 +#: builtin/fetch.c:381 msgid "(non-fast-forward)" msgstr "(éžå¿«è¿›å¼ï¼‰" -#: builtin/fetch.c:396 builtin/fetch.c:688 +#: builtin/fetch.c:412 builtin/fetch.c:718 #, c-format msgid "cannot open %s: %s\n" msgstr "æ— æ³•æ‰“å¼€ %s:%s\n" -#: builtin/fetch.c:405 +#: builtin/fetch.c:421 #, c-format msgid "%s did not send all necessary objects\n" msgstr "%s 未å‘é€æ‰€æœ‰å¿…须的对象\n" -#: builtin/fetch.c:491 +#: builtin/fetch.c:520 #, c-format msgid "From %.*s\n" msgstr "æ¥è‡ª %.*s\n" -#: builtin/fetch.c:502 +#: builtin/fetch.c:531 #, c-format msgid "" "some local refs could not be updated; try running\n" @@ -4698,87 +4935,87 @@ msgstr "" " 'git remote prune %s' æ¥åˆ 除旧的ã€æœ‰å†²çªçš„分支" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: builtin/fetch.c:552 +#: builtin/fetch.c:581 #, c-format msgid " (%s will become dangling)" msgstr " (%s å°†æˆä¸ºæ‘‡æ‘†çŠ¶æ€ï¼‰" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: builtin/fetch.c:553 +#: builtin/fetch.c:582 #, c-format msgid " (%s has become dangling)" msgstr " (%s å·²æˆä¸ºæ‘‡æ‘†çŠ¶æ€ï¼‰" -#: builtin/fetch.c:560 +#: builtin/fetch.c:589 msgid "[deleted]" msgstr "[å·²åˆ é™¤]" -#: builtin/fetch.c:561 builtin/remote.c:1055 +#: builtin/fetch.c:590 builtin/remote.c:1055 msgid "(none)" msgstr "ï¼ˆæ— ï¼‰" -#: builtin/fetch.c:678 +#: builtin/fetch.c:708 #, c-format msgid "Refusing to fetch into current branch %s of non-bare repository" msgstr "æ‹’ç»èŽ·å–到éžè£¸ç‰ˆæœ¬åº“的当å‰åˆ†æ”¯ %s" -#: builtin/fetch.c:712 +#: builtin/fetch.c:742 #, c-format msgid "Don't know how to fetch from %s" msgstr "ä¸çŸ¥é“如何从 %s 获å–" -#: builtin/fetch.c:789 +#: builtin/fetch.c:823 #, c-format msgid "Option \"%s\" value \"%s\" is not valid for %s" msgstr "选项 \"%s\" 的值 \"%s\" 对于 %s æ˜¯æ— æ•ˆçš„" -#: builtin/fetch.c:792 +#: builtin/fetch.c:826 #, c-format msgid "Option \"%s\" is ignored for %s\n" msgstr "选项 \"%s\" 为 %s 所忽略\n" -#: builtin/fetch.c:894 +#: builtin/fetch.c:928 #, c-format msgid "Fetching %s\n" msgstr "æ£åœ¨èŽ·å– %s\n" -#: builtin/fetch.c:896 builtin/remote.c:100 +#: builtin/fetch.c:930 builtin/remote.c:100 #, c-format msgid "Could not fetch %s" msgstr "ä¸èƒ½èŽ·å– %s" -#: builtin/fetch.c:915 +#: builtin/fetch.c:949 msgid "" "No remote repository specified. Please, specify either a URL or a\n" "remote name from which new revisions should be fetched." msgstr "未指定远程版本库。请通过一个URL或远程版本库å指定,用以获å–æ–°æ交。" -#: builtin/fetch.c:935 +#: builtin/fetch.c:969 msgid "You need to specify a tag name." msgstr "您需è¦æŒ‡å®šä¸€ä¸ª tag å称。" -#: builtin/fetch.c:981 +#: builtin/fetch.c:1015 msgid "--depth and --unshallow cannot be used together" msgstr "--depth å’Œ --unshallow ä¸èƒ½åŒæ—¶ä½¿ç”¨" -#: builtin/fetch.c:983 +#: builtin/fetch.c:1017 msgid "--unshallow on a complete repository does not make sense" msgstr "对于一个完整的版本库,å‚æ•° --unshallow 没有æ„义" -#: builtin/fetch.c:1002 +#: builtin/fetch.c:1036 msgid "fetch --all does not take a repository argument" msgstr "fetch --all ä¸èƒ½å¸¦ä¸€ä¸ªç‰ˆæœ¬åº“å‚æ•°" -#: builtin/fetch.c:1004 +#: builtin/fetch.c:1038 msgid "fetch --all does not make sense with refspecs" msgstr "fetch --all 带引用表达å¼æ²¡æœ‰ä»»ä½•æ„义" -#: builtin/fetch.c:1015 +#: builtin/fetch.c:1049 #, c-format msgid "No such remote or remote group: %s" msgstr "æ²¡æœ‰è¿™æ ·çš„è¿œç¨‹æˆ–è¿œç¨‹ç»„ï¼š%s" -#: builtin/fetch.c:1023 +#: builtin/fetch.c:1057 msgid "Fetching a group and specifying refspecs does not make sense" msgstr "获å–组并指定引用表达å¼æ²¡æœ‰æ„义" @@ -4787,9 +5024,9 @@ msgid "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]" msgstr "" "git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]" -#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:701 -#: builtin/merge.c:188 builtin/show-branch.c:655 builtin/show-ref.c:175 -#: builtin/tag.c:446 parse-options.h:133 parse-options.h:239 +#: builtin/fmt-merge-msg.c:663 builtin/fmt-merge-msg.c:666 builtin/grep.c:700 +#: builtin/merge.c:203 builtin/show-branch.c:655 builtin/show-ref.c:179 +#: builtin/tag.c:446 parse-options.h:133 parse-options.h:243 msgid "n" msgstr "n" @@ -4946,221 +5183,221 @@ msgstr "git grep [选项] [-e] <模å¼> [<修订>...] [[--] <路径>...]" msgid "grep: failed to create thread: %s" msgstr "grepï¼šæ— æ³•åˆ›å»ºçº¿ç¨‹ï¼š%s" -#: builtin/grep.c:365 +#: builtin/grep.c:364 #, c-format msgid "Failed to chdir: %s" msgstr "æ— æ³•åˆ‡æ¢ç›®å½•ï¼š%s" -#: builtin/grep.c:443 builtin/grep.c:478 +#: builtin/grep.c:442 builtin/grep.c:477 #, c-format msgid "unable to read tree (%s)" msgstr "æ— æ³•è¯»å–æ ‘ï¼ˆ%s)" -#: builtin/grep.c:493 +#: builtin/grep.c:492 #, c-format msgid "unable to grep from object of type %s" msgstr "æ— æ³•æŠ“å–æ¥è‡ªäºŽ %s 类型的对象" -#: builtin/grep.c:551 +#: builtin/grep.c:550 #, c-format msgid "switch `%c' expects a numerical value" msgstr "开关 `%c' 期望一个数å—值" -#: builtin/grep.c:568 +#: builtin/grep.c:567 #, c-format msgid "cannot open '%s'" msgstr "ä¸èƒ½æ‰“å¼€ '%s'" -#: builtin/grep.c:643 +#: builtin/grep.c:642 msgid "search in index instead of in the work tree" msgstr "在索引区æœç´¢è€Œä¸æ˜¯åœ¨å·¥ä½œåŒº" -#: builtin/grep.c:645 +#: builtin/grep.c:644 msgid "find in contents not managed by git" msgstr "在未被 git 管ç†çš„内容ä¸æŸ¥æ‰¾" # 译者:ä¸æ–‡å—符串拼接,å¯åˆ 除å‰å¯¼ç©ºæ ¼ -#: builtin/grep.c:647 +#: builtin/grep.c:646 msgid "search in both tracked and untracked files" msgstr "在跟踪和未跟踪的文件ä¸æœç´¢" -#: builtin/grep.c:649 +#: builtin/grep.c:648 msgid "search also in ignored files" msgstr "也在忽略的文件ä¸æœç´¢" -#: builtin/grep.c:652 +#: builtin/grep.c:651 msgid "show non-matching lines" msgstr "显示未匹é…çš„è¡Œ" -#: builtin/grep.c:654 +#: builtin/grep.c:653 msgid "case insensitive matching" msgstr "ä¸åŒºåˆ†å¤§å°å†™åŒ¹é…" -#: builtin/grep.c:656 +#: builtin/grep.c:655 msgid "match patterns only at word boundaries" msgstr "åªåœ¨å•è¯è¾¹ç•ŒåŒ¹é…模å¼" -#: builtin/grep.c:658 +#: builtin/grep.c:657 msgid "process binary files as text" msgstr "把二进制文件当åšæ–‡æœ¬å¤„ç†" -#: builtin/grep.c:660 +#: builtin/grep.c:659 msgid "don't match patterns in binary files" msgstr "ä¸åœ¨äºŒè¿›åˆ¶æ–‡ä»¶ä¸åŒ¹é…模å¼" -#: builtin/grep.c:663 +#: builtin/grep.c:662 msgid "descend at most <depth> levels" msgstr "最多以指定的深度å‘下寻找" -#: builtin/grep.c:667 +#: builtin/grep.c:666 msgid "use extended POSIX regular expressions" msgstr "使用扩展的 POSIX æ£åˆ™è¡¨è¾¾å¼" -#: builtin/grep.c:670 +#: builtin/grep.c:669 msgid "use basic POSIX regular expressions (default)" msgstr "使用基本的 POSIX æ£åˆ™è¡¨è¾¾å¼ï¼ˆé»˜è®¤ï¼‰" -#: builtin/grep.c:673 +#: builtin/grep.c:672 msgid "interpret patterns as fixed strings" msgstr "把模å¼è§£æžä¸ºå›ºå®šçš„å—符串" -#: builtin/grep.c:676 +#: builtin/grep.c:675 msgid "use Perl-compatible regular expressions" msgstr "使用 Perl 兼容的æ£åˆ™è¡¨è¾¾å¼" -#: builtin/grep.c:679 +#: builtin/grep.c:678 msgid "show line numbers" msgstr "显示行å·" -#: builtin/grep.c:680 +#: builtin/grep.c:679 msgid "don't show filenames" msgstr "ä¸æ˜¾ç¤ºæ–‡ä»¶å" -#: builtin/grep.c:681 +#: builtin/grep.c:680 msgid "show filenames" msgstr "显示文件å" -#: builtin/grep.c:683 +#: builtin/grep.c:682 msgid "show filenames relative to top directory" msgstr "显示相对于顶级目录的文件å" -#: builtin/grep.c:685 +#: builtin/grep.c:684 msgid "show only filenames instead of matching lines" msgstr "åªæ˜¾ç¤ºæ–‡ä»¶å而ä¸æ˜¾ç¤ºåŒ¹é…çš„è¡Œ" -#: builtin/grep.c:687 +#: builtin/grep.c:686 msgid "synonym for --files-with-matches" msgstr "å’Œ --files-with-matches åŒä¹‰" -#: builtin/grep.c:690 +#: builtin/grep.c:689 msgid "show only the names of files without match" msgstr "åªæ˜¾ç¤ºæœªåŒ¹é…的文件å" -#: builtin/grep.c:692 +#: builtin/grep.c:691 msgid "print NUL after filenames" msgstr "在文件ååŽè¾“出 NUL å—符" -#: builtin/grep.c:694 +#: builtin/grep.c:693 msgid "show the number of matches instead of matching lines" msgstr "显示总匹é…行数,而ä¸æ˜¾ç¤ºåŒ¹é…çš„è¡Œ" -#: builtin/grep.c:695 +#: builtin/grep.c:694 msgid "highlight matches" msgstr "高亮显示匹é…项" -#: builtin/grep.c:697 +#: builtin/grep.c:696 msgid "print empty line between matches from different files" msgstr "在ä¸åŒæ–‡ä»¶çš„匹é…项之间打å°ç©ºè¡Œ" -#: builtin/grep.c:699 +#: builtin/grep.c:698 msgid "show filename only once above matches from same file" msgstr "åªåœ¨åŒä¸€æ–‡ä»¶çš„匹é…项的上é¢æ˜¾ç¤ºä¸€æ¬¡æ–‡ä»¶å" -#: builtin/grep.c:702 +#: builtin/grep.c:701 msgid "show <n> context lines before and after matches" msgstr "显示匹é…项å‰åŽçš„ <n> 行上下文" -#: builtin/grep.c:705 +#: builtin/grep.c:704 msgid "show <n> context lines before matches" msgstr "显示匹é…é¡¹å‰ <n> 行上下文" -#: builtin/grep.c:707 +#: builtin/grep.c:706 msgid "show <n> context lines after matches" msgstr "显示匹é…é¡¹åŽ <n> 行上下文" -#: builtin/grep.c:708 +#: builtin/grep.c:707 msgid "shortcut for -C NUM" msgstr "å¿«æ·é”® -C æ•°å—" -#: builtin/grep.c:711 +#: builtin/grep.c:710 msgid "show a line with the function name before matches" msgstr "在匹é…çš„å‰é¢æ˜¾ç¤ºä¸€è¡Œå‡½æ•°å" -#: builtin/grep.c:713 +#: builtin/grep.c:712 msgid "show the surrounding function" msgstr "显示所在函数的å‰åŽå†…容" -#: builtin/grep.c:716 +#: builtin/grep.c:715 msgid "read patterns from file" msgstr "从文件读å–模å¼" -#: builtin/grep.c:718 +#: builtin/grep.c:717 msgid "match <pattern>" msgstr "åŒ¹é… <模å¼>" -#: builtin/grep.c:720 +#: builtin/grep.c:719 msgid "combine patterns specified with -e" msgstr "组åˆç”¨ -e å‚数设定的模å¼" -#: builtin/grep.c:732 +#: builtin/grep.c:731 msgid "indicate hit with exit status without output" msgstr "ä¸è¾“出,而用退出ç æ ‡è¯†å‘½ä¸çŠ¶æ€" -#: builtin/grep.c:734 +#: builtin/grep.c:733 msgid "show only matches from files that match all patterns" msgstr "åªæ˜¾ç¤ºåŒ¹é…所有模å¼çš„文件ä¸çš„匹é…" -#: builtin/grep.c:736 +#: builtin/grep.c:735 msgid "show parse tree for grep expression" msgstr "显示 grep 表达å¼çš„解æžæ ‘" -#: builtin/grep.c:740 +#: builtin/grep.c:739 msgid "pager" msgstr "分页" -#: builtin/grep.c:740 +#: builtin/grep.c:739 msgid "show matching files in the pager" msgstr "分页显示匹é…的文件" -#: builtin/grep.c:743 +#: builtin/grep.c:742 msgid "allow calling of grep(1) (ignored by this build)" msgstr "å…许调用 grep(1)(本次构建忽略)" -#: builtin/grep.c:744 builtin/show-ref.c:184 +#: builtin/grep.c:743 builtin/show-ref.c:188 msgid "show usage" msgstr "显示用法" -#: builtin/grep.c:811 +#: builtin/grep.c:810 msgid "no pattern given." msgstr "未æ供模å¼åŒ¹é…。" -#: builtin/grep.c:866 +#: builtin/grep.c:865 msgid "--open-files-in-pager only works on the worktree" msgstr "--open-files-in-pager 仅用于工作区" -#: builtin/grep.c:889 +#: builtin/grep.c:888 msgid "--cached or --untracked cannot be used with --no-index." msgstr "--cached 或 --untracked ä¸èƒ½ä¸Ž --no-index åŒæ—¶ä½¿ç”¨ã€‚" -#: builtin/grep.c:894 +#: builtin/grep.c:893 msgid "--no-index or --untracked cannot be used with revs." msgstr "--no-index 或 --untracked ä¸èƒ½å’Œç‰ˆæœ¬åŒæ—¶ä½¿ç”¨ã€‚" -#: builtin/grep.c:897 +#: builtin/grep.c:896 msgid "--[no-]exclude-standard cannot be used for tracked contents." msgstr "--[no-]exclude-standard ä¸èƒ½ç”¨äºŽå·²è·Ÿè¸ªå†…容。" -#: builtin/grep.c:905 +#: builtin/grep.c:904 msgid "both --cached and trees are given." msgstr "åŒæ—¶ç»™å‡ºäº† --cached å’Œæ ‘å¯¹è±¡ã€‚" @@ -5200,54 +5437,54 @@ msgstr "åŽŸæ ·å˜å‚¨æ–‡ä»¶ä¸ä½¿ç”¨è¿‡æ»¤å™¨" msgid "process file as it were from this path" msgstr "处ç†æ–‡ä»¶å¹¶å‡è®¾å…¶æ¥è‡ªäºŽæ¤è·¯å¾„" -#: builtin/help.c:43 +#: builtin/help.c:41 msgid "print all available commands" msgstr "打å°æ‰€æœ‰å¯ç”¨çš„命令" -#: builtin/help.c:44 +#: builtin/help.c:42 msgid "print list of useful guides" msgstr "显示有用的指å—列表" -#: builtin/help.c:45 +#: builtin/help.c:43 msgid "show man page" msgstr "显示 man 手册" -#: builtin/help.c:46 +#: builtin/help.c:44 msgid "show manual in web browser" msgstr "在 web æµè§ˆå™¨ä¸æ˜¾ç¤ºæ‰‹å†Œ" -#: builtin/help.c:48 +#: builtin/help.c:46 msgid "show info page" msgstr "显示 info 手册" -#: builtin/help.c:54 +#: builtin/help.c:52 msgid "git help [--all] [--guides] [--man|--web|--info] [command]" msgstr "git help [--all] [--guides] [--man|--web|--info] [命令]" -#: builtin/help.c:66 +#: builtin/help.c:64 #, c-format msgid "unrecognized help format '%s'" msgstr "æœªèƒ½è¯†åˆ«çš„å¸®åŠ©æ ¼å¼ '%s'" -#: builtin/help.c:94 +#: builtin/help.c:92 msgid "Failed to start emacsclient." msgstr "æ— æ³•å¯åŠ¨ emacsclient。" -#: builtin/help.c:107 +#: builtin/help.c:105 msgid "Failed to parse emacsclient version." msgstr "æ— æ³•è§£æž emacsclient 版本。" -#: builtin/help.c:115 +#: builtin/help.c:113 #, c-format msgid "emacsclient version '%d' too old (< 22)." msgstr "emacsclient 版本 '%d' 太è€ï¼ˆ< 22)。" -#: builtin/help.c:133 builtin/help.c:161 builtin/help.c:170 builtin/help.c:178 +#: builtin/help.c:131 builtin/help.c:159 builtin/help.c:168 builtin/help.c:176 #, c-format msgid "failed to exec '%s': %s" msgstr "æ— æ³•æ‰§è¡Œ '%s':%s" -#: builtin/help.c:218 +#: builtin/help.c:216 #, c-format msgid "" "'%s': path for unsupported man viewer.\n" @@ -5256,7 +5493,7 @@ msgstr "" "'%s':ä¸æ”¯æŒçš„ man 手册查看器的路径。\n" "请使用 'man.<tool>.cmd'。" -#: builtin/help.c:230 +#: builtin/help.c:228 #, c-format msgid "" "'%s': cmd for supported man viewer.\n" @@ -5265,335 +5502,335 @@ msgstr "" "'%s': 支æŒçš„ man 手册查看器命令。\n" "请使用 'man.<tool>.path'。" -#: builtin/help.c:351 +#: builtin/help.c:349 #, c-format msgid "'%s': unknown man viewer." msgstr "'%s':未知的 man 查看器。" -#: builtin/help.c:368 +#: builtin/help.c:366 msgid "no man viewer handled the request" msgstr "没有 man 查看器处ç†æ¤è¯·æ±‚" -#: builtin/help.c:376 +#: builtin/help.c:374 msgid "no info viewer handled the request" msgstr "没有 info 查看器处ç†æ¤è¯·æ±‚" -#: builtin/help.c:422 +#: builtin/help.c:420 msgid "Defining attributes per path" msgstr "定义路径的属性" -#: builtin/help.c:423 +#: builtin/help.c:421 msgid "A Git glossary" msgstr "Git è¯æ±‡è¡¨" -#: builtin/help.c:424 +#: builtin/help.c:422 msgid "Specifies intentionally untracked files to ignore" msgstr "忽略指定的未跟踪文件" -#: builtin/help.c:425 +#: builtin/help.c:423 msgid "Defining submodule properties" msgstr "定义å模组属性" -#: builtin/help.c:426 +#: builtin/help.c:424 msgid "Specifying revisions and ranges for Git" msgstr "指定 Git 的版本和版本范围" -#: builtin/help.c:427 +#: builtin/help.c:425 msgid "A tutorial introduction to Git (for version 1.5.1 or newer)" msgstr "一个 Git 教程(针对 1.5.1 或更新版本)" -#: builtin/help.c:428 +#: builtin/help.c:426 msgid "An overview of recommended workflows with Git" msgstr "Git 推è的工作æµæ¦‚览" -#: builtin/help.c:440 +#: builtin/help.c:438 msgid "The common Git guides are:\n" msgstr "最常用的 Git å‘导有:\n" -#: builtin/help.c:462 builtin/help.c:478 +#: builtin/help.c:460 builtin/help.c:476 #, c-format msgid "usage: %s%s" msgstr "用法:%s%s" -#: builtin/help.c:494 +#: builtin/help.c:492 #, c-format msgid "`git %s' is aliased to `%s'" msgstr "`git %s' 是 `%s' 的别å" -#: builtin/index-pack.c:182 +#: builtin/index-pack.c:184 #, c-format msgid "object type mismatch at %s" msgstr "%s 的对象类型ä¸åŒ¹é…" -#: builtin/index-pack.c:202 +#: builtin/index-pack.c:204 msgid "object of unexpected type" msgstr "æ„外的类型的对象" -#: builtin/index-pack.c:239 +#: builtin/index-pack.c:244 #, c-format msgid "cannot fill %d byte" msgid_plural "cannot fill %d bytes" msgstr[0] "æ— æ³•å¡«å…… %d å—节" msgstr[1] "æ— æ³•å¡«å…… %d å—节" -#: builtin/index-pack.c:249 +#: builtin/index-pack.c:254 msgid "early EOF" msgstr "过早的文件结æŸç¬¦ï¼ˆEOF)" -#: builtin/index-pack.c:250 +#: builtin/index-pack.c:255 msgid "read error on input" msgstr "输入上的读错误" -#: builtin/index-pack.c:262 +#: builtin/index-pack.c:267 msgid "used more bytes than were available" msgstr "用掉了超过å¯ç”¨çš„å—节" -#: builtin/index-pack.c:269 +#: builtin/index-pack.c:274 msgid "pack too large for current definition of off_t" msgstr "åŒ…å¤ªå¤§è¶…è¿‡äº†å½“å‰ off_t 的定义" -#: builtin/index-pack.c:285 +#: builtin/index-pack.c:290 #, c-format msgid "unable to create '%s'" msgstr "ä¸èƒ½åˆ›å»º '%s'" -#: builtin/index-pack.c:290 +#: builtin/index-pack.c:295 #, c-format msgid "cannot open packfile '%s'" msgstr "æ— æ³•æ‰“å¼€åŒ…æ–‡ä»¶ '%s'" -#: builtin/index-pack.c:304 +#: builtin/index-pack.c:309 msgid "pack signature mismatch" msgstr "包ç¾åä¸åŒ¹é…" -#: builtin/index-pack.c:306 +#: builtin/index-pack.c:311 #, c-format msgid "pack version %<PRIu32> unsupported" msgstr "ä¸æ”¯æŒåŒ…版本 %<PRIu32>" -#: builtin/index-pack.c:324 +#: builtin/index-pack.c:329 #, c-format msgid "pack has bad object at offset %lu: %s" msgstr "包ä¸æœ‰é”™è¯¯çš„对象ä½äºŽ %lu:%s" -#: builtin/index-pack.c:446 +#: builtin/index-pack.c:451 #, c-format msgid "inflate returned %d" msgstr "解压缩返回 %d" -#: builtin/index-pack.c:495 +#: builtin/index-pack.c:500 msgid "offset value overflow for delta base object" msgstr "å移值覆盖了 delta 基准对象" -#: builtin/index-pack.c:503 +#: builtin/index-pack.c:508 msgid "delta base offset is out of bound" msgstr "delta 基准å移越界" -#: builtin/index-pack.c:511 +#: builtin/index-pack.c:516 #, c-format msgid "unknown object type %d" msgstr "未知对象类型 %d" -#: builtin/index-pack.c:542 +#: builtin/index-pack.c:547 msgid "cannot pread pack file" msgstr "æ— æ³•è¯»å–包文件" -#: builtin/index-pack.c:544 +#: builtin/index-pack.c:549 #, c-format msgid "premature end of pack file, %lu byte missing" msgid_plural "premature end of pack file, %lu bytes missing" msgstr[0] "包文件过早结æŸï¼Œç¼ºå°‘ %lu å—节" msgstr[1] "包文件过早结æŸï¼Œç¼ºå°‘ %lu å—节" -#: builtin/index-pack.c:570 +#: builtin/index-pack.c:575 msgid "serious inflate inconsistency" msgstr "解压缩严é‡çš„ä¸ä¸€è‡´" -#: builtin/index-pack.c:661 builtin/index-pack.c:667 builtin/index-pack.c:690 -#: builtin/index-pack.c:724 builtin/index-pack.c:733 +#: builtin/index-pack.c:666 builtin/index-pack.c:672 builtin/index-pack.c:695 +#: builtin/index-pack.c:729 builtin/index-pack.c:738 #, c-format msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "å‘现 %s 出现 SHA1 冲çªï¼" -#: builtin/index-pack.c:664 builtin/pack-objects.c:170 +#: builtin/index-pack.c:669 builtin/pack-objects.c:170 #: builtin/pack-objects.c:262 #, c-format msgid "unable to read %s" msgstr "ä¸èƒ½è¯» %s" -#: builtin/index-pack.c:730 +#: builtin/index-pack.c:735 #, c-format msgid "cannot read existing object %s" msgstr "ä¸èƒ½è¯»å–现å˜å¯¹è±¡ %s" -#: builtin/index-pack.c:744 +#: builtin/index-pack.c:749 #, c-format msgid "invalid blob object %s" msgstr "æ— æ•ˆçš„æ•°æ®ï¼ˆblob)对象 %s" -#: builtin/index-pack.c:759 +#: builtin/index-pack.c:763 #, c-format msgid "invalid %s" msgstr "æ— æ•ˆçš„ %s" -#: builtin/index-pack.c:761 +#: builtin/index-pack.c:766 msgid "Error in object" msgstr "对象ä¸å‡ºé”™" -#: builtin/index-pack.c:763 +#: builtin/index-pack.c:768 #, c-format msgid "Not all child objects of %s are reachable" msgstr "%s 的所有å对象并éžéƒ½å¯è¾¾" -#: builtin/index-pack.c:833 builtin/index-pack.c:863 +#: builtin/index-pack.c:838 builtin/index-pack.c:868 msgid "failed to apply delta" msgstr "æ— æ³•åº”ç”¨ delta" -#: builtin/index-pack.c:1004 +#: builtin/index-pack.c:1009 msgid "Receiving objects" msgstr "接收对象ä¸" -#: builtin/index-pack.c:1004 +#: builtin/index-pack.c:1009 msgid "Indexing objects" msgstr "索引对象ä¸" -#: builtin/index-pack.c:1030 +#: builtin/index-pack.c:1035 msgid "pack is corrupted (SHA1 mismatch)" msgstr "包冲çªï¼ˆSHA1 ä¸åŒ¹é…)" -#: builtin/index-pack.c:1035 +#: builtin/index-pack.c:1040 msgid "cannot fstat packfile" msgstr "ä¸èƒ½æžšä¸¾åŒ…文件状æ€" -#: builtin/index-pack.c:1038 +#: builtin/index-pack.c:1043 msgid "pack has junk at the end" msgstr "包的结尾有垃圾数æ®" -#: builtin/index-pack.c:1049 +#: builtin/index-pack.c:1054 msgid "confusion beyond insanity in parse_pack_objects()" msgstr "parse_pack_objects() ä¸é‡åˆ°ä¸å¯ç†å–»çš„问题" -#: builtin/index-pack.c:1072 +#: builtin/index-pack.c:1077 msgid "Resolving deltas" msgstr "å¤„ç† delta ä¸" -#: builtin/index-pack.c:1082 +#: builtin/index-pack.c:1087 #, c-format msgid "unable to create thread: %s" msgstr "ä¸èƒ½åˆ›å»ºçº¿ç¨‹ï¼š%s" -#: builtin/index-pack.c:1124 +#: builtin/index-pack.c:1129 msgid "confusion beyond insanity" msgstr "ä¸å¯ç†å–»" -#: builtin/index-pack.c:1132 +#: builtin/index-pack.c:1137 #, c-format msgid "completed with %d local objects" msgstr "å®Œæˆ %d 个本地对象" -#: builtin/index-pack.c:1142 +#: builtin/index-pack.c:1147 #, c-format msgid "Unexpected tail checksum for %s (disk corruption?)" msgstr "对 %s çš„å°¾éƒ¨æ ¡éªŒå‡ºçŽ°æ„外(ç£ç›˜æŸå?)" -#: builtin/index-pack.c:1146 +#: builtin/index-pack.c:1151 #, c-format msgid "pack has %d unresolved delta" msgid_plural "pack has %d unresolved deltas" msgstr[0] "包有 %d 个未解决的 delta" msgstr[1] "包有 %d 个未解决的 delta" -#: builtin/index-pack.c:1171 +#: builtin/index-pack.c:1176 #, c-format msgid "unable to deflate appended object (%d)" msgstr "ä¸èƒ½åŽ‹ç¼©é™„åŠ å¯¹è±¡ï¼ˆ%d)" -#: builtin/index-pack.c:1250 +#: builtin/index-pack.c:1255 #, c-format msgid "local object %s is corrupt" msgstr "本地对象 %s å·²æŸå" -#: builtin/index-pack.c:1274 +#: builtin/index-pack.c:1279 msgid "error while closing pack file" msgstr "å…³é—包文件时出错" -#: builtin/index-pack.c:1287 +#: builtin/index-pack.c:1292 #, c-format msgid "cannot write keep file '%s'" msgstr "æ— æ³•å†™ä¿ç•™æ–‡ä»¶ '%s'" -#: builtin/index-pack.c:1295 +#: builtin/index-pack.c:1300 #, c-format msgid "cannot close written keep file '%s'" msgstr "æ— æ³•å…³é—ä¿ç•™æ–‡ä»¶ '%s'" -#: builtin/index-pack.c:1308 +#: builtin/index-pack.c:1313 msgid "cannot store pack file" msgstr "æ— æ³•å˜å‚¨åŒ…文件" -#: builtin/index-pack.c:1319 +#: builtin/index-pack.c:1324 msgid "cannot store index file" msgstr "æ— æ³•å˜å‚¨ç´¢å¼•æ–‡ä»¶" -#: builtin/index-pack.c:1352 +#: builtin/index-pack.c:1357 #, c-format msgid "bad pack.indexversion=%<PRIu32>" msgstr "åçš„ pack.indexversion=%<PRIu32>" -#: builtin/index-pack.c:1358 +#: builtin/index-pack.c:1363 #, c-format msgid "invalid number of threads specified (%d)" msgstr "æŒ‡å®šçš„çº¿ç¨‹æ•°æ— æ•ˆï¼ˆ%d)" -#: builtin/index-pack.c:1362 builtin/index-pack.c:1535 +#: builtin/index-pack.c:1367 builtin/index-pack.c:1545 #, c-format msgid "no threads support, ignoring %s" msgstr "没有线程支æŒï¼Œå¿½ç•¥ %s" -#: builtin/index-pack.c:1420 +#: builtin/index-pack.c:1425 #, c-format msgid "Cannot open existing pack file '%s'" msgstr "æ— æ³•æ‰“å¼€çŽ°å˜åŒ…文件 '%s'" -#: builtin/index-pack.c:1422 +#: builtin/index-pack.c:1427 #, c-format msgid "Cannot open existing pack idx file for '%s'" msgstr "æ— æ³•ä¸º %s 打开包索引文件" -#: builtin/index-pack.c:1469 +#: builtin/index-pack.c:1474 #, c-format msgid "non delta: %d object" msgid_plural "non delta: %d objects" msgstr[0] "éž delta:%d 个对象" msgstr[1] "éž delta:%d 个对象" -#: builtin/index-pack.c:1476 +#: builtin/index-pack.c:1481 #, c-format msgid "chain length = %d: %lu object" msgid_plural "chain length = %d: %lu objects" msgstr[0] "链长 = %d: %lu 对象" msgstr[1] "链长 = %d: %lu 对象" -#: builtin/index-pack.c:1503 +#: builtin/index-pack.c:1509 msgid "Cannot come back to cwd" msgstr "æ— æ³•è¿”å›žå½“å‰å·¥ä½œç›®å½•" -#: builtin/index-pack.c:1547 builtin/index-pack.c:1550 -#: builtin/index-pack.c:1562 builtin/index-pack.c:1566 +#: builtin/index-pack.c:1557 builtin/index-pack.c:1560 +#: builtin/index-pack.c:1572 builtin/index-pack.c:1576 #, c-format msgid "bad %s" msgstr "错误选项 %s" -#: builtin/index-pack.c:1580 +#: builtin/index-pack.c:1590 msgid "--fix-thin cannot be used without --stdin" msgstr "--fix-thin ä¸èƒ½å’Œ --stdin åŒæ—¶ä½¿ç”¨" -#: builtin/index-pack.c:1584 builtin/index-pack.c:1594 +#: builtin/index-pack.c:1594 builtin/index-pack.c:1604 #, c-format msgid "packfile name '%s' does not end with '.pack'" msgstr "包å '%s' 没有以 '.pack' 结尾" -#: builtin/index-pack.c:1603 +#: builtin/index-pack.c:1613 msgid "--verify with no packfile name given" msgstr "--verify 没有æ供包åå‚æ•°" @@ -5730,7 +5967,7 @@ msgstr "æƒé™" msgid "specify that the git repository is to be shared amongst several users" msgstr "指定 git 版本库是多个用户之间共享的" -#: builtin/init-db.c:493 builtin/prune-packed.c:77 +#: builtin/init-db.c:493 builtin/prune-packed.c:75 msgid "be quiet" msgstr "ä¿æŒå®‰é™" @@ -5762,340 +5999,353 @@ msgstr "ä¸èƒ½è®¿é—®å½“å‰å·¥ä½œç›®å½•" msgid "Cannot access work tree '%s'" msgstr "ä¸èƒ½è®¿é—®å·¥ä½œåŒº '%s'" -#: builtin/log.c:40 +#: builtin/log.c:41 msgid "git log [<options>] [<revision range>] [[--] <path>...]\n" msgstr "git log [<选项>] [<版本范围>] [[--] <路径>...]\n" -#: builtin/log.c:41 +#: builtin/log.c:42 msgid " or: git show [options] <object>..." msgstr " 或者:git show [选项] <对象>..." -#: builtin/log.c:103 +#: builtin/log.c:124 msgid "suppress diff output" msgstr "ä¸æ˜¾ç¤ºå·®å¼‚输出" -#: builtin/log.c:104 +#: builtin/log.c:125 msgid "show source" msgstr "显示æº" -#: builtin/log.c:105 +#: builtin/log.c:126 msgid "Use mail map file" msgstr "ä½¿ç”¨é‚®ä»¶æ˜ å°„æ–‡ä»¶" -#: builtin/log.c:106 +#: builtin/log.c:127 msgid "decorate options" msgstr "修饰选项" -#: builtin/log.c:199 +#: builtin/log.c:230 #, c-format msgid "Final output: %d %s\n" msgstr "最终输出:%d %s\n" -#: builtin/log.c:422 builtin/log.c:514 +#: builtin/log.c:453 builtin/log.c:545 #, c-format msgid "Could not read object %s" msgstr "ä¸èƒ½è¯»å–对象 %s" -#: builtin/log.c:538 +#: builtin/log.c:569 #, c-format msgid "Unknown type: %d" msgstr "未知类型:%d" -#: builtin/log.c:638 +#: builtin/log.c:669 msgid "format.headers without value" msgstr "format.headers 没有值" -#: builtin/log.c:720 +#: builtin/log.c:751 msgid "name of output directory is too long" msgstr "输出目录å太长" -#: builtin/log.c:736 +#: builtin/log.c:767 #, c-format msgid "Cannot open patch file %s" msgstr "æ— æ³•æ‰“å¼€è¡¥ä¸æ–‡ä»¶ %s" -#: builtin/log.c:750 +#: builtin/log.c:781 msgid "Need exactly one range." msgstr "åªéœ€è¦ä¸€ä¸ªèŒƒå›´ã€‚" -#: builtin/log.c:758 +#: builtin/log.c:789 msgid "Not a range." msgstr "ä¸æ˜¯ä¸€ä¸ªèŒƒå›´ã€‚" -#: builtin/log.c:860 +#: builtin/log.c:891 msgid "Cover letter needs email format" msgstr "ä¿¡å°éœ€è¦é‚®ä»¶åœ°å€æ ¼å¼" -#: builtin/log.c:936 +#: builtin/log.c:967 #, c-format msgid "insane in-reply-to: %s" msgstr "ä¸æ£å¸¸çš„ in-reply-to:%s" -#: builtin/log.c:964 +#: builtin/log.c:995 msgid "git format-patch [options] [<since> | <revision range>]" msgstr "git format-patch [选项] [<从> | <修订集范围>]" -#: builtin/log.c:1009 +#: builtin/log.c:1040 msgid "Two output directories?" msgstr "两个输出目录?" -#: builtin/log.c:1108 +#: builtin/log.c:1155 msgid "use [PATCH n/m] even with a single patch" msgstr "使用 [PATCH n/m],å³ä½¿åªæœ‰ä¸€ä¸ªè¡¥ä¸" -#: builtin/log.c:1111 +#: builtin/log.c:1158 msgid "use [PATCH] even with multiple patches" msgstr "使用 [PATCH],å³ä½¿æœ‰å¤šä¸ªè¡¥ä¸" -#: builtin/log.c:1115 +#: builtin/log.c:1162 msgid "print patches to standard out" msgstr "打å°è¡¥ä¸åˆ°æ ‡å‡†è¾“出" -#: builtin/log.c:1117 +#: builtin/log.c:1164 msgid "generate a cover letter" msgstr "生æˆä¸€å°é™„ä¿¡" -#: builtin/log.c:1119 +#: builtin/log.c:1166 msgid "use simple number sequence for output file names" msgstr "使用简å•çš„æ•°å—åºåˆ—作为输出文件å" -#: builtin/log.c:1120 +#: builtin/log.c:1167 msgid "sfx" msgstr "åŽç¼€" -#: builtin/log.c:1121 +#: builtin/log.c:1168 msgid "use <sfx> instead of '.patch'" msgstr "使用 <åŽç¼€> 代替 '.patch'" -#: builtin/log.c:1123 +#: builtin/log.c:1170 msgid "start numbering patches at <n> instead of 1" msgstr "è¡¥ä¸ä»¥ <n> 开始编å·ï¼Œè€Œä¸æ˜¯1" -#: builtin/log.c:1125 +#: builtin/log.c:1172 msgid "mark the series as Nth re-roll" msgstr "æ ‡è®°è¡¥ä¸ç³»åˆ—æ˜¯ç¬¬å‡ æ¬¡é‡åˆ¶" -#: builtin/log.c:1127 +#: builtin/log.c:1174 msgid "Use [<prefix>] instead of [PATCH]" msgstr "使用 [<å‰ç¼€>] 代替 [PATCH]" -#: builtin/log.c:1130 +#: builtin/log.c:1177 msgid "store resulting files in <dir>" msgstr "把结果文件å˜å‚¨åœ¨ <dir>" -#: builtin/log.c:1133 +#: builtin/log.c:1180 msgid "don't strip/add [PATCH]" msgstr "ä¸åˆ 除/æ·»åŠ [PATCH]" -#: builtin/log.c:1136 +#: builtin/log.c:1183 msgid "don't output binary diffs" msgstr "ä¸è¾“出二进制差异" -#: builtin/log.c:1138 +#: builtin/log.c:1185 msgid "don't include a patch matching a commit upstream" msgstr "ä¸åŒ…å«å·²åœ¨ä¸Šæ¸¸æ交ä¸çš„è¡¥ä¸" -#: builtin/log.c:1140 +#: builtin/log.c:1187 msgid "show patch format instead of default (patch + stat)" msgstr "显示纯补ä¸æ ¼å¼è€Œéžé»˜è®¤çš„(补ä¸+状æ€ï¼‰" -#: builtin/log.c:1142 +#: builtin/log.c:1189 msgid "Messaging" msgstr "邮件å‘é€" -#: builtin/log.c:1143 +#: builtin/log.c:1190 msgid "header" msgstr "header" -#: builtin/log.c:1144 +#: builtin/log.c:1191 msgid "add email header" msgstr "æ·»åŠ é‚®ä»¶å¤´" -#: builtin/log.c:1145 builtin/log.c:1147 +#: builtin/log.c:1192 builtin/log.c:1194 msgid "email" msgstr "邮件地å€" -#: builtin/log.c:1145 +#: builtin/log.c:1192 msgid "add To: header" msgstr "æ·»åŠ æ”¶ä»¶äºº" -#: builtin/log.c:1147 +#: builtin/log.c:1194 msgid "add Cc: header" msgstr "æ·»åŠ æŠ„é€" -#: builtin/log.c:1149 +#: builtin/log.c:1196 +msgid "ident" +msgstr "ident" + +#: builtin/log.c:1197 +msgid "set From address to <ident> (or committer ident if absent)" +msgstr "设置 From 地å€ä¸º <ident>(如若ä¸æ供,用æ交者IDåšä¸ºåœ°å€ï¼‰" + +#: builtin/log.c:1199 msgid "message-id" msgstr "message-id" -#: builtin/log.c:1150 +#: builtin/log.c:1200 msgid "make first mail a reply to <message-id>" msgstr "使第一å°é‚®ä»¶ä½œä¸ºå¯¹ <message-id> 的回å¤" -#: builtin/log.c:1151 builtin/log.c:1154 +#: builtin/log.c:1201 builtin/log.c:1204 msgid "boundary" msgstr "边界" -#: builtin/log.c:1152 +#: builtin/log.c:1202 msgid "attach the patch" msgstr "附件方å¼æ·»åŠ è¡¥ä¸" -#: builtin/log.c:1155 +#: builtin/log.c:1205 msgid "inline the patch" msgstr "内è”显示补ä¸" -#: builtin/log.c:1159 +#: builtin/log.c:1209 msgid "enable message threading, styles: shallow, deep" msgstr "å¯ç”¨é‚®ä»¶çº¿ç´¢ï¼Œé£Žæ ¼ï¼šæµ…,深" -#: builtin/log.c:1161 +#: builtin/log.c:1211 msgid "signature" msgstr "ç¾å" -#: builtin/log.c:1162 +#: builtin/log.c:1212 msgid "add a signature" msgstr "æ·»åŠ ä¸€ä¸ªç¾å" -#: builtin/log.c:1164 +#: builtin/log.c:1214 msgid "don't print the patch filenames" msgstr "ä¸è¦æ‰“å°è¡¥ä¸æ–‡ä»¶å" -#: builtin/log.c:1248 +#: builtin/log.c:1288 +#, c-format +msgid "invalid ident line: %s" +msgstr "包å«æ— æ•ˆçš„èº«ä»½æ ‡è¯†ï¼š%s" + +#: builtin/log.c:1303 msgid "-n and -k are mutually exclusive." msgstr "-n å’Œ -k 互斥。" -#: builtin/log.c:1250 +#: builtin/log.c:1305 msgid "--subject-prefix and -k are mutually exclusive." msgstr "--subject-prefix å’Œ -k 互斥。" -#: builtin/log.c:1258 +#: builtin/log.c:1313 msgid "--name-only does not make sense" msgstr "--name-only æ— æ„义" -#: builtin/log.c:1260 +#: builtin/log.c:1315 msgid "--name-status does not make sense" msgstr "--name-status æ— æ„义" -#: builtin/log.c:1262 +#: builtin/log.c:1317 msgid "--check does not make sense" msgstr "--check æ— æ„义" -#: builtin/log.c:1285 +#: builtin/log.c:1340 msgid "standard output, or directory, which one?" msgstr "æ ‡å‡†è¾“å‡ºæˆ–ç›®å½•ï¼Œå“ªä¸€ä¸ªï¼Ÿ" -#: builtin/log.c:1287 +#: builtin/log.c:1342 #, c-format msgid "Could not create directory '%s'" msgstr "ä¸èƒ½åˆ›å»ºç›®å½• '%s'" -#: builtin/log.c:1435 +#: builtin/log.c:1490 msgid "Failed to create output files" msgstr "æ— æ³•åˆ›å»ºè¾“å‡ºæ–‡ä»¶" -#: builtin/log.c:1484 +#: builtin/log.c:1539 msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]" msgstr "git cherry [-v] [<上游> [<头> [<é™åˆ¶>]]]" -#: builtin/log.c:1539 +#: builtin/log.c:1594 #, c-format msgid "" "Could not find a tracked remote branch, please specify <upstream> manually.\n" msgstr "ä¸èƒ½æ‰¾åˆ°è·Ÿè¸ªçš„远程分支,请手工指定 <upstream>。\n" -#: builtin/log.c:1552 builtin/log.c:1554 builtin/log.c:1566 +#: builtin/log.c:1607 builtin/log.c:1609 builtin/log.c:1621 #, c-format msgid "Unknown commit %s" msgstr "未知æ交 %s" -#: builtin/ls-files.c:402 +#: builtin/ls-files.c:408 msgid "git ls-files [options] [<file>...]" msgstr "git ls-files [选项] [<文件>...]" -#: builtin/ls-files.c:459 +#: builtin/ls-files.c:465 msgid "identify the file status with tags" msgstr "ç”¨æ ‡ç¾æ ‡è¯†æ–‡ä»¶çš„状æ€" -#: builtin/ls-files.c:461 +#: builtin/ls-files.c:467 msgid "use lowercase letters for 'assume unchanged' files" msgstr "使用å°å†™å—æ¯è¡¨ç¤º 'å‡è®¾æœªæ”¹å˜çš„' 文件" -#: builtin/ls-files.c:463 +#: builtin/ls-files.c:469 msgid "show cached files in the output (default)" msgstr "显示缓å˜çš„文件(默认)" -#: builtin/ls-files.c:465 +#: builtin/ls-files.c:471 msgid "show deleted files in the output" msgstr "æ˜¾ç¤ºå·²åˆ é™¤çš„æ–‡ä»¶" -#: builtin/ls-files.c:467 +#: builtin/ls-files.c:473 msgid "show modified files in the output" msgstr "显示已修改的文件" -#: builtin/ls-files.c:469 +#: builtin/ls-files.c:475 msgid "show other files in the output" msgstr "显示其它文件" -#: builtin/ls-files.c:471 +#: builtin/ls-files.c:477 msgid "show ignored files in the output" msgstr "显示忽略的文件" -#: builtin/ls-files.c:474 +#: builtin/ls-files.c:480 msgid "show staged contents' object name in the output" msgstr "显示暂å˜åŒºå†…容的对象å称" -#: builtin/ls-files.c:476 +#: builtin/ls-files.c:482 msgid "show files on the filesystem that need to be removed" msgstr "显示文件系统需è¦åˆ 除的文件" -#: builtin/ls-files.c:478 +#: builtin/ls-files.c:484 msgid "show 'other' directories' name only" msgstr "åªæ˜¾ç¤ºâ€œå…¶ä»–â€ç›®å½•çš„å称" -#: builtin/ls-files.c:481 +#: builtin/ls-files.c:487 msgid "don't show empty directories" msgstr "ä¸æ˜¾ç¤ºç©ºç›®å½•" -#: builtin/ls-files.c:484 +#: builtin/ls-files.c:490 msgid "show unmerged files in the output" msgstr "显示未åˆå¹¶çš„文件" -#: builtin/ls-files.c:486 +#: builtin/ls-files.c:492 msgid "show resolve-undo information" msgstr "显示 resolve-undo ä¿¡æ¯" -#: builtin/ls-files.c:488 +#: builtin/ls-files.c:494 msgid "skip files matching pattern" msgstr "匹é…排除文件的模å¼" -#: builtin/ls-files.c:491 +#: builtin/ls-files.c:497 msgid "exclude patterns are read from <file>" msgstr "从 <文件> ä¸è¯»å–排除模å¼" -#: builtin/ls-files.c:494 +#: builtin/ls-files.c:500 msgid "read additional per-directory exclude patterns in <file>" msgstr "从 <文件> 读å–é¢å¤–çš„æ¯ä¸ªç›®å½•çš„排除模å¼" -#: builtin/ls-files.c:496 +#: builtin/ls-files.c:502 msgid "add the standard git exclusions" msgstr "æ·»åŠ æ ‡å‡†çš„ git 排除" -#: builtin/ls-files.c:499 +#: builtin/ls-files.c:505 msgid "make the output relative to the project top directory" msgstr "显示相对于顶级目录的文件å" -#: builtin/ls-files.c:502 +#: builtin/ls-files.c:508 msgid "if any <file> is not in the index, treat this as an error" msgstr "如果任何 <文件> 都ä¸åœ¨ç´¢å¼•åŒºï¼Œè§†ä¸ºé”™è¯¯" -#: builtin/ls-files.c:503 +#: builtin/ls-files.c:509 msgid "tree-ish" msgstr "æ ‘æˆ–æ交" -#: builtin/ls-files.c:504 +#: builtin/ls-files.c:510 msgid "pretend that paths removed since <tree-ish> are still present" msgstr "å‡è£…自从 <æ ‘æˆ–æ交> 之åŽåˆ 除的路径ä»ç„¶å˜åœ¨" -#: builtin/ls-files.c:506 +#: builtin/ls-files.c:512 msgid "show debugging data" msgstr "显示调试数æ®" @@ -6147,168 +6397,168 @@ msgstr "git merge [选项] <说明> HEAD <æ交>" msgid "git merge --abort" msgstr "git merge --abort" -#: builtin/merge.c:90 +#: builtin/merge.c:98 msgid "switch `m' requires a value" msgstr "开关 `m' 需è¦ä¸€ä¸ªå€¼" -#: builtin/merge.c:127 +#: builtin/merge.c:135 #, c-format msgid "Could not find merge strategy '%s'.\n" msgstr "ä¸èƒ½æ‰¾åˆ°åˆå¹¶ç–ç•¥ '%s'。\n" -#: builtin/merge.c:128 +#: builtin/merge.c:136 #, c-format msgid "Available strategies are:" msgstr "å¯ç”¨çš„ç–略有:" -#: builtin/merge.c:133 +#: builtin/merge.c:141 #, c-format msgid "Available custom strategies are:" msgstr "å¯ç”¨çš„自定义ç–略有:" -#: builtin/merge.c:183 +#: builtin/merge.c:198 msgid "do not show a diffstat at the end of the merge" msgstr "在åˆå¹¶çš„最åŽä¸æ˜¾ç¤ºå·®å¼‚统计" -#: builtin/merge.c:186 +#: builtin/merge.c:201 msgid "show a diffstat at the end of the merge" msgstr "在åˆå¹¶çš„最åŽæ˜¾ç¤ºå·®å¼‚统计" -#: builtin/merge.c:187 +#: builtin/merge.c:202 msgid "(synonym to --stat)" msgstr "(和 --stat åŒä¹‰ï¼‰" -#: builtin/merge.c:189 +#: builtin/merge.c:204 msgid "add (at most <n>) entries from shortlog to merge commit message" msgstr "在åˆå¹¶æ交信æ¯ä¸æ·»åŠ (最多 <n> æ¡ï¼‰ç²¾ç®€æ交记录" -#: builtin/merge.c:192 +#: builtin/merge.c:207 msgid "create a single commit instead of doing a merge" msgstr "创建一个å•ç‹¬çš„æ交而ä¸æ˜¯åšä¸€æ¬¡åˆå¹¶" -#: builtin/merge.c:194 +#: builtin/merge.c:209 msgid "perform a commit if the merge succeeds (default)" msgstr "如果åˆå¹¶æˆåŠŸï¼Œæ‰§è¡Œä¸€æ¬¡æ交(默认)" -#: builtin/merge.c:196 +#: builtin/merge.c:211 msgid "edit message before committing" msgstr "在æ交å‰ç¼–辑æ交说明" -#: builtin/merge.c:198 +#: builtin/merge.c:212 msgid "allow fast-forward (default)" msgstr "å…许快进(默认)" -#: builtin/merge.c:200 +#: builtin/merge.c:214 msgid "abort if fast-forward is not possible" msgstr "如果ä¸èƒ½å¿«è¿›å°±æ”¾å¼ƒåˆå¹¶" -#: builtin/merge.c:203 +#: builtin/merge.c:218 msgid "Verify that the named commit has a valid GPG signature" msgstr "验è¯æŒ‡å®šçš„æ交是å¦åŒ…å«ä¸€ä¸ªæœ‰æ•ˆçš„ GPG ç¾å" -#: builtin/merge.c:204 builtin/notes.c:866 builtin/revert.c:112 +#: builtin/merge.c:219 builtin/notes.c:738 builtin/revert.c:114 msgid "strategy" msgstr "ç–ç•¥" -#: builtin/merge.c:205 +#: builtin/merge.c:220 msgid "merge strategy to use" msgstr "è¦ä½¿ç”¨çš„åˆå¹¶ç–ç•¥" -#: builtin/merge.c:206 +#: builtin/merge.c:221 msgid "option=value" msgstr "option=value" -#: builtin/merge.c:207 +#: builtin/merge.c:222 msgid "option for selected merge strategy" msgstr "所选的åˆå¹¶ç–略的选项" -#: builtin/merge.c:209 +#: builtin/merge.c:224 msgid "merge commit message (for a non-fast-forward merge)" msgstr "åˆå¹¶çš„æ交说明(针对éžå¿«è¿›å¼åˆå¹¶ï¼‰" -#: builtin/merge.c:213 +#: builtin/merge.c:228 msgid "abort the current in-progress merge" msgstr "放弃当å‰æ£åœ¨è¿›è¡Œçš„åˆå¹¶" -#: builtin/merge.c:242 +#: builtin/merge.c:257 msgid "could not run stash." msgstr "ä¸èƒ½è¿›è¡Œè¿›åº¦ä¿å˜ã€‚" -#: builtin/merge.c:247 +#: builtin/merge.c:262 msgid "stash failed" msgstr "进度ä¿å˜å¤±è´¥" -#: builtin/merge.c:252 +#: builtin/merge.c:267 #, c-format msgid "not a valid object: %s" msgstr "ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆå¯¹è±¡ï¼š%s" -#: builtin/merge.c:271 builtin/merge.c:288 +#: builtin/merge.c:286 builtin/merge.c:303 msgid "read-tree failed" msgstr "读å–æ ‘å¤±è´¥" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: builtin/merge.c:318 +#: builtin/merge.c:333 msgid " (nothing to squash)" msgstr " ï¼ˆæ— å¯åŽ‹ç¼©ï¼‰" -#: builtin/merge.c:331 +#: builtin/merge.c:346 #, c-format msgid "Squash commit -- not updating HEAD\n" msgstr "压缩æ交 -- 未更新 HEAD\n" -#: builtin/merge.c:363 +#: builtin/merge.c:378 msgid "Writing SQUASH_MSG" msgstr "写入 SQUASH_MSG" -#: builtin/merge.c:365 +#: builtin/merge.c:380 msgid "Finishing SQUASH_MSG" msgstr "å®Œæˆ SQUASH_MSG" -#: builtin/merge.c:388 +#: builtin/merge.c:403 #, c-format msgid "No merge message -- not updating HEAD\n" msgstr "æ— åˆå¹¶ä¿¡æ¯ -- 未更新 HEAD\n" -#: builtin/merge.c:438 +#: builtin/merge.c:453 #, c-format msgid "'%s' does not point to a commit" msgstr "'%s' 没有指å‘一个æ交" -#: builtin/merge.c:550 +#: builtin/merge.c:565 #, c-format msgid "Bad branch.%s.mergeoptions string: %s" msgstr "åçš„ branch.%s.mergeoptions å—符串:%s" -#: builtin/merge.c:643 +#: builtin/merge.c:657 msgid "git write-tree failed to write a tree" msgstr "git write-tree æ— æ³•å†™å…¥ä¸€æ ‘å¯¹è±¡" -#: builtin/merge.c:671 +#: builtin/merge.c:685 msgid "Not handling anything other than two heads merge." msgstr "ä¸èƒ½å¤„ç†ä¸¤ä¸ªå¤´åˆå¹¶ä¹‹å¤–的任何æ“作。" -#: builtin/merge.c:685 +#: builtin/merge.c:699 #, c-format msgid "Unknown option for merge-recursive: -X%s" msgstr "merge-recursive 的未知选项:-X%s" -#: builtin/merge.c:699 +#: builtin/merge.c:713 #, c-format msgid "unable to write %s" msgstr "ä¸èƒ½å†™ %s" -#: builtin/merge.c:788 +#: builtin/merge.c:802 #, c-format msgid "Could not read from '%s'" msgstr "ä¸èƒ½ä»Ž '%s' 读å–" -#: builtin/merge.c:797 +#: builtin/merge.c:811 #, c-format msgid "Not committing merge; use 'git commit' to complete the merge.\n" msgstr "未æ交åˆå¹¶ï¼Œä½¿ç”¨ 'git commit' 完æˆæ¤æ¬¡åˆå¹¶ã€‚\n" -#: builtin/merge.c:803 +#: builtin/merge.c:817 #, c-format msgid "" "Please enter a commit message to explain why this merge is necessary,\n" @@ -6322,52 +6572,47 @@ msgstr "" "\n" "以 '%c' 开头的行将被忽略,而且空æ交说明将会终æ¢æ交。\n" -#: builtin/merge.c:827 +#: builtin/merge.c:841 msgid "Empty commit message." msgstr "空æ交信æ¯ã€‚" -#: builtin/merge.c:839 +#: builtin/merge.c:853 #, c-format msgid "Wonderful.\n" msgstr "太棒了。\n" -#: builtin/merge.c:904 +#: builtin/merge.c:918 #, c-format msgid "Automatic merge failed; fix conflicts and then commit the result.\n" msgstr "自动åˆå¹¶å¤±è´¥ï¼Œä¿®æ£å†²çªç„¶åŽæ交修æ£çš„结果。\n" -#: builtin/merge.c:920 +#: builtin/merge.c:934 #, c-format msgid "'%s' is not a commit" msgstr "'%s' ä¸æ˜¯ä¸€ä¸ªæ交" -#: builtin/merge.c:961 +#: builtin/merge.c:975 msgid "No current branch." msgstr "没有当å‰åˆ†æ”¯ã€‚" -#: builtin/merge.c:963 +#: builtin/merge.c:977 msgid "No remote for the current branch." msgstr "当å‰åˆ†æ”¯æ²¡æœ‰å¯¹åº”的远程版本库。" -#: builtin/merge.c:965 +#: builtin/merge.c:979 msgid "No default upstream defined for the current branch." msgstr "当å‰åˆ†æ”¯æ²¡æœ‰å®šä¹‰é»˜è®¤çš„上游分支。" -#: builtin/merge.c:970 +#: builtin/merge.c:984 #, c-format -msgid "No remote tracking branch for %s from %s" -msgstr "%s 没有æ¥è‡ª %s 的远程跟踪分支" +msgid "No remote-tracking branch for %s from %s" +msgstr "对于 %s 没有æ¥è‡ª %s 的远程跟踪分支" -#: builtin/merge.c:1057 builtin/merge.c:1214 -#, c-format -msgid "%s - not something we can merge" -msgstr "%s - ä¸èƒ½è¢«åˆå¹¶" - -#: builtin/merge.c:1125 +#: builtin/merge.c:1140 msgid "There is no merge to abort (MERGE_HEAD missing)." msgstr "没有è¦ç»ˆæ¢çš„åˆå¹¶ï¼ˆMERGE_HEAD 丢失)。" -#: builtin/merge.c:1141 git-pull.sh:31 +#: builtin/merge.c:1156 git-pull.sh:31 msgid "" "You have not concluded your merge (MERGE_HEAD exists).\n" "Please, commit your changes before you can merge." @@ -6375,11 +6620,11 @@ msgstr "" "您尚未结æŸæ‚¨çš„åˆå¹¶ï¼ˆå˜åœ¨ MERGE_HEAD)。\n" "请在åˆå¹¶å‰å…ˆæ交您的修改。" -#: builtin/merge.c:1144 git-pull.sh:34 +#: builtin/merge.c:1159 git-pull.sh:34 msgid "You have not concluded your merge (MERGE_HEAD exists)." msgstr "您尚未结æŸæ‚¨çš„åˆå¹¶ï¼ˆå˜åœ¨ MERGE_HEAD)。" -#: builtin/merge.c:1148 +#: builtin/merge.c:1163 msgid "" "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" "Please, commit your changes before you can merge." @@ -6387,100 +6632,101 @@ msgstr "" "您尚未结æŸæ‚¨çš„拣选(å˜åœ¨ CHERRY_PICK_HEAD)。\n" "请在åˆå¹¶å‰å…ˆæ交您的修改。" -#: builtin/merge.c:1151 +#: builtin/merge.c:1166 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." msgstr "您尚未结æŸæ‚¨çš„拣选(å˜åœ¨ CHERRY_PICK_HEAD)。" -#: builtin/merge.c:1160 +#: builtin/merge.c:1175 msgid "You cannot combine --squash with --no-ff." msgstr "您ä¸èƒ½å°† --squash 与 --no-ff åŒæ—¶ä½¿ç”¨ã€‚" -#: builtin/merge.c:1165 -msgid "You cannot combine --no-ff with --ff-only." -msgstr "您ä¸èƒ½å°† --no-ff 与 --ff-only åŒæ—¶ä½¿ç”¨ã€‚" - -#: builtin/merge.c:1172 +#: builtin/merge.c:1184 msgid "No commit specified and merge.defaultToUpstream not set." msgstr "未指定æ交并且 merge.defaultToUpstream 未设置。" -#: builtin/merge.c:1204 +#: builtin/merge.c:1216 msgid "Can merge only exactly one commit into empty head" msgstr "åªèƒ½å°†ä¸€ä¸ªæ交åˆå¹¶åˆ°ç©ºåˆ†æ”¯ä¸Š" -#: builtin/merge.c:1207 +#: builtin/merge.c:1219 msgid "Squash commit into empty head not supported yet" msgstr "å°šä¸æ”¯æŒåˆ°ç©ºåˆ†æ”¯çš„压缩æ交" -#: builtin/merge.c:1209 +#: builtin/merge.c:1221 msgid "Non-fast-forward commit does not make sense into an empty head" msgstr "到空分支的éžå¿«è¿›å¼æ交没有æ„义" -#: builtin/merge.c:1265 +#: builtin/merge.c:1226 +#, c-format +msgid "%s - not something we can merge" +msgstr "%s - ä¸èƒ½è¢«åˆå¹¶" + +#: builtin/merge.c:1277 #, c-format msgid "Commit %s has an untrusted GPG signature, allegedly by %s." msgstr "æ交 %s 有一个éžå¯ä¿¡çš„声称æ¥è‡ª %s çš„ GPG ç¾å。" -#: builtin/merge.c:1268 +#: builtin/merge.c:1280 #, c-format msgid "Commit %s has a bad GPG signature allegedly by %s." msgstr "æ交 %s 有一个错误的声称æ¥è‡ª %s çš„ GPG ç¾å。" #. 'N' -#: builtin/merge.c:1271 +#: builtin/merge.c:1283 #, c-format msgid "Commit %s does not have a GPG signature." msgstr "æ交 %s 没有一个 GPG ç¾å。" -#: builtin/merge.c:1274 +#: builtin/merge.c:1286 #, c-format msgid "Commit %s has a good GPG signature by %s\n" msgstr "æ交 %s 有一个æ¥è‡ª %s 的好的 GPG ç¾å。\n" -#: builtin/merge.c:1358 +#: builtin/merge.c:1370 #, c-format msgid "Updating %s..%s\n" msgstr "æ›´æ–° %s..%s\n" -#: builtin/merge.c:1397 +#: builtin/merge.c:1409 #, c-format msgid "Trying really trivial in-index merge...\n" msgstr "å°è¯•éžå¸¸å°çš„索引内åˆå¹¶...\n" -#: builtin/merge.c:1404 +#: builtin/merge.c:1416 #, c-format msgid "Nope.\n" msgstr "æ— ã€‚\n" -#: builtin/merge.c:1436 +#: builtin/merge.c:1448 msgid "Not possible to fast-forward, aborting." msgstr "æ— æ³•å¿«è¿›ï¼Œç»ˆæ¢ã€‚" -#: builtin/merge.c:1459 builtin/merge.c:1538 +#: builtin/merge.c:1471 builtin/merge.c:1550 #, c-format msgid "Rewinding the tree to pristine...\n" msgstr "å°†æ ‘å›žæ»šè‡³åŽŸå§‹çŠ¶æ€...\n" -#: builtin/merge.c:1463 +#: builtin/merge.c:1475 #, c-format msgid "Trying merge strategy %s...\n" msgstr "å°è¯•åˆå¹¶ç–ç•¥ %s...\n" -#: builtin/merge.c:1529 +#: builtin/merge.c:1541 #, c-format msgid "No merge strategy handled the merge.\n" msgstr "没有åˆå¹¶ç–略处ç†æ¤åˆå¹¶ã€‚\n" -#: builtin/merge.c:1531 +#: builtin/merge.c:1543 #, c-format msgid "Merge with strategy %s failed.\n" msgstr "使用ç–ç•¥ %s åˆå¹¶å¤±è´¥ã€‚\n" -#: builtin/merge.c:1540 +#: builtin/merge.c:1552 #, c-format msgid "Using the %s to prepare resolving by hand.\n" msgstr "使用 %s 以准备手工解决。\n" -#: builtin/merge.c:1552 +#: builtin/merge.c:1564 #, c-format msgid "Automatic merge went well; stopped before committing as requested\n" msgstr "自动åˆå¹¶è¿›å±•é¡ºåˆ©ï¼ŒæŒ‰è¦æ±‚在æ交å‰åœæ¢\n" @@ -6646,47 +6892,51 @@ msgstr "é‡å‘½å %s 至 %s\n" msgid "renaming '%s' failed" msgstr "é‡å‘½å '%s' 失败" -#: builtin/name-rev.c:175 +#: builtin/name-rev.c:259 msgid "git name-rev [options] <commit>..." msgstr "git name-rev [选项] <æ交>..." -#: builtin/name-rev.c:176 +#: builtin/name-rev.c:260 msgid "git name-rev [options] --all" msgstr "git name-rev [选项] --all" -#: builtin/name-rev.c:177 +#: builtin/name-rev.c:261 msgid "git name-rev [options] --stdin" msgstr "git name-rev [选项] --stdin" -#: builtin/name-rev.c:229 +#: builtin/name-rev.c:313 msgid "print only names (no SHA-1)" msgstr "åªæ‰“å°åç§°ï¼ˆæ— SHA-1)" -#: builtin/name-rev.c:230 +#: builtin/name-rev.c:314 msgid "only use tags to name the commits" msgstr "åªä½¿ç”¨ tags æ¥å‘½åæ交" -#: builtin/name-rev.c:232 +#: builtin/name-rev.c:316 msgid "only use refs matching <pattern>" msgstr "åªä½¿ç”¨å’Œ <模å¼> 相匹é…的引用" -#: builtin/name-rev.c:234 +#: builtin/name-rev.c:318 msgid "list all commits reachable from all refs" msgstr "列出å¯ä»¥ä»Žæ‰€æœ‰å¼•ç”¨è®¿é—®çš„æ交" -#: builtin/name-rev.c:235 +#: builtin/name-rev.c:319 msgid "read from stdin" msgstr "ä»Žæ ‡å‡†è¾“å…¥è¯»å–" -#: builtin/name-rev.c:236 +#: builtin/name-rev.c:320 msgid "allow to print `undefined` names" msgstr "å…è®¸æ‰“å° `未定义` çš„å称" -#: builtin/notes.c:26 +#: builtin/name-rev.c:326 +msgid "dereference tags in the input (internal use)" +msgstr "åå‘解æžè¾“å…¥ä¸çš„ tags(内部使用)" + +#: builtin/notes.c:24 msgid "git notes [--ref <notes_ref>] [list [<object>]]" msgstr "git notes [--ref <注解引用>] [list [<对象>]]" -#: builtin/notes.c:27 +#: builtin/notes.c:25 msgid "" "git notes [--ref <notes_ref>] add [-f] [-m <msg> | -F <file> | (-c | -C) " "<object>] [<object>]" @@ -6694,11 +6944,11 @@ msgstr "" "git notes [--ref <注解引用>] add [-f] [-m <说明> | -F <文件> | (-c | -C) <对" "象>] [<对象>]" -#: builtin/notes.c:28 +#: builtin/notes.c:26 msgid "git notes [--ref <notes_ref>] copy [-f] <from-object> <to-object>" msgstr "git notes [--ref <注解引用>] copy [-f] <æºå¯¹è±¡> <ç›®æ ‡å¯¹è±¡>" -#: builtin/notes.c:29 +#: builtin/notes.c:27 msgid "" "git notes [--ref <notes_ref>] append [-m <msg> | -F <file> | (-c | -C) " "<object>] [<object>]" @@ -6706,255 +6956,234 @@ msgstr "" "git notes [--ref <注解引用>] append [-m <说明> | -F <文件> | (-c | -C) <对象" ">] [<对象>]" -#: builtin/notes.c:30 +#: builtin/notes.c:28 msgid "git notes [--ref <notes_ref>] edit [<object>]" msgstr "git notes [--ref <注解引用>] edit [<对象>]" -#: builtin/notes.c:31 +#: builtin/notes.c:29 msgid "git notes [--ref <notes_ref>] show [<object>]" msgstr "git notes [--ref <注解引用>] show [<对象>]" -#: builtin/notes.c:32 +#: builtin/notes.c:30 msgid "" "git notes [--ref <notes_ref>] merge [-v | -q] [-s <strategy> ] <notes_ref>" msgstr "git notes [--ref <注解引用>] merge [-v | -q] [-s <ç–ç•¥> ] <注解引用>" -#: builtin/notes.c:33 +#: builtin/notes.c:31 msgid "git notes merge --commit [-v | -q]" msgstr "git notes merge --commit [-v | -q]" -#: builtin/notes.c:34 +#: builtin/notes.c:32 msgid "git notes merge --abort [-v | -q]" msgstr "git notes merge --abort [-v | -q]" -#: builtin/notes.c:35 +#: builtin/notes.c:33 msgid "git notes [--ref <notes_ref>] remove [<object>...]" msgstr "git notes [--ref <注解引用>] remove [<对象>...]" -#: builtin/notes.c:36 +#: builtin/notes.c:34 msgid "git notes [--ref <notes_ref>] prune [-n | -v]" msgstr "git notes [--ref <注解引用>] prune [-n | -v]" -#: builtin/notes.c:37 +#: builtin/notes.c:35 msgid "git notes [--ref <notes_ref>] get-ref" msgstr "git notes [--ref <注解引用>] get-ref" -#: builtin/notes.c:42 +#: builtin/notes.c:40 msgid "git notes [list [<object>]]" msgstr "git notes [list [<对象>]]" -#: builtin/notes.c:47 +#: builtin/notes.c:45 msgid "git notes add [<options>] [<object>]" msgstr "git notes add [<选项>] [<对象>]" -#: builtin/notes.c:52 +#: builtin/notes.c:50 msgid "git notes copy [<options>] <from-object> <to-object>" msgstr "git notes copy [<选项>] <æºå¯¹è±¡> <ç›®æ ‡å¯¹è±¡>" -#: builtin/notes.c:53 +#: builtin/notes.c:51 msgid "git notes copy --stdin [<from-object> <to-object>]..." msgstr "git notes copy --stdin [<æºå¯¹è±¡> <ç›®æ ‡å¯¹è±¡>]..." -#: builtin/notes.c:58 +#: builtin/notes.c:56 msgid "git notes append [<options>] [<object>]" msgstr "git notes append [<选项>] [<对象>]" -#: builtin/notes.c:63 +#: builtin/notes.c:61 msgid "git notes edit [<object>]" msgstr "git notes edit [<对象>]" -#: builtin/notes.c:68 +#: builtin/notes.c:66 msgid "git notes show [<object>]" msgstr "git notes show [<对象>]" -#: builtin/notes.c:73 +#: builtin/notes.c:71 msgid "git notes merge [<options>] <notes_ref>" msgstr "git notes merge [<选项>] <注解引用>" -#: builtin/notes.c:74 +#: builtin/notes.c:72 msgid "git notes merge --commit [<options>]" msgstr "git notes merge --commit [<选项>]" -#: builtin/notes.c:75 +#: builtin/notes.c:73 msgid "git notes merge --abort [<options>]" msgstr "git notes merge --abort [<选项>]" -#: builtin/notes.c:80 +#: builtin/notes.c:78 msgid "git notes remove [<object>]" msgstr "git notes remove [<对象>]" -#: builtin/notes.c:85 +#: builtin/notes.c:83 msgid "git notes prune [<options>]" msgstr "git notes prune [<选项>]" -#: builtin/notes.c:90 +#: builtin/notes.c:88 msgid "git notes get-ref" msgstr "git notes get-ref" -#: builtin/notes.c:139 +#: builtin/notes.c:137 #, c-format msgid "unable to start 'show' for object '%s'" msgstr "ä¸èƒ½ä¸ºå¯¹è±¡ '%s' 开始 'show'" -#: builtin/notes.c:143 +#: builtin/notes.c:141 msgid "could not read 'show' output" msgstr "ä¸èƒ½è¯»å– 'show' 的输出" -#: builtin/notes.c:151 +#: builtin/notes.c:149 #, c-format msgid "failed to finish 'show' for object '%s'" msgstr "æ— æ³•ä¸ºå¯¹è±¡ '%s' å®Œæˆ 'show'" -#: builtin/notes.c:169 builtin/tag.c:341 +#: builtin/notes.c:167 builtin/tag.c:341 #, c-format msgid "could not create file '%s'" msgstr "ä¸èƒ½åˆ›å»ºæ–‡ä»¶ '%s'" -#: builtin/notes.c:188 +#: builtin/notes.c:186 msgid "Please supply the note contents using either -m or -F option" msgstr "请通过 -m 或 -F 选项为注解æ供内容" -#: builtin/notes.c:209 builtin/notes.c:972 +#: builtin/notes.c:207 builtin/notes.c:844 #, c-format msgid "Removing note for object %s\n" msgstr "åˆ é™¤å¯¹è±¡ %s 的注解\n" -#: builtin/notes.c:214 +#: builtin/notes.c:212 msgid "unable to write note object" msgstr "ä¸èƒ½å†™æ³¨è§£å¯¹è±¡" -#: builtin/notes.c:216 +#: builtin/notes.c:214 #, c-format msgid "The note contents has been left in %s" msgstr "注解内容被留在文件 %s ä¸" -#: builtin/notes.c:250 builtin/tag.c:540 +#: builtin/notes.c:248 builtin/tag.c:540 #, c-format msgid "cannot read '%s'" msgstr "ä¸èƒ½è¯»å– '%s'" -#: builtin/notes.c:252 builtin/tag.c:543 +#: builtin/notes.c:250 builtin/tag.c:543 #, c-format msgid "could not open or read '%s'" msgstr "ä¸èƒ½æ‰“å¼€æˆ–è¯»å– '%s'" -#: builtin/notes.c:271 builtin/notes.c:444 builtin/notes.c:446 -#: builtin/notes.c:506 builtin/notes.c:560 builtin/notes.c:643 -#: builtin/notes.c:648 builtin/notes.c:723 builtin/notes.c:765 -#: builtin/notes.c:967 builtin/tag.c:556 +#: builtin/notes.c:269 builtin/notes.c:316 builtin/notes.c:318 +#: builtin/notes.c:378 builtin/notes.c:432 builtin/notes.c:515 +#: builtin/notes.c:520 builtin/notes.c:595 builtin/notes.c:637 +#: builtin/notes.c:839 builtin/tag.c:556 #, c-format msgid "Failed to resolve '%s' as a valid ref." msgstr "æ— æ³•è§£æž '%s' 为一个有效引用。" -#: builtin/notes.c:274 +#: builtin/notes.c:272 #, c-format msgid "Failed to read object '%s'." msgstr "æ— æ³•è¯»å–对象 '%s'。" -#: builtin/notes.c:298 -msgid "Cannot commit uninitialized/unreferenced notes tree" -msgstr "ä¸èƒ½æ交未åˆå§‹åŒ–/æœªå¼•ç”¨çš„æ³¨è§£æ ‘" - -#: builtin/notes.c:339 -#, c-format -msgid "Bad notes.rewriteMode value: '%s'" -msgstr "åçš„ notes.rewriteMode 值:'%s'" - -#: builtin/notes.c:349 -#, c-format -msgid "Refusing to rewrite notes in %s (outside of refs/notes/)" -msgstr "æ‹’ç»å‘ %s(在 refs/notes/ 之外)写入注解" - -#. TRANSLATORS: The first %s is the name of the -#. environment variable, the second %s is its value -#: builtin/notes.c:376 -#, c-format -msgid "Bad %s value: '%s'" -msgstr "åçš„ %s 值:'%s'" - -#: builtin/notes.c:440 +#: builtin/notes.c:312 #, c-format msgid "Malformed input line: '%s'." msgstr "éžæ³•çš„输入行:'%s'。" -#: builtin/notes.c:455 +#: builtin/notes.c:327 #, c-format msgid "Failed to copy notes from '%s' to '%s'" msgstr "æ— æ³•ä»Ž '%s' 到 '%s' æ‹·è´æ³¨è§£" -#: builtin/notes.c:499 builtin/notes.c:553 builtin/notes.c:626 -#: builtin/notes.c:638 builtin/notes.c:711 builtin/notes.c:758 -#: builtin/notes.c:1032 +#: builtin/notes.c:371 builtin/notes.c:425 builtin/notes.c:498 +#: builtin/notes.c:510 builtin/notes.c:583 builtin/notes.c:630 +#: builtin/notes.c:904 msgid "too many parameters" msgstr "å‚数太多" -#: builtin/notes.c:512 builtin/notes.c:771 +#: builtin/notes.c:384 builtin/notes.c:643 #, c-format msgid "No note found for object %s." msgstr "未å‘现对象 %s 的注解。" -#: builtin/notes.c:534 builtin/notes.c:691 +#: builtin/notes.c:406 builtin/notes.c:563 msgid "note contents as a string" msgstr "注解内容作为一个å—符串" -#: builtin/notes.c:537 builtin/notes.c:694 +#: builtin/notes.c:409 builtin/notes.c:566 msgid "note contents in a file" msgstr "注解内容到一个文件ä¸" -#: builtin/notes.c:539 builtin/notes.c:542 builtin/notes.c:696 -#: builtin/notes.c:699 builtin/tag.c:474 +#: builtin/notes.c:411 builtin/notes.c:414 builtin/notes.c:568 +#: builtin/notes.c:571 builtin/tag.c:474 msgid "object" msgstr "对象" -#: builtin/notes.c:540 builtin/notes.c:697 +#: builtin/notes.c:412 builtin/notes.c:569 msgid "reuse and edit specified note object" msgstr "é‡ç”¨å’Œç¼–辑指定的注解对象" -#: builtin/notes.c:543 builtin/notes.c:700 +#: builtin/notes.c:415 builtin/notes.c:572 msgid "reuse specified note object" msgstr "é‡ç”¨æŒ‡å®šçš„注解对象" -#: builtin/notes.c:545 builtin/notes.c:613 +#: builtin/notes.c:417 builtin/notes.c:485 msgid "replace existing notes" msgstr "替æ¢å·²å˜åœ¨çš„注解" -#: builtin/notes.c:579 +#: builtin/notes.c:451 #, c-format msgid "" "Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite " "existing notes" msgstr "ä¸èƒ½æ·»åŠ 注解。å‘现对象 %s å·²å˜åœ¨æ³¨è§£ã€‚使用 '-f' 覆盖现å˜æ³¨è§£" -#: builtin/notes.c:584 builtin/notes.c:661 +#: builtin/notes.c:456 builtin/notes.c:533 #, c-format msgid "Overwriting existing notes for object %s\n" msgstr "覆盖对象 %s 现å˜æ³¨è§£\n" -#: builtin/notes.c:614 +#: builtin/notes.c:486 msgid "read objects from stdin" msgstr "ä»Žæ ‡å‡†è¾“å…¥è¯»å–对象" -#: builtin/notes.c:616 +#: builtin/notes.c:488 msgid "load rewriting config for <command> (implies --stdin)" msgstr "é‡æ–°åŠ è½½ <命令> çš„é…置(éšå« --stdin)" -#: builtin/notes.c:634 +#: builtin/notes.c:506 msgid "too few parameters" msgstr "å‚数太少" -#: builtin/notes.c:655 +#: builtin/notes.c:527 #, c-format msgid "" "Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite " "existing notes" msgstr "ä¸èƒ½æ‹·è´æ³¨è§£ã€‚å‘现对象 %s å·²å˜åœ¨æ³¨è§£ã€‚使用 '-f' 覆盖现å˜æ³¨è§£" -#: builtin/notes.c:667 +#: builtin/notes.c:539 #, c-format msgid "Missing notes on source object %s. Cannot copy." msgstr "æºå¯¹è±¡ %s 缺少注解。ä¸èƒ½æ‹·è´ã€‚" -#: builtin/notes.c:716 +#: builtin/notes.c:588 #, c-format msgid "" "The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n" @@ -6963,58 +7192,58 @@ msgstr "" "å命令 'edit' 的选项 -m/-F/-c/-C 已弃用。\n" "请æ¢ç”¨ 'git notes add -f -m/-F/-c/-C'。\n" -#: builtin/notes.c:863 +#: builtin/notes.c:735 msgid "General options" msgstr "通用选项" -#: builtin/notes.c:865 +#: builtin/notes.c:737 msgid "Merge options" msgstr "åˆå¹¶é€‰é¡¹" -#: builtin/notes.c:867 +#: builtin/notes.c:739 msgid "" "resolve notes conflicts using the given strategy (manual/ours/theirs/union/" "cat_sort_uniq)" msgstr "使用指定的ç–ç•¥è§£å†³æ³¨è§£å†²çª (manual/ours/theirs/union/cat_sort_uniq)" -#: builtin/notes.c:869 +#: builtin/notes.c:741 msgid "Committing unmerged notes" msgstr "æ交未åˆå¹¶çš„注解" -#: builtin/notes.c:871 +#: builtin/notes.c:743 msgid "finalize notes merge by committing unmerged notes" msgstr "通过æ交未åˆå¹¶çš„注解æ¥å®Œæˆæ³¨è§£åˆå¹¶" -#: builtin/notes.c:873 +#: builtin/notes.c:745 msgid "Aborting notes merge resolution" msgstr "ä¸æ¢æ³¨è§£åˆå¹¶çš„方案" -#: builtin/notes.c:875 +#: builtin/notes.c:747 msgid "abort notes merge" msgstr "ä¸æ¢æ³¨è§£åˆå¹¶" -#: builtin/notes.c:970 +#: builtin/notes.c:842 #, c-format msgid "Object %s has no note\n" msgstr "对象 %s 没有注解\n" -#: builtin/notes.c:982 +#: builtin/notes.c:854 msgid "attempt to remove non-existent note is not an error" msgstr "å°è¯•åˆ 除ä¸å˜åœ¨çš„注解ä¸æ˜¯ä¸€ä¸ªé”™è¯¯" -#: builtin/notes.c:985 +#: builtin/notes.c:857 msgid "read object names from the standard input" msgstr "ä»Žæ ‡å‡†è¾“å…¥è¯»å–对象å称" -#: builtin/notes.c:1066 +#: builtin/notes.c:938 msgid "notes_ref" msgstr "注解引用" -#: builtin/notes.c:1067 +#: builtin/notes.c:939 msgid "use notes from <notes_ref>" msgstr "从 <注解引用> 使用注解" -#: builtin/notes.c:1102 builtin/remote.c:1598 +#: builtin/notes.c:974 builtin/remote.c:1598 #, c-format msgid "Unknown subcommand: %s" msgstr "未知å命令:%s" @@ -7248,7 +7477,7 @@ msgstr "" " git push %s %s\n" "%s" -#: builtin/push.c:121 +#: builtin/push.c:117 #, c-format msgid "" "You are not currently on a branch.\n" @@ -7262,7 +7491,7 @@ msgstr "" "\n" " git push %s HEAD:<name-of-remote-branch>\n" -#: builtin/push.c:128 +#: builtin/push.c:131 #, c-format msgid "" "The current branch %s has no upstream branch.\n" @@ -7275,12 +7504,12 @@ msgstr "" "\n" " git push --set-upstream %s %s\n" -#: builtin/push.c:136 +#: builtin/push.c:139 #, c-format msgid "The current branch %s has multiple upstream branches, refusing to push." msgstr "当å‰åˆ†æ”¯ %s 有多个上游分支,拒ç»æŽ¨é€ã€‚" -#: builtin/push.c:139 +#: builtin/push.c:142 #, c-format msgid "" "You are pushing to remote '%s', which is not the upstream of\n" @@ -7291,7 +7520,7 @@ msgstr "" "而没有告诉我è¦æŽ¨é€ä»€ä¹ˆã€æ›´æ–°å“ªä¸ªè¿œç¨‹åˆ†æ”¯ã€‚" # 译者:å—符串首行行首è¦æ·»åŠ “warning: â€å—串,故æ¤é¦–è¡Œè¦è¾ƒå…¶ä½™è¡ŒçŸ -#: builtin/push.c:151 +#: builtin/push.c:165 msgid "" "push.default is unset; its implicit value is changing in\n" "Git 2.0 from 'matching' to 'simple'. To squelch this message\n" @@ -7322,23 +7551,23 @@ msgstr "" "('simple' 模å¼ç”± Git 1.7.11 版本引入。如果您有时è¦ä½¿ç”¨è€ç‰ˆæœ¬çš„ Git,\n" "为ä¿æŒå…¼å®¹ï¼Œè¯·ç”¨ 'current' 代替 'simple' 模å¼ï¼‰" -#: builtin/push.c:199 +#: builtin/push.c:225 msgid "" "You didn't specify any refspecs to push, and push.default is \"nothing\"." msgstr "您没有为推é€æŒ‡å®šä»»ä½•å¼•ç”¨è¡¨è¾¾å¼ï¼Œå¹¶ä¸” push.default 为 \"nothing\"。" -#: builtin/push.c:206 +#: builtin/push.c:232 msgid "" "Updates were rejected because the tip of your current branch is behind\n" -"its remote counterpart. Merge the remote changes (e.g. 'git pull')\n" -"before pushing again.\n" +"its remote counterpart. Integrate the remote changes (e.g.\n" +"'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "更新被拒ç»ï¼Œå› 为您当å‰åˆ†æ”¯çš„最新æ交è½åŽäºŽå…¶å¯¹åº”的远程分支。\n" -"å†æ¬¡æŽ¨é€å‰ï¼Œå…ˆä¸Žè¿œç¨‹å˜æ›´åˆå¹¶ï¼ˆå¦‚ 'git pull')。详è§\n" +"å†æ¬¡æŽ¨é€å‰ï¼Œå…ˆä¸Žè¿œç¨‹å˜æ›´åˆå¹¶ï¼ˆå¦‚ 'git pull ...')。详è§\n" "'git push --help' ä¸çš„ 'Note about fast-forwards' å°èŠ‚。" -#: builtin/push.c:212 +#: builtin/push.c:238 msgid "" "Updates were rejected because a pushed branch tip is behind its remote\n" "counterpart. If you did not intend to push that branch, you may want to\n" @@ -7350,35 +7579,35 @@ msgstr "" "é…ç½®å˜é‡ 'push.default' 设置为 'simple'ã€'current' 或 'upstream'\n" "以便åªæŽ¨é€å½“å‰åˆ†æ”¯ã€‚" -#: builtin/push.c:218 +#: builtin/push.c:244 msgid "" "Updates were rejected because a pushed branch tip is behind its remote\n" -"counterpart. Check out this branch and merge the remote changes\n" -"(e.g. 'git pull') before pushing again.\n" +"counterpart. Check out this branch and integrate the remote changes\n" +"(e.g. 'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "更新被拒ç»ï¼Œå› 为推é€çš„一个分支的最新æ交è½åŽäºŽå…¶å¯¹åº”的远程分支。\n" -"检出该分支并与远程å˜æ›´åˆå¹¶ï¼ˆå¦‚ 'git pull'),然åŽå†æŽ¨é€ã€‚详è§\n" +"检出该分支并整åˆè¿œç¨‹å˜æ›´ï¼ˆå¦‚ 'git pull ...'),然åŽå†æŽ¨é€ã€‚详è§\n" "'git push --help' ä¸çš„ 'Note about fast-forwards' å°èŠ‚。" -#: builtin/push.c:224 +#: builtin/push.c:250 msgid "" "Updates were rejected because the remote contains work that you do\n" "not have locally. This is usually caused by another repository pushing\n" -"to the same ref. You may want to first merge the remote changes (e.g.,\n" -"'git pull') before pushing again.\n" +"to the same ref. You may want to first integrate the remote changes\n" +"(e.g., 'git pull ...') before pushing again.\n" "See the 'Note about fast-forwards' in 'git push --help' for details." msgstr "" "更新被拒ç»ï¼Œå› 为远程版本库包å«æ‚¨æœ¬åœ°å°šä¸å˜åœ¨çš„æäº¤ã€‚è¿™é€šå¸¸æ˜¯å› ä¸ºå¦å¤–\n" -"一个版本库已推é€äº†ç›¸åŒçš„引用。å†æ¬¡æŽ¨é€å‰ï¼Œæ‚¨å¯èƒ½éœ€è¦å…ˆåˆå¹¶è¿œç¨‹å˜æ›´\n" -"(如 'git pull')。\n" +"一个版本库已å‘该引用进行了推é€ã€‚å†æ¬¡æŽ¨é€å‰ï¼Œæ‚¨å¯èƒ½éœ€è¦å…ˆæ•´åˆè¿œç¨‹å˜æ›´\n" +"(如 'git pull ...')。\n" "è¯¦è§ 'git push --help' ä¸çš„ 'Note about fast-forwards' å°èŠ‚。" -#: builtin/push.c:231 +#: builtin/push.c:257 msgid "Updates were rejected because the tag already exists in the remote." msgstr "更新被拒ç»å› 为 tag 在远程已ç»å˜åœ¨ã€‚" -#: builtin/push.c:234 +#: builtin/push.c:260 msgid "" "You cannot update a remote ref that points at a non-commit object,\n" "or update a remote ref to make it point at a non-commit object,\n" @@ -7387,22 +7616,22 @@ msgstr "" "如果ä¸ä½¿ç”¨ '--force' å‚数,您ä¸èƒ½æ›´æ–°ä¸€ä¸ªæŒ‡å‘éžæ交对象的远程引用,\n" "也ä¸èƒ½æ›´æ–°è¿œç¨‹å¼•ç”¨è®©å…¶æŒ‡å‘一个éžæ交对象。\n" -#: builtin/push.c:294 +#: builtin/push.c:320 #, c-format msgid "Pushing to %s\n" msgstr "推é€åˆ° %s\n" -#: builtin/push.c:298 +#: builtin/push.c:324 #, c-format msgid "failed to push some refs to '%s'" msgstr "æ— æ³•æŽ¨é€ä¸€äº›å¼•ç”¨åˆ° '%s'" -#: builtin/push.c:331 +#: builtin/push.c:357 #, c-format msgid "bad repository '%s'" msgstr "å的版本库 '%s'" -#: builtin/push.c:332 +#: builtin/push.c:358 msgid "" "No configured push destination.\n" "Either specify the URL from the command-line or configure a remote " @@ -7423,87 +7652,87 @@ msgstr "" "\n" " git push <name>\n" -#: builtin/push.c:347 +#: builtin/push.c:373 msgid "--all and --tags are incompatible" msgstr "--all å’Œ --tags ä¸å…¼å®¹" -#: builtin/push.c:348 +#: builtin/push.c:374 msgid "--all can't be combined with refspecs" msgstr "--all ä¸èƒ½å’Œå¼•ç”¨è¡¨è¾¾å¼åŒæ—¶ä½¿ç”¨" -#: builtin/push.c:353 +#: builtin/push.c:379 msgid "--mirror and --tags are incompatible" msgstr "--mirror å’Œ --tags ä¸å…¼å®¹" -#: builtin/push.c:354 +#: builtin/push.c:380 msgid "--mirror can't be combined with refspecs" msgstr "--mirror ä¸èƒ½å’Œå¼•ç”¨è¡¨è¾¾å¼åŒæ—¶ä½¿ç”¨" -#: builtin/push.c:359 +#: builtin/push.c:385 msgid "--all and --mirror are incompatible" msgstr "--all å’Œ --mirror ä¸å…¼å®¹" -#: builtin/push.c:419 +#: builtin/push.c:445 msgid "repository" msgstr "版本库" -#: builtin/push.c:420 +#: builtin/push.c:446 msgid "push all refs" msgstr "推é€æ‰€æœ‰å¼•ç”¨" -#: builtin/push.c:421 +#: builtin/push.c:447 msgid "mirror all refs" msgstr "é•œåƒæ‰€æœ‰å¼•ç”¨" -#: builtin/push.c:423 +#: builtin/push.c:449 msgid "delete refs" msgstr "åˆ é™¤å¼•ç”¨" -#: builtin/push.c:424 +#: builtin/push.c:450 msgid "push tags (can't be used with --all or --mirror)" msgstr "æŽ¨é€ tags(ä¸èƒ½ä½¿ç”¨ --all or --mirror)" -#: builtin/push.c:427 +#: builtin/push.c:453 msgid "force updates" msgstr "强制更新" -#: builtin/push.c:428 +#: builtin/push.c:454 msgid "check" msgstr "检查" -#: builtin/push.c:429 +#: builtin/push.c:455 msgid "control recursive pushing of submodules" msgstr "控制å模组的递归推é€" -#: builtin/push.c:431 +#: builtin/push.c:457 msgid "use thin pack" msgstr "使用精简打包" -#: builtin/push.c:432 builtin/push.c:433 +#: builtin/push.c:458 builtin/push.c:459 msgid "receive pack program" msgstr "接收包程åº" -#: builtin/push.c:434 +#: builtin/push.c:460 msgid "set upstream for git pull/status" msgstr "设置 git pull/status 的上游" -#: builtin/push.c:437 +#: builtin/push.c:463 msgid "prune locally removed refs" msgstr "æ¸…é™¤æœ¬åœ°åˆ é™¤çš„å¼•ç”¨" -#: builtin/push.c:439 +#: builtin/push.c:465 msgid "bypass pre-push hook" msgstr "绕过 pre-push é’©å" -#: builtin/push.c:440 +#: builtin/push.c:466 msgid "push missing but relevant tags" msgstr "推é€ç¼ºå¤±çš„有关的 tags" -#: builtin/push.c:450 +#: builtin/push.c:476 msgid "--delete is incompatible with --all, --mirror and --tags" msgstr "--delete 与 --allã€--mirror åŠ --tags ä¸å…¼å®¹" -#: builtin/push.c:452 +#: builtin/push.c:478 msgid "--delete doesn't make sense without any refs" msgstr "--delete 未接任何引用没有æ„义" @@ -7517,70 +7746,80 @@ msgstr "" "u [--exclude-per-directory=<gitignore>] | -i]] [--no-sparse-checkout] [--" "index-output=<文件>] (--empty | <æ ‘æˆ–æ交1> [<æ ‘æˆ–æ交2> [<æ ‘æˆ–æ交3>]])" -#: builtin/read-tree.c:108 +#: builtin/read-tree.c:109 msgid "write resulting index to <file>" msgstr "将索引结果写入 <file>" -#: builtin/read-tree.c:111 +#: builtin/read-tree.c:112 msgid "only empty the index" msgstr "åªæ˜¯æ¸…空索引" -#: builtin/read-tree.c:113 +#: builtin/read-tree.c:114 msgid "Merging" msgstr "åˆå¹¶" -#: builtin/read-tree.c:115 +#: builtin/read-tree.c:116 msgid "perform a merge in addition to a read" msgstr "读å–之余å†æ‰§è¡Œä¸€ä¸ªåˆå¹¶" -#: builtin/read-tree.c:117 +#: builtin/read-tree.c:118 msgid "3-way merge if no file level merging required" msgstr "如果没有文件级åˆå¹¶éœ€è¦ï¼Œæ‰§è¡Œä¸‰è·¯åˆå¹¶" -#: builtin/read-tree.c:119 +#: builtin/read-tree.c:120 msgid "3-way merge in presence of adds and removes" msgstr "å˜åœ¨æ·»åŠ å’Œåˆ é™¤æ—¶ï¼Œä¹Ÿæ‰§è¡Œä¸‰è·¯åˆå¹¶" -#: builtin/read-tree.c:121 +#: builtin/read-tree.c:122 msgid "same as -m, but discard unmerged entries" msgstr "类似于 -m,但丢弃未åˆå¹¶çš„æ¡ç›®" -#: builtin/read-tree.c:122 +#: builtin/read-tree.c:123 msgid "<subdirectory>/" msgstr "<å目录>/" -#: builtin/read-tree.c:123 +#: builtin/read-tree.c:124 msgid "read the tree into the index under <subdirectory>/" msgstr "读å–æ ‘å¯¹è±¡åˆ°ç´¢å¼•çš„ <å目录>/ 下" -#: builtin/read-tree.c:126 +#: builtin/read-tree.c:127 msgid "update working tree with merge result" msgstr "用åˆå¹¶çš„结果更新工作区" -#: builtin/read-tree.c:128 +#: builtin/read-tree.c:129 msgid "gitignore" msgstr "gitignore" -#: builtin/read-tree.c:129 +#: builtin/read-tree.c:130 msgid "allow explicitly ignored files to be overwritten" msgstr "å…许忽略文件ä¸è®¾å®šçš„文件å¯ä»¥è¢«è¦†ç›–" -#: builtin/read-tree.c:132 +#: builtin/read-tree.c:133 msgid "don't check the working tree after merging" msgstr "åˆå¹¶åŽä¸æ£€æŸ¥å·¥ä½œåŒº" -#: builtin/read-tree.c:133 +#: builtin/read-tree.c:134 msgid "don't update the index or the work tree" msgstr "ä¸æ›´æ–°ç´¢å¼•åŒºå’Œå·¥ä½œåŒº" -#: builtin/read-tree.c:135 +#: builtin/read-tree.c:136 msgid "skip applying sparse checkout filter" msgstr "跳过应用稀ç–检出过滤器" -#: builtin/read-tree.c:137 +#: builtin/read-tree.c:138 msgid "debug unpack-trees" msgstr "调试 unpack-trees" +#: builtin/reflog.c:500 +#, c-format +msgid "%s' for '%s' is not a valid timestamp" +msgstr "'%2$s' 的值 '%1$s' ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„时间戳" + +#: builtin/reflog.c:616 builtin/reflog.c:621 +#, c-format +msgid "'%s' is not a valid timestamp" +msgstr "'%s' ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„时间戳" + #: builtin/remote.c:11 msgid "git remote [-v | --verbose]" msgstr "git remote [-v | --verbose]" @@ -8151,98 +8390,98 @@ msgstr "æ— æ³•æ‰¾åˆ° HEAD 指å‘çš„æ ‘ã€‚" msgid "Failed to find tree of %s." msgstr "æ— æ³•æ‰¾åˆ° %s 指å‘çš„æ ‘ã€‚" -#: builtin/reset.c:98 +#: builtin/reset.c:99 #, c-format msgid "HEAD is now at %s" msgstr "HEAD 现在ä½äºŽ %s" # 译者:汉å—ä¹‹é—´æ— ç©ºæ ¼ï¼Œæ•…åˆ é™¤%så‰åŽç©ºæ ¼ -#: builtin/reset.c:169 +#: builtin/reset.c:172 #, c-format msgid "Cannot do a %s reset in the middle of a merge." msgstr "在åˆå¹¶è¿‡ç¨‹ä¸ä¸èƒ½åš%sé‡ç½®æ“作。" -#: builtin/reset.c:248 +#: builtin/reset.c:251 msgid "be quiet, only report errors" msgstr "安é™æ¨¡å¼ï¼ŒåªæŠ¥å‘Šé”™è¯¯" -#: builtin/reset.c:250 +#: builtin/reset.c:253 msgid "reset HEAD and index" msgstr "é‡ç½® HEAD 和索引" -#: builtin/reset.c:251 +#: builtin/reset.c:254 msgid "reset only HEAD" msgstr "åªé‡ç½® HEAD" -#: builtin/reset.c:253 builtin/reset.c:255 +#: builtin/reset.c:256 builtin/reset.c:258 msgid "reset HEAD, index and working tree" msgstr "é‡ç½® HEADã€ç´¢å¼•å’Œå·¥ä½œåŒº" -#: builtin/reset.c:257 +#: builtin/reset.c:260 msgid "reset HEAD but keep local changes" msgstr "é‡ç½® HEAD 但ä¿å˜æœ¬åœ°å˜æ›´" -#: builtin/reset.c:275 +#: builtin/reset.c:278 #, c-format msgid "Failed to resolve '%s' as a valid revision." msgstr "æ— æ³•å°† '%s' 解æžä¸ºä¸€ä¸ªæœ‰æ•ˆçš„版本。" -#: builtin/reset.c:278 builtin/reset.c:286 +#: builtin/reset.c:281 builtin/reset.c:289 #, c-format msgid "Could not parse object '%s'." msgstr "ä¸èƒ½è§£æžå¯¹è±¡ '%s'。" -#: builtin/reset.c:283 +#: builtin/reset.c:286 #, c-format msgid "Failed to resolve '%s' as a valid tree." msgstr "æ— æ³•å°† '%s' 解æžä¸ºä¸€ä¸ªæœ‰æ•ˆçš„æ ‘å¯¹è±¡ã€‚" -#: builtin/reset.c:292 +#: builtin/reset.c:295 msgid "--patch is incompatible with --{hard,mixed,soft}" msgstr "--patch 与 --{hardã€mixedã€soft} 选项ä¸å…¼å®¹" -#: builtin/reset.c:301 +#: builtin/reset.c:304 msgid "--mixed with paths is deprecated; use 'git reset -- <paths>' instead." msgstr "--mixed 带路径已弃用,而是用 'git reset -- <paths>'。" # 译者:汉å—ä¹‹é—´æ— ç©ºæ ¼ï¼Œæ•…åˆ é™¤%så‰åŽç©ºæ ¼ -#: builtin/reset.c:303 +#: builtin/reset.c:306 #, c-format msgid "Cannot do %s reset with paths." msgstr "ä¸èƒ½å¸¦è·¯å¾„进行%sé‡ç½®ã€‚" # 译者:汉å—ä¹‹é—´æ— ç©ºæ ¼ï¼Œæ•…åˆ é™¤%så‰åŽç©ºæ ¼ -#: builtin/reset.c:313 +#: builtin/reset.c:316 #, c-format msgid "%s reset is not allowed in a bare repository" msgstr "ä¸èƒ½å¯¹è£¸ç‰ˆæœ¬åº“进行%sé‡ç½®" -#: builtin/reset.c:333 +#: builtin/reset.c:336 #, c-format msgid "Could not reset index file to revision '%s'." msgstr "ä¸èƒ½é‡ç½®ç´¢å¼•æ–‡ä»¶è‡³ç‰ˆæœ¬ '%s'。" -#: builtin/reset.c:339 +#: builtin/reset.c:342 msgid "Unstaged changes after reset:" msgstr "é‡ç½®åŽæ’¤å‡ºæš‚å˜åŒºçš„å˜æ›´ï¼š" -#: builtin/reset.c:344 +#: builtin/reset.c:347 msgid "Could not write new index file." msgstr "ä¸èƒ½å†™å…¥æ–°çš„索引文件。" -#: builtin/rev-parse.c:339 +#: builtin/rev-parse.c:345 msgid "git rev-parse --parseopt [options] -- [<args>...]" msgstr "git rev-parse --parseopt [选项] -- [<å‚æ•°>...]" -#: builtin/rev-parse.c:344 +#: builtin/rev-parse.c:350 msgid "keep the `--` passed as an arg" msgstr "ä¿æŒ `--` 作为一个å‚æ•°ä¼ é€’" -#: builtin/rev-parse.c:346 +#: builtin/rev-parse.c:352 msgid "stop parsing after the first non-option argument" msgstr "é‡åˆ°ç¬¬ä¸€ä¸ªéžé€‰é¡¹å‚æ•°åŽåœæ¢è§£æž" -#: builtin/rev-parse.c:464 +#: builtin/rev-parse.c:470 msgid "" "git rev-parse --parseopt [options] -- [<args>...]\n" " or: git rev-parse --sq-quote [<arg>...]\n" @@ -8272,145 +8511,165 @@ msgstr "git cherry-pick [选项] <æ交å·>..." msgid "git cherry-pick <subcommand>" msgstr "git cherry-pick <å命令>" -#: builtin/revert.c:70 builtin/revert.c:92 +#: builtin/revert.c:71 builtin/revert.c:94 #, c-format msgid "%s: %s cannot be used with %s" msgstr "%s:%s ä¸èƒ½å’Œ %s åŒæ—¶ä½¿ç”¨" -#: builtin/revert.c:103 +#: builtin/revert.c:105 msgid "end revert or cherry-pick sequence" msgstr "终æ¢å转或拣选æ“作" -#: builtin/revert.c:104 +#: builtin/revert.c:106 msgid "resume revert or cherry-pick sequence" msgstr "继ç»å转或拣选æ“作" -#: builtin/revert.c:105 +#: builtin/revert.c:107 msgid "cancel revert or cherry-pick sequence" msgstr "å–消å转或拣选æ“作" -#: builtin/revert.c:106 +#: builtin/revert.c:108 msgid "don't automatically commit" msgstr "ä¸è¦è‡ªåŠ¨æ交" -#: builtin/revert.c:107 +#: builtin/revert.c:109 msgid "edit the commit message" msgstr "编辑æ交说明" -#: builtin/revert.c:110 +#: builtin/revert.c:112 msgid "parent number" msgstr "父编å·" -#: builtin/revert.c:112 +#: builtin/revert.c:114 msgid "merge strategy" msgstr "åˆå¹¶ç–ç•¥" -#: builtin/revert.c:113 +#: builtin/revert.c:115 msgid "option" msgstr "选项" -#: builtin/revert.c:114 +#: builtin/revert.c:116 msgid "option for merge strategy" msgstr "åˆå¹¶ç–略的选项" -#: builtin/revert.c:125 +#: builtin/revert.c:127 msgid "append commit name" msgstr "è¿½åŠ æ交å称" -#: builtin/revert.c:126 +#: builtin/revert.c:128 msgid "allow fast-forward" msgstr "å…许快进å¼" -#: builtin/revert.c:127 +#: builtin/revert.c:129 msgid "preserve initially empty commits" msgstr "ä¿ç•™åˆå§‹åŒ–的空æ交" -#: builtin/revert.c:128 +#: builtin/revert.c:130 msgid "allow commits with empty messages" msgstr "å…许æ交说明为空" -#: builtin/revert.c:129 +#: builtin/revert.c:131 msgid "keep redundant, empty commits" msgstr "ä¿æŒå¤šä½™çš„ã€ç©ºçš„æ交" -#: builtin/revert.c:133 +#: builtin/revert.c:135 msgid "program error" msgstr "程åºé”™è¯¯" -#: builtin/revert.c:223 +#: builtin/revert.c:225 msgid "revert failed" msgstr "还原失败" -#: builtin/revert.c:238 +#: builtin/revert.c:240 msgid "cherry-pick failed" msgstr "拣选失败" -#: builtin/rm.c:15 +#: builtin/rm.c:16 msgid "git rm [options] [--] <file>..." msgstr "git rm [选项] [--] <文件>..." -#: builtin/rm.c:64 builtin/rm.c:186 -#, c-format +#: builtin/rm.c:64 msgid "" -"submodule '%s' (or one of its nested submodules) uses a .git directory\n" +"the following submodule (or one of its nested submodules)\n" +"uses a .git directory:" +msgid_plural "" +"the following submodules (or one of its nested submodules)\n" +"use a .git directory:" +msgstr[0] "如下å模组(或一个其嵌套å模组)使用了一个 .git 目录:" +msgstr[1] "如下å模组(或一个其嵌套å模组)使用了一个 .git 目录:" + +#: builtin/rm.c:70 +msgid "" +"\n" "(use 'rm -rf' if you really want to remove it including all of its history)" msgstr "" -"å模组 '%s'(或者它的一个嵌套å模组)使用一个 .git 目录\n" +"\n" "(使用 'rm -rf' å‘½ä»¤å¦‚æžœæ‚¨çœŸçš„æƒ³åˆ é™¤å®ƒåŠå…¶å…¨éƒ¨åŽ†å²ï¼‰" -#: builtin/rm.c:174 -#, c-format +#: builtin/rm.c:230 +msgid "" +"the following file has staged content different from both the\n" +"file and the HEAD:" +msgid_plural "" +"the following files have staged content different from both the\n" +"file and the HEAD:" +msgstr[0] "如下文件其暂å˜çš„å†…å®¹å’Œå·¥ä½œåŒºåŠ HEAD ä¸çš„都ä¸ä¸€æ ·ï¼š" +msgstr[1] "如下文件其暂å˜çš„å†…å®¹å’Œå·¥ä½œåŒºåŠ HEAD ä¸çš„都ä¸ä¸€æ ·ï¼š" + +#: builtin/rm.c:235 msgid "" -"'%s' has staged content different from both the file and the HEAD\n" +"\n" "(use -f to force removal)" msgstr "" -"'%s' æš‚å˜çš„å†…å®¹å’Œå·¥ä½œåŒºåŠ HEAD ä¸çš„都ä¸ä¸€æ ·\n" +"\n" "(使用 -f å¼ºåˆ¶åˆ é™¤ï¼‰" -#: builtin/rm.c:180 -#, c-format -msgid "" -"'%s' has changes staged in the index\n" -"(use --cached to keep the file, or -f to force removal)" -msgstr "" -"'%s' 有å˜æ›´å·²æš‚å˜è‡³ç´¢å¼•ä¸\n" -"(使用 --cached ä¿å˜æ–‡ä»¶ï¼Œæˆ–用 -f å¼ºåˆ¶åˆ é™¤ï¼‰" +#: builtin/rm.c:239 +msgid "the following file has changes staged in the index:" +msgid_plural "the following files have changes staged in the index:" +msgstr[0] "如下文件相对索引区的内容有修改" +msgstr[1] "如下文件相对索引区的内容有修改" -#: builtin/rm.c:191 -#, c-format +#: builtin/rm.c:243 builtin/rm.c:254 msgid "" -"'%s' has local modifications\n" +"\n" "(use --cached to keep the file, or -f to force removal)" msgstr "" -"'%s' 有本地修改\n" -"(使用 --cached ä¿å˜æ–‡ä»¶ï¼Œæˆ–用 -f å¼ºåˆ¶åˆ é™¤ï¼‰" +"\n" +"(使用 --cached ä¿ç•™æœ¬åœ°æ–‡ä»¶ï¼Œæˆ–用 -f å¼ºåˆ¶åˆ é™¤ï¼‰" -#: builtin/rm.c:207 +#: builtin/rm.c:251 +msgid "the following file has local modifications:" +msgid_plural "the following files have local modifications:" +msgstr[0] "如下文件有本地修改:" +msgstr[1] "如下文件有本地修改:" + +#: builtin/rm.c:269 msgid "do not list removed files" msgstr "ä¸åˆ—å‡ºåˆ é™¤çš„æ–‡ä»¶" -#: builtin/rm.c:208 +#: builtin/rm.c:270 msgid "only remove from the index" msgstr "åªä»Žç´¢å¼•åŒºåˆ 除" -#: builtin/rm.c:209 +#: builtin/rm.c:271 msgid "override the up-to-date check" msgstr "忽略文件更新状æ€æ£€æŸ¥" -#: builtin/rm.c:210 +#: builtin/rm.c:272 msgid "allow recursive removal" msgstr "å…è®¸é€’å½’åˆ é™¤" -#: builtin/rm.c:212 +#: builtin/rm.c:274 msgid "exit with a zero status even if nothing matched" msgstr "å³ä½¿æ²¡æœ‰åŒ¹é…,也以零状æ€é€€å‡º" -#: builtin/rm.c:283 +#: builtin/rm.c:345 #, c-format msgid "not removing '%s' recursively without -r" msgstr "未æä¾› -r 选项ä¸ä¼šé€’å½’åˆ é™¤ '%s'" -#: builtin/rm.c:322 +#: builtin/rm.c:384 #, c-format msgid "git rm: unable to remove %s" msgstr "git rm:ä¸èƒ½åˆ 除 %s" @@ -8424,23 +8683,23 @@ msgstr "git shortlog [<选项>] [<版本范围>] [[--] [<路径>...]]" msgid "Missing author: %s" msgstr "缺少作者:%s" -#: builtin/shortlog.c:227 +#: builtin/shortlog.c:228 msgid "sort output according to the number of commits per author" msgstr "æ ¹æ®æ¯ä¸ªä½œè€…çš„æ交数é‡æŽ’åº" -#: builtin/shortlog.c:229 +#: builtin/shortlog.c:230 msgid "Suppress commit descriptions, only provides commit count" msgstr "éšè—æ交说明,åªæä¾›æ交数é‡" -#: builtin/shortlog.c:231 +#: builtin/shortlog.c:232 msgid "Show the email address of each author" msgstr "显示æ¯ä¸ªä½œè€…的电å邮件地å€" -#: builtin/shortlog.c:232 +#: builtin/shortlog.c:233 msgid "w[,i1[,i2]]" msgstr "w[,i1[,i2]]" -#: builtin/shortlog.c:233 +#: builtin/shortlog.c:234 msgid "Linewrap output" msgstr "折行输出" @@ -8504,23 +8763,23 @@ msgstr "显示没有任何引用的的引用" msgid "show commits in topological order" msgstr "以拓扑顺åºæ˜¾ç¤ºæ交" -#: builtin/show-branch.c:671 +#: builtin/show-branch.c:672 msgid "show only commits not on the first branch" msgstr "åªæ˜¾ç¤ºä¸åœ¨ç¬¬ä¸€ä¸ªåˆ†æ”¯ä¸Šçš„æ交" -#: builtin/show-branch.c:673 +#: builtin/show-branch.c:674 msgid "show merges reachable from only one tip" msgstr "显示仅一个分支å¯è®¿é—®çš„åˆå¹¶æ交" -#: builtin/show-branch.c:675 -msgid "show commits where no parent comes before its children" -msgstr "显示æ交时以时间为åºä¸”父æ交ä¸èƒ½é¢†å…ˆåæ交" +#: builtin/show-branch.c:676 +msgid "topologically sort, maintaining date order where possible" +msgstr "拓扑方å¼æŽ’åºï¼Œå¹¶å°½å¯èƒ½åœ°ä¿æŒæ—¥æœŸé¡ºåº" -#: builtin/show-branch.c:677 +#: builtin/show-branch.c:679 msgid "<n>[,<base>]" msgstr "<n>[,<base>]" -#: builtin/show-branch.c:678 +#: builtin/show-branch.c:680 msgid "show <n> most recent ref-log entries starting at base" msgstr "显示从 base 开始的 <n> æ¡æœ€è¿‘的引用日志记录" @@ -8536,35 +8795,35 @@ msgstr "" msgid "git show-ref --exclude-existing[=pattern] < ref-list" msgstr "git show-ref --exclude-existing[=模å¼] < 引用列表" -#: builtin/show-ref.c:165 +#: builtin/show-ref.c:168 msgid "only show tags (can be combined with heads)" msgstr "åªæ˜¾ç¤º tags(å¯ä»¥å’Œå¤´å…±ç”¨ï¼‰" -#: builtin/show-ref.c:166 +#: builtin/show-ref.c:169 msgid "only show heads (can be combined with tags)" msgstr "åªæ˜¾ç¤ºå¤´ï¼ˆå¯ä»¥å’Œ tags 共用)" -#: builtin/show-ref.c:167 +#: builtin/show-ref.c:170 msgid "stricter reference checking, requires exact ref path" msgstr "æ›´ä¸¥æ ¼çš„å¼•ç”¨æ£€æµ‹ï¼Œéœ€è¦ç²¾ç¡®çš„引用路径" -#: builtin/show-ref.c:170 builtin/show-ref.c:172 -msgid "show the HEAD reference" -msgstr "显示 HEAD 引用" +#: builtin/show-ref.c:173 builtin/show-ref.c:176 +msgid "show the HEAD reference, even if it would be filtered out" +msgstr "显示 HEAD 引用,å³ä½¿è¢«è¿‡æ»¤æŽ‰" -#: builtin/show-ref.c:174 +#: builtin/show-ref.c:178 msgid "dereference tags into object IDs" msgstr "è½¬æ¢ tags 到对象ID" -#: builtin/show-ref.c:176 +#: builtin/show-ref.c:180 msgid "only show SHA1 hash using <n> digits" msgstr "åªæ˜¾ç¤ºä½¿ç”¨ <n> 个数å—çš„ SHA1 哈希" -#: builtin/show-ref.c:180 +#: builtin/show-ref.c:184 msgid "do not print results to stdout (useful with --verify)" msgstr "ä¸æ‰“å°ç»“æžœåˆ°æ ‡å‡†è¾“å‡ºï¼ˆä¾‹å¦‚ä¸Ž --verify å‚数共用)" -#: builtin/show-ref.c:182 +#: builtin/show-ref.c:186 msgid "show refs from stdin that aren't in local repository" msgstr "æ˜¾ç¤ºä»Žæ ‡å‡†è¾“å…¥ä¸è¯»å…¥çš„ä¸åœ¨æœ¬åœ°ç‰ˆæœ¬åº“ä¸çš„引用" @@ -8976,7 +9235,7 @@ msgstr "å°† <å‰ç¼€> åç›®å½•å†…å®¹å†™åˆ°ä¸€ä¸ªæ ‘å¯¹è±¡" msgid "only useful for debugging" msgstr "åªå¯¹è°ƒè¯•æœ‰ç”¨" -#: git.c:16 +#: git.c:17 msgid "" "'git help -a' and 'git help -g' lists available subcommands and some\n" "concept guides. See 'git help <command>' or 'git help <concept>'\n" @@ -8985,19 +9244,23 @@ msgstr "" "命令 'git help -a' å’Œ 'git help -g' 显示å¯ç”¨çš„å命令和一些指å—。å‚è§\n" "'git help <命令>' 或 'git help <指å—>' æ¥æŸ¥çœ‹ç»™å®šçš„å命令帮助或指å—。" -#: parse-options.h:156 +#: parse-options.h:144 +msgid "expiry date" +msgstr "逾期日期" + +#: parse-options.h:159 msgid "no-op (backward compatibility)" msgstr "空æ“作(å‘åŽå…¼å®¹ï¼‰" -#: parse-options.h:232 +#: parse-options.h:236 msgid "be more verbose" msgstr "æ›´åŠ è¯¦ç»†" -#: parse-options.h:234 +#: parse-options.h:238 msgid "be more quiet" msgstr "æ›´åŠ å®‰é™" -#: parse-options.h:240 +#: parse-options.h:244 msgid "use <n> digits to display SHA-1s" msgstr "用 <n> ä½æ•°å—显示 SHA-1 哈希值" @@ -9054,8 +9317,8 @@ msgid "Move or rename a file, a directory, or a symlink" msgstr "移动或é‡å‘½å一个文件ã€ç›®å½•æˆ–符å·é“¾æŽ¥" #: common-cmds.h:21 -msgid "Fetch from and merge with another repository or a local branch" -msgstr "获å–并åˆå¹¶å¦å¤–的版本库或一个本地分支" +msgid "Fetch from and integrate with another repository or a local branch" +msgstr "获å–并整åˆå¦å¤–的版本库或一个本地分支" #: common-cmds.h:22 msgid "Update remote refs along with associated objects" @@ -9098,11 +9361,11 @@ msgstr "您好åƒåœ¨ä¸Šä¸€æ¬¡ 'am' 失败åŽç§»åŠ¨äº† HEAD。未回退至 ORIG_H #: git-am.sh:105 #, sh-format msgid "" -"When you have resolved this problem, run \"$cmdline --resolved\".\n" +"When you have resolved this problem, run \"$cmdline --continue\".\n" "If you prefer to skip this patch, run \"$cmdline --skip\" instead.\n" "To restore the original branch and stop patching, run \"$cmdline --abort\"." msgstr "" -"当您解决了æ¤é—®é¢˜åŽï¼Œæ‰§è¡Œ \"$cmdline --resolved\"。\n" +"当您解决了æ¤é—®é¢˜åŽï¼Œæ‰§è¡Œ \"$cmdline --continue\"。\n" "如果您想跳过æ¤è¡¥ä¸ï¼Œåˆ™æ‰§è¡Œ \"$cmdline --skip\"。\n" "è¦æ¢å¤åŽŸåˆ†æ”¯å¹¶åœæ¢æ‰“è¡¥ä¸ï¼Œæ‰§è¡Œ \"$cmdline --abort\"。" @@ -9155,25 +9418,34 @@ msgstr "" "å‚æ•° -b/--binary å·²ç»å¾ˆé•¿æ—¶é—´ä¸åšä»»ä½•å®žè´¨æ“ä½œäº†ï¼Œå¹¶ä¸”å°†è¢«åˆ é™¤ã€‚\n" "请ä¸è¦å†ä½¿ç”¨å®ƒäº†ã€‚" -#: git-am.sh:477 +#: git-am.sh:479 #, sh-format msgid "previous rebase directory $dotest still exists but mbox given." -msgstr "之å‰çš„å˜åŸºç›®å½• $dotest ä»ç„¶å˜åœ¨ä½†ç»™å‡ºäº†mbox。" +msgstr "之å‰çš„å˜åŸºç›®å½• $dotest ä»ç„¶å˜åœ¨ï¼Œä½†å´æ供了 mbox。" -#: git-am.sh:482 +#: git-am.sh:484 msgid "Please make up your mind. --skip or --abort?" msgstr "请下决心。--skip 或是 --abort ?" -#: git-am.sh:509 +#: git-am.sh:520 +#, sh-format +msgid "" +"Stray $dotest directory found.\n" +"Use \"git am --abort\" to remove it." +msgstr "" +"å‘现了错误的 $dotest 目录。\n" +"使用 \"git am --abort\" åˆ é™¤å®ƒã€‚" + +#: git-am.sh:528 msgid "Resolve operation not in progress, we are not resuming." msgstr "解决æ“作未进行,我们ä¸ä¼šç»§ç»ã€‚" -#: git-am.sh:575 +#: git-am.sh:594 #, sh-format msgid "Dirty index: cannot apply patches (dirty: $files)" msgstr "è„的索引:ä¸èƒ½åº”用补ä¸ï¼ˆè„文件:$files)" -#: git-am.sh:679 +#: git-am.sh:698 #, sh-format msgid "" "Patch is empty. Was it split wrong?\n" @@ -9184,15 +9456,15 @@ msgstr "" "如果您想è¦è·³è¿‡è¿™ä¸ªè¡¥ä¸ï¼Œæ‰§è¡Œ \"$cmdline --skip\"。\n" "è¦æ¢å¤åŽŸåˆ†æ”¯å¹¶åœæ¢æ‰“è¡¥ä¸ï¼Œæ‰§è¡Œ \"$cmdline --abort\"。" -#: git-am.sh:706 +#: git-am.sh:725 msgid "Patch does not have a valid e-mail address." msgstr "è¡¥ä¸ä¸æ²¡æœ‰ä¸€ä¸ªæœ‰æ•ˆçš„邮件地å€ã€‚" -#: git-am.sh:753 +#: git-am.sh:772 msgid "cannot be interactive without stdin connected to a terminal." msgstr "æ ‡å‡†è¾“å…¥æ²¡æœ‰å’Œç»ˆç«¯å…³è”,ä¸èƒ½è¿›è¡Œäº¤äº’å¼æ“作。" -#: git-am.sh:757 +#: git-am.sh:776 msgid "Commit Body is:" msgstr "æ交内容为:" @@ -9200,16 +9472,16 @@ msgstr "æ交内容为:" #. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a] #. in your translation. The program will only accept English #. input at this point. -#: git-am.sh:764 +#: git-am.sh:783 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " msgstr "应用?[y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all " -#: git-am.sh:800 +#: git-am.sh:819 #, sh-format msgid "Applying: $FIRSTLINE" msgstr "æ£åº”用:$FIRSTLINE" -#: git-am.sh:821 +#: git-am.sh:840 msgid "" "No changes - did you forget to use 'git add'?\n" "If there is nothing left to stage, chances are that something else\n" @@ -9219,22 +9491,22 @@ msgstr "" "如果没有什么è¦æ·»åŠ 到暂å˜åŒºçš„,则很å¯èƒ½æ˜¯å…¶å®ƒæ交已ç»å¼•å…¥äº†ç›¸åŒçš„å˜æ›´ã€‚\n" "您也许想è¦è·³è¿‡è¿™ä¸ªè¡¥ä¸ã€‚" -#: git-am.sh:829 +#: git-am.sh:848 msgid "" "You still have unmerged paths in your index\n" "did you forget to use 'git add'?" msgstr "您的索引ä¸ä»æœ‰æœªåˆå¹¶çš„路径。您是å¦å¿˜äº†æ‰§è¡Œ 'git add'?" -#: git-am.sh:845 +#: git-am.sh:864 msgid "No changes -- Patch already applied." msgstr "没有å˜æ›´ —— è¡¥ä¸å·²ç»åº”用过。" -#: git-am.sh:855 +#: git-am.sh:874 #, sh-format msgid "Patch failed at $msgnum $FIRSTLINE" msgstr "è¡¥ä¸å¤±è´¥äºŽ $msgnum $FIRSTLINE" -#: git-am.sh:858 +#: git-am.sh:877 #, sh-format msgid "" "The copy of the patch that failed is found in:\n" @@ -9243,7 +9515,7 @@ msgstr "" "失败的补ä¸æ–‡ä»¶å‰¯æœ¬ä½äºŽï¼š\n" " $dotest/patch" -#: git-am.sh:876 +#: git-am.sh:895 msgid "applying to an empty history" msgstr "æ£åº”用到一个空历å²ä¸Š" @@ -9444,7 +9716,7 @@ msgstr "æ— æ³•å°†å¤šä¸ªåˆ†æ”¯åˆå¹¶åˆ°ç©ºåˆ†æ”¯" msgid "Cannot rebase onto multiple branches" msgstr "æ— æ³•å˜åŸºåˆ°å¤šä¸ªåˆ†æ”¯" -#: git-rebase.sh:53 +#: git-rebase.sh:54 msgid "" "When you have resolved this problem, run \"git rebase --continue\".\n" "If you prefer to skip this patch, run \"git rebase --skip\" instead.\n" @@ -9455,31 +9727,50 @@ msgstr "" "如果您想跳过æ¤è¡¥ä¸ï¼Œåˆ™æ‰§è¡Œ \"git rebase --skip\"。\n" "è¦æ¢å¤åŽŸåˆ†æ”¯å¹¶åœæ¢å˜åŸºï¼Œæ‰§è¡Œ \"git rebase --abort\"。" +#: git-rebase.sh:156 +msgid "Applied autostash." +msgstr "æˆåŠŸåº”用 autostash。" + +#: git-rebase.sh:159 +#, sh-format +msgid "Cannot store $stash_sha1" +msgstr "æ— æ³•ä¿å˜ $stash_sha1" + #: git-rebase.sh:160 +msgid "" +"Applying autostash resulted in conflicts.\n" +"Your changes are safe in the stash.\n" +"You can run \"git stash pop\" or \"git stash drop\" at any time.\n" +msgstr "" +"应用 autostash 导致冲çªã€‚\n" +"您的修改安全地ä¿å˜åœ¨ stash ä¸ã€‚\n" +"您å¯ä»¥åœ¨ä»»ä½•æ—¶å€™è¿è¡Œ \"git stash pop\" 或 \"git stash drop\"。\n" + +#: git-rebase.sh:190 msgid "The pre-rebase hook refused to rebase." msgstr "é’©å pre-rebase æ‹’ç»å˜åŸºã€‚" -#: git-rebase.sh:165 +#: git-rebase.sh:195 msgid "It looks like git-am is in progress. Cannot rebase." msgstr "似乎æ£å¤„于在 git-am 的执行过程ä¸ã€‚æ— æ³•å˜åŸºã€‚" -#: git-rebase.sh:296 +#: git-rebase.sh:329 msgid "The --exec option must be used with the --interactive option" msgstr "选项 --exec 必须和选项 --interactive åŒæ—¶ä½¿ç”¨" -#: git-rebase.sh:301 +#: git-rebase.sh:334 msgid "No rebase in progress?" msgstr "没有æ£åœ¨è¿›è¡Œçš„å˜åŸºï¼Ÿ" -#: git-rebase.sh:312 +#: git-rebase.sh:345 msgid "The --edit-todo action can only be used during interactive rebase." msgstr "动作 --edit-todo åªèƒ½ç”¨åœ¨äº¤äº’å¼å˜åŸºè¿‡ç¨‹ä¸ã€‚" -#: git-rebase.sh:319 +#: git-rebase.sh:352 msgid "Cannot read HEAD" msgstr "ä¸èƒ½è¯»å– HEAD" -#: git-rebase.sh:322 +#: git-rebase.sh:355 msgid "" "You must edit all merge conflicts and then\n" "mark them as resolved using git add" @@ -9487,12 +9778,12 @@ msgstr "" "您必须编辑所有的åˆå¹¶å†²çªï¼Œç„¶åŽé€šè¿‡ git add\n" "å‘½ä»¤å°†å®ƒä»¬æ ‡è®°ä¸ºå·²è§£å†³" -#: git-rebase.sh:340 +#: git-rebase.sh:373 #, sh-format msgid "Could not move back to $head_name" msgstr "æ— æ³•ç§»å›ž $head_name" -#: git-rebase.sh:359 +#: git-rebase.sh:392 #, sh-format msgid "" "It seems that there is already a $state_dir_base directory, and\n" @@ -9511,56 +9802,65 @@ msgstr "" "\t$cmd_clear_stale_rebase\n" "然åŽå†é‡æ–°æ‰§è¡Œå˜åŸºã€‚为é¿å…您丢失é‡è¦æ•°æ®ï¼Œæˆ‘å·²ç»åœæ¢å½“å‰æ“作。" -#: git-rebase.sh:404 +#: git-rebase.sh:437 #, sh-format msgid "invalid upstream $upstream_name" msgstr "æ— æ•ˆçš„ä¸Šæ¸¸ $upstream_name" -#: git-rebase.sh:428 +#: git-rebase.sh:461 #, sh-format msgid "$onto_name: there are more than one merge bases" msgstr "$onto_name: 有一个以上的åˆå¹¶åŸºå‡†" -#: git-rebase.sh:431 git-rebase.sh:435 +#: git-rebase.sh:464 git-rebase.sh:468 #, sh-format msgid "$onto_name: there is no merge base" msgstr "$onto_name: 没有åˆå¹¶åŸºå‡†" -#: git-rebase.sh:440 +#: git-rebase.sh:473 #, sh-format msgid "Does not point to a valid commit: $onto_name" msgstr "没有指å‘一个有效的æ交:$onto_name" -#: git-rebase.sh:463 +#: git-rebase.sh:496 #, sh-format msgid "fatal: no such branch: $branch_name" msgstr "严é‡é”™è¯¯ï¼šæ— æ¤åˆ†æ”¯ï¼š$branch_name" -#: git-rebase.sh:483 +#: git-rebase.sh:519 +msgid "Cannot autostash" +msgstr "æ— æ³• autostash" + +#: git-rebase.sh:524 +#, sh-format +msgid "Created autostash: $stash_abbrev" +msgstr "创建了 autostash: $stash_abbrev" + +#: git-rebase.sh:528 msgid "Please commit or stash them." msgstr "请æ交或为它们ä¿å˜è¿›åº¦ã€‚" -#: git-rebase.sh:501 +#: git-rebase.sh:548 #, sh-format msgid "Current branch $branch_name is up to date." msgstr "当å‰åˆ†æ”¯ $branch_name 是最新的。" -#: git-rebase.sh:504 +#: git-rebase.sh:552 #, sh-format msgid "Current branch $branch_name is up to date, rebase forced." msgstr "当å‰åˆ†æ”¯ $branch_name 是最新的,强制å˜åŸºã€‚" -#: git-rebase.sh:515 +#: git-rebase.sh:563 #, sh-format msgid "Changes from $mb to $onto:" msgstr "å˜æ›´ä»Ž $mb 到 $onto:" #. Detach HEAD and reset the tree -#: git-rebase.sh:524 +#: git-rebase.sh:572 msgid "First, rewinding head to replay your work on top of it..." msgstr "首先,é‡ç½®å¤´æŒ‡é’ˆä»¥ä¾¿åœ¨ä¸Šé¢é‡æ”¾æ‚¨çš„工作..." -#: git-rebase.sh:532 +#: git-rebase.sh:582 #, sh-format msgid "Fast-forwarded $branch_name to $onto_name." msgstr "å¿«è¿› $branch_name 至 $onto_name。" @@ -9593,6 +9893,11 @@ msgstr "æ— æ³•åˆ é™¤ä¸´æ—¶ç´¢å¼•ï¼ˆä¸åº”å‘生)" msgid "Cannot record working tree state" msgstr "ä¸èƒ½è®°å½•å·¥ä½œåŒºçŠ¶æ€" +#: git-stash.sh:190 +#, sh-format +msgid "Cannot update $ref_stash with $w_commit" +msgstr "æ— æ³•ç”¨ $w_commit æ›´æ–° $ref_stash" + #. TRANSLATORS: $option is an invalid option, like #. `--blah-blah'. The 7 spaces at the beginning of the #. second line correspond to "error: ". So you should line @@ -9603,7 +9908,7 @@ msgstr "ä¸èƒ½è®°å½•å·¥ä½œåŒºçŠ¶æ€" #. $ git stash save --blah-blah 2>&1 | head -n 2 #. error: unknown option for 'stash save': --blah-blah #. To provide a message, use git stash save -- '--blah-blah' -#: git-stash.sh:202 +#: git-stash.sh:241 #, sh-format msgid "" "error: unknown option for 'stash save': $option\n" @@ -9612,119 +9917,134 @@ msgstr "" "错误:'stash save' 的未知选项:$option\n" " è¦æ供一个æè¿°ä¿¡æ¯ï¼Œä½¿ç”¨ git stash save -- '$option'" -#: git-stash.sh:223 +#: git-stash.sh:262 msgid "No local changes to save" msgstr "没有è¦ä¿å˜çš„本地修改" -#: git-stash.sh:227 +#: git-stash.sh:268 +msgid "" +"The following untracked files would NOT be saved but need to be removed by " +"stash save:" +msgstr "如下未跟踪文件将ä¸ä¼šè¢«ä¿å˜ä½†æ˜¯å°†ä¼šå› 为进度ä¿å˜è€Œéœ€è¦è¢«åˆ 除:" + +#: git-stash.sh:270 +msgid "" +"Aborting. Consider using either the --force or --include-untracked option." +msgstr "终æ¢ã€‚考虑使用 --force 或者 --include-untracked 选项。" + +#: git-stash.sh:274 msgid "Cannot initialize stash" msgstr "æ— æ³•åˆå§‹åŒ– stash" -#: git-stash.sh:235 +#: git-stash.sh:278 msgid "Cannot save the current status" msgstr "æ— æ³•ä¿å˜å½“å‰çŠ¶æ€" -#: git-stash.sh:253 +#: git-stash.sh:296 msgid "Cannot remove worktree changes" msgstr "æ— æ³•åˆ é™¤å·¥ä½œåŒºå˜æ›´" -#: git-stash.sh:352 +#: git-stash.sh:395 msgid "No stash found." msgstr "未å‘现 stash。" -#: git-stash.sh:359 +#: git-stash.sh:402 #, sh-format msgid "Too many revisions specified: $REV" msgstr "指定了太多的版本:$REV" -#: git-stash.sh:365 +#: git-stash.sh:408 #, sh-format msgid "$reference is not valid reference" msgstr "$reference ä¸æ˜¯æœ‰æ•ˆçš„引用" -#: git-stash.sh:393 +#: git-stash.sh:436 #, sh-format msgid "'$args' is not a stash-like commit" msgstr "'$args' ä¸æ˜¯ stash æ ·æ交" -#: git-stash.sh:404 +#: git-stash.sh:447 #, sh-format msgid "'$args' is not a stash reference" msgstr "'$args' ä¸æ˜¯ä¸€ä¸ª stash 引用" -#: git-stash.sh:412 +#: git-stash.sh:455 msgid "unable to refresh index" msgstr "æ— æ³•åˆ·æ–°ç´¢å¼•" -#: git-stash.sh:416 +#: git-stash.sh:459 msgid "Cannot apply a stash in the middle of a merge" msgstr "æ— æ³•åœ¨åˆå¹¶è¿‡ç¨‹ä¸æ¢å¤è¿›åº¦" -#: git-stash.sh:424 +#: git-stash.sh:467 msgid "Conflicts in index. Try without --index." msgstr "索引ä¸æœ‰å†²çªã€‚å°è¯•ä¸ä½¿ç”¨ --index。" -#: git-stash.sh:426 +#: git-stash.sh:469 msgid "Could not save index tree" msgstr "ä¸èƒ½ä¿å˜ç´¢å¼•æ ‘" -#: git-stash.sh:460 +#: git-stash.sh:503 msgid "Cannot unstage modified files" msgstr "æ— æ³•è¿˜åŽŸä¿®æ”¹çš„æ–‡ä»¶" -#: git-stash.sh:475 +#: git-stash.sh:518 msgid "Index was not unstashed." msgstr "索引的进度没有被æ¢å¤ã€‚" -#: git-stash.sh:492 +#: git-stash.sh:535 #, sh-format msgid "Dropped ${REV} ($s)" msgstr "丢弃了 ${REV} ($s)" -#: git-stash.sh:493 +#: git-stash.sh:536 #, sh-format msgid "${REV}: Could not drop stash entry" msgstr "${REV}:ä¸èƒ½ä¸¢å¼ƒè¿›åº¦æ¡ç›®" -#: git-stash.sh:500 +#: git-stash.sh:543 msgid "No branch name specified" msgstr "未指定分支å" -#: git-stash.sh:571 +#: git-stash.sh:615 msgid "(To restore them type \"git stash apply\")" msgstr "(为æ¢å¤æ•°æ®è¾“å…¥ \"git stash apply\")" -#: git-submodule.sh:91 +#: git-submodule.sh:95 #, sh-format msgid "cannot strip one component off url '$remoteurl'" msgstr "æ— æ³•ä»Ž url '$remoteurl' 剥离一个组件" -#: git-submodule.sh:196 +#: git-submodule.sh:237 #, sh-format msgid "No submodule mapping found in .gitmodules for path '$sm_path'" msgstr "未在 .gitmodules ä¸å‘现路径 '$sm_path' çš„åæ¨¡ç»„æ˜ å°„" -#: git-submodule.sh:239 +#: git-submodule.sh:281 #, sh-format msgid "Clone of '$url' into submodule path '$sm_path' failed" msgstr "æ— æ³•å…‹éš† '$url' 到å模组路径 '$sm_path'" -#: git-submodule.sh:251 +#: git-submodule.sh:293 #, sh-format msgid "Gitdir '$a' is part of the submodule path '$b' or vice versa" msgstr "Gitdir '$a' 在å模组路径 '$b' 之下或相å" -#: git-submodule.sh:349 +#: git-submodule.sh:403 +msgid "Relative path can only be used from the toplevel of the working tree" +msgstr "åªèƒ½åœ¨å·¥ä½œåŒºçš„顶级目录ä¸ä½¿ç”¨ç›¸å¯¹è·¯å¾„" + +#: git-submodule.sh:413 #, sh-format msgid "repo URL: '$repo' must be absolute or begin with ./|../" msgstr "版本库URL:'$repo' 必须是ç»å¯¹è·¯å¾„或以 ./|../ 起始" -#: git-submodule.sh:366 +#: git-submodule.sh:430 #, sh-format msgid "'$sm_path' already exists in the index" msgstr "'$sm_path' å·²ç»å˜åœ¨äºŽç´¢å¼•ä¸" -#: git-submodule.sh:370 +#: git-submodule.sh:434 #, sh-format msgid "" "The following path is ignored by one of your .gitignore files:\n" @@ -9735,241 +10055,345 @@ msgstr "" "$sm_path\n" "å¦‚æžœæ‚¨ç¡®å®žæƒ³æ·»åŠ å®ƒï¼Œä½¿ç”¨ -f å‚数。" -#: git-submodule.sh:388 +#: git-submodule.sh:452 #, sh-format msgid "Adding existing repo at '$sm_path' to the index" msgstr "æ·»åŠ ä½äºŽ '$sm_path' 的现å˜ç‰ˆæœ¬åº“到索引" -#: git-submodule.sh:390 +#: git-submodule.sh:454 #, sh-format msgid "'$sm_path' already exists and is not a valid git repo" msgstr "'$sm_path' å·²å˜åœ¨ä¸”ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„ git 版本库" -#: git-submodule.sh:398 +#: git-submodule.sh:462 #, sh-format msgid "A git directory for '$sm_name' is found locally with remote(s):" msgstr "本地å‘现 '$sm_name' 的一个 git 目录,与其对应的远程版本库:" -#: git-submodule.sh:400 +#: git-submodule.sh:464 #, sh-format msgid "" "If you want to reuse this local git directory instead of cloning again from" msgstr "如果您想é‡ç”¨æ¤æœ¬åœ° git 目录而ä¸æ˜¯é‡æ–°å…‹éš†è‡ª" -#: git-submodule.sh:402 +#: git-submodule.sh:466 #, sh-format msgid "" "use the '--force' option. If the local git directory is not the correct repo" msgstr "使用 '--force' å‚数。如果本地 git 目录ä¸æ˜¯æ£ç¡®çš„版本库" -#: git-submodule.sh:403 +#: git-submodule.sh:467 #, sh-format msgid "" "or you are unsure what this means choose another name with the '--name' " "option." msgstr "或者您ä¸ç¡®å®šå…¶ä¸å«ä¹‰ä½¿ç”¨ '--name' å‚数选择å¦å¤–一个å称。" -#: git-submodule.sh:405 +#: git-submodule.sh:469 #, sh-format msgid "Reactivating local git directory for submodule '$sm_name'." msgstr "激活本地 git 目录到å模组 '$sm_name'。" -#: git-submodule.sh:417 +#: git-submodule.sh:481 #, sh-format msgid "Unable to checkout submodule '$sm_path'" msgstr "ä¸èƒ½æ£€å‡ºå模组 '$sm_path'" -#: git-submodule.sh:422 +#: git-submodule.sh:486 #, sh-format msgid "Failed to add submodule '$sm_path'" msgstr "æ— æ³•æ·»åŠ å模组 '$sm_path'" -#: git-submodule.sh:431 +#: git-submodule.sh:495 #, sh-format msgid "Failed to register submodule '$sm_path'" msgstr "æ— æ³•æ³¨å†Œå模组 '$sm_path'" -#: git-submodule.sh:474 +#: git-submodule.sh:539 #, sh-format -msgid "Entering '$prefix$sm_path'" -msgstr "æ£åœ¨è¿›å…¥ '$prefix$sm_path'" +msgid "Entering '$prefix$displaypath'" +msgstr "æ£åœ¨è¿›å…¥ '$prefix$displaypath'" -#: git-submodule.sh:488 +#: git-submodule.sh:554 #, sh-format -msgid "Stopping at '$sm_path'; script returned non-zero status." -msgstr "åœæ¢äºŽ '$sm_path',脚本返回éžé›¶å€¼ã€‚" +msgid "Stopping at '$prefix$displaypath'; script returned non-zero status." +msgstr "åœæ¢äºŽ '$prefix$displaypath',脚本返回éžé›¶å€¼ã€‚" -#: git-submodule.sh:532 +#: git-submodule.sh:600 #, sh-format -msgid "No url found for submodule path '$sm_path' in .gitmodules" -msgstr "在 .gitmodules ä¸æœªæ‰¾åˆ°å模组路径 '$sm_path' çš„ url" +msgid "No url found for submodule path '$displaypath' in .gitmodules" +msgstr "在 .gitmodules ä¸æœªæ‰¾åˆ°å模组路径 '$displaypath' çš„ url" -#: git-submodule.sh:541 +#: git-submodule.sh:609 #, sh-format -msgid "Failed to register url for submodule path '$sm_path'" -msgstr "æ— æ³•ä¸ºå模组路径 '$sm_path' 注册 url" +msgid "Failed to register url for submodule path '$displaypath'" +msgstr "æ— æ³•ä¸ºå模组路径 '$displaypath' 注册 url" -#: git-submodule.sh:543 +#: git-submodule.sh:611 #, sh-format -msgid "Submodule '$name' ($url) registered for path '$sm_path'" -msgstr "å模组 '$name' ($url) 已为路径 '$sm_path' 注册" +msgid "Submodule '$name' ($url) registered for path '$displaypath'" +msgstr "å模组 '$name' ($url) 未对路径 '$displaypath' 注册" -#: git-submodule.sh:551 +#: git-submodule.sh:619 #, sh-format -msgid "Failed to register update mode for submodule path '$sm_path'" -msgstr "æ— æ³•ä¸ºå模组路径 '$sm_path' 注册更新模å¼" +msgid "Failed to register update mode for submodule path '$displaypath'" +msgstr "æ— æ³•ä¸ºå模组路径 '$displaypath' 注册更新模å¼" -#: git-submodule.sh:588 +#: git-submodule.sh:656 #, sh-format msgid "Use '.' if you really want to deinitialize all submodules" msgstr "使用 '.' 如果您真的想è¦å¯¹æ‰€æœ‰å模组å–消åˆå§‹åŒ–" -#: git-submodule.sh:603 +#: git-submodule.sh:673 #, sh-format -msgid "Submodule work tree '$sm_path' contains a .git directory" -msgstr "å模组工作区 '$sm_path' 包å«ä¸€ä¸ª .git 目录" +msgid "Submodule work tree '$displaypath' contains a .git directory" +msgstr "å模组工作区 '$displaypath' 包å«ä¸€ä¸ª .git 目录" -#: git-submodule.sh:604 +#: git-submodule.sh:674 #, sh-format msgid "" "(use 'rm -rf' if you really want to remove it including all of its history)" msgstr "(使用 'rm -rf' å‘½ä»¤å¦‚æžœæ‚¨çœŸçš„æƒ³åˆ é™¤å®ƒåŠå…¶å…¨éƒ¨åŽ†å²ï¼‰" -#: git-submodule.sh:610 +#: git-submodule.sh:680 #, sh-format msgid "" -"Submodule work tree '$sm_path' contains local modifications; use '-f' to " +"Submodule work tree '$displaypath' contains local modifications; use '-f' to " "discard them" -msgstr "å模组工作区 '$sm_path' 包å«æœ¬åœ°ä¿®æ”¹ï¼›ä½¿ç”¨ '-f' 丢弃它们" +msgstr "å模组工作区 '$displaypath' 包å«æœ¬åœ°ä¿®æ”¹ï¼›ä½¿ç”¨ '-f' 丢弃它们" -#: git-submodule.sh:613 +#: git-submodule.sh:683 #, sh-format -msgid "Cleared directory '$sm_path'" -msgstr "已清除目录 '$sm_path'" +msgid "Cleared directory '$displaypath'" +msgstr "已清除目录 '$displaypath'" -#: git-submodule.sh:614 +#: git-submodule.sh:684 #, sh-format -msgid "Could not remove submodule work tree '$sm_path'" -msgstr "æ— æ³•ç§»é™¤å模组工作区 '$sm_path'" +msgid "Could not remove submodule work tree '$displaypath'" +msgstr "æ— æ³•ç§»é™¤å模组工作区 '$displaypath'" -#: git-submodule.sh:617 +#: git-submodule.sh:687 #, sh-format -msgid "Could not create empty submodule directory '$sm_path'" -msgstr "ä¸èƒ½åˆ›å»ºç©ºçš„å模组目录 '$sm_path'" +msgid "Could not create empty submodule directory '$displaypath'" +msgstr "ä¸èƒ½åˆ›å»ºç©ºçš„å模组目录 '$displaypath'" -#: git-submodule.sh:626 +#: git-submodule.sh:696 #, sh-format -msgid "Submodule '$name' ($url) unregistered for path '$sm_path'" -msgstr "å模组 '$name' ($url) 未对路径 '$sm_path' 注册" +msgid "Submodule '$name' ($url) unregistered for path '$displaypath'" +msgstr "å模组 '$name' ($url) 未对路径 '$displaypath' 注册" -#: git-submodule.sh:731 +#: git-submodule.sh:811 #, sh-format msgid "" -"Submodule path '$prefix$sm_path' not initialized\n" +"Submodule path '$displaypath' not initialized\n" "Maybe you want to use 'update --init'?" msgstr "" -"å模组路径 '$prefix$sm_path' 没有åˆå§‹åŒ–\n" +"å模组路径 '$displaypath' 没有åˆå§‹åŒ–\n" "也许您想用 'update --init'?" -#: git-submodule.sh:744 +#: git-submodule.sh:824 #, sh-format -msgid "Unable to find current revision in submodule path '$prefix$sm_path'" -msgstr "æ— æ³•åœ¨å模组路径 '$prefix$sm_path' ä¸æ‰¾åˆ°å½“å‰ç‰ˆæœ¬" +msgid "Unable to find current revision in submodule path '$displaypath'" +msgstr "æ— æ³•åœ¨å模组路径 '$displaypath' ä¸æ‰¾åˆ°å½“å‰ç‰ˆæœ¬" -#: git-submodule.sh:753 +#: git-submodule.sh:833 #, sh-format msgid "Unable to fetch in submodule path '$sm_path'" msgstr "æ— æ³•åœ¨å模组路径 '$sm_path' ä¸èŽ·å–" -#: git-submodule.sh:777 +#: git-submodule.sh:857 +#, sh-format +msgid "Unable to fetch in submodule path '$displaypath'" +msgstr "æ— æ³•åœ¨å模组路径 '$displaypath' ä¸èŽ·å–" + +#: git-submodule.sh:871 #, sh-format -msgid "Unable to fetch in submodule path '$prefix$sm_path'" -msgstr "æ— æ³•åœ¨å模组路径 '$prefix$sm_path' ä¸èŽ·å–" +msgid "Unable to rebase '$sha1' in submodule path '$displaypath'" +msgstr "æ— æ³•åœ¨å模组路径 '$displaypath' ä¸å˜åŸº '$sha1'" -#: git-submodule.sh:791 +#: git-submodule.sh:872 #, sh-format -msgid "Unable to rebase '$sha1' in submodule path '$prefix$sm_path'" -msgstr "æ— æ³•åœ¨å模组路径 '$prefix$sm_path' ä¸å˜åŸº '$sha1'" +msgid "Submodule path '$displaypath': rebased into '$sha1'" +msgstr "å模组路径 '$displaypath':å˜åŸºè‡³ '$sha1'" -#: git-submodule.sh:792 +#: git-submodule.sh:877 #, sh-format -msgid "Submodule path '$prefix$sm_path': rebased into '$sha1'" -msgstr "å模组路径 '$prefix$sm_path':å˜åŸºè‡³ '$sha1'" +msgid "Unable to merge '$sha1' in submodule path '$displaypath'" +msgstr "æ— æ³•åˆå¹¶ '$sha1' 到å模组路径 '$displaypath' ä¸" -#: git-submodule.sh:797 +#: git-submodule.sh:878 #, sh-format -msgid "Unable to merge '$sha1' in submodule path '$prefix$sm_path'" -msgstr "æ— æ³•åˆå¹¶ '$sha1' 到å模组路径 '$prefix$sm_path' ä¸" +msgid "Submodule path '$displaypath': merged in '$sha1'" +msgstr "å模组路径 '$displaypath':已åˆå¹¶å…¥ '$sha1'" -#: git-submodule.sh:798 +#: git-submodule.sh:883 #, sh-format -msgid "Submodule path '$prefix$sm_path': merged in '$sha1'" -msgstr "å模组路径 '$prefix$sm_path':已åˆå¹¶å…¥ '$sha1'" +msgid "" +"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'" +msgstr "在å模组路径 '$prefix$sm_path' ä¸æ‰§è¡Œ '$command $sha1' 失败" -#: git-submodule.sh:803 +#: git-submodule.sh:884 #, sh-format -msgid "Unable to checkout '$sha1' in submodule path '$prefix$sm_path'" -msgstr "æ— æ³•åœ¨å模组路径 '$prefix$sm_path' ä¸æ£€å‡º '$sha1'" +msgid "Submodule path '$prefix$sm_path': '$command $sha1'" +msgstr "å模组路径 '$prefix$sm_path': '$command $sha1'" -#: git-submodule.sh:804 +#: git-submodule.sh:889 #, sh-format -msgid "Submodule path '$prefix$sm_path': checked out '$sha1'" -msgstr "å模组路径 '$prefix$sm_path':检出 '$sha1'" +msgid "Unable to checkout '$sha1' in submodule path '$displaypath'" +msgstr "æ— æ³•åœ¨å模组路径 '$displaypath' ä¸æ£€å‡º '$sha1'" -#: git-submodule.sh:831 +#: git-submodule.sh:890 #, sh-format -msgid "Failed to recurse into submodule path '$prefix$sm_path'" -msgstr "æ— æ³•é€’å½’è¿›å模组路径 '$prefix$sm_path'" +msgid "Submodule path '$displaypath': checked out '$sha1'" +msgstr "å模组路径 '$displaypath':检出 '$sha1'" -#: git-submodule.sh:939 +#: git-submodule.sh:917 +#, sh-format +msgid "Failed to recurse into submodule path '$displaypath'" +msgstr "æ— æ³•é€’å½’è¿›å模组路径 '$displaypath'" + +#: git-submodule.sh:1025 msgid "The --cached option cannot be used with the --files option" msgstr "选项 --cached ä¸èƒ½å’Œé€‰é¡¹ --files åŒæ—¶ä½¿ç”¨" #. unexpected type -#: git-submodule.sh:979 +#: git-submodule.sh:1066 #, sh-format msgid "unexpected mode $mod_dst" msgstr "æ„å¤–çš„æ¨¡å¼ $mod_dst" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: git-submodule.sh:997 +#: git-submodule.sh:1086 #, sh-format -msgid " Warn: $name doesn't contain commit $sha1_src" -msgstr " è¦å‘Šï¼š$name 未包å«æ交 $sha1_src" +msgid " Warn: $display_name doesn't contain commit $sha1_src" +msgstr " è¦å‘Šï¼š$display_name 未包å«æ交 $sha1_src" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: git-submodule.sh:1000 +#: git-submodule.sh:1089 #, sh-format -msgid " Warn: $name doesn't contain commit $sha1_dst" -msgstr " è¦å‘Šï¼š$name 未包å«æ交 $sha1_dst" +msgid " Warn: $display_name doesn't contain commit $sha1_dst" +msgstr " è¦å‘Šï¼š$display_name 未包å«æ交 $sha1_dst" # 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ -#: git-submodule.sh:1003 +#: git-submodule.sh:1092 #, sh-format -msgid " Warn: $name doesn't contain commits $sha1_src and $sha1_dst" -msgstr " è¦å‘Šï¼š$name 未包å«æ交 $sha1_src å’Œ $sha1_dst" +msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst" +msgstr " è¦å‘Šï¼š$display_name 未包å«æ交 $sha1_src å’Œ $sha1_dst" -#: git-submodule.sh:1028 +#: git-submodule.sh:1117 msgid "blob" msgstr "æ•°æ®å¯¹è±¡" -#: git-submodule.sh:1066 +#: git-submodule.sh:1155 msgid "Submodules changed but not updated:" msgstr "å模组已修改但尚未更新:" -#: git-submodule.sh:1068 +#: git-submodule.sh:1157 msgid "Submodule changes to be committed:" msgstr "è¦æ交的å模组å˜æ›´ï¼š" -#: git-submodule.sh:1153 +#: git-submodule.sh:1242 #, sh-format msgid "Failed to recurse into submodule path '$sm_path'" msgstr "æ— æ³•é€’å½’è¿›å模组路径 '$sm_path'" -#: git-submodule.sh:1216 +#: git-submodule.sh:1306 #, sh-format -msgid "Synchronizing submodule url for '$prefix$sm_path'" -msgstr "为 '$prefix$sm_path' åŒæ¥å模组 url" +msgid "Synchronizing submodule url for '$displaypath'" +msgstr "为 '$displaypath' åŒæ¥å模组 url" + +#~ msgid "" +#~ "the following submodule (or one of its nested submodule)\n" +#~ "uses a .git directory:" +#~ msgid_plural "" +#~ "the following submodules (or one of its nested submodule)\n" +#~ "use a .git directory:" +#~ msgstr[0] "如下å模组(或一个其嵌套的å模组)使用了一个 .git 目录:" +#~ msgstr[1] "如下å模组(或一个其嵌套的å模组)使用了一个 .git 目录:" + +#~ msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first" +#~ msgstr "æ— æ³•ä¿®æ”¹æœªåˆå¹¶çš„ .gitmodules,先解决åˆå¹¶å†²çª" + +#~ msgid "Could not find section in .gitmodules where path=%s" +#~ msgstr "æ— æ³•åœ¨ .gitmodules ä¸æ‰¾åˆ° path=%s çš„å°èŠ‚" + +#~ msgid "Could not update .gitmodules entry %s" +#~ msgstr "ä¸èƒ½æ›´æ–° .gitmodules æ¡ç›® %s" + +#~ msgid "Could not remove .gitmodules entry for %s" +#~ msgstr "æ— æ³•ç§»é™¤ %s çš„ .gitmodules æ¡ç›®" + +#~ msgid "could not find .gitmodules in index" +#~ msgstr "æ— æ³•åœ¨ç´¢å¼•ä¸æ‰¾åˆ° .gitmodules" + +#~ msgid "reading updated .gitmodules failed" +#~ msgstr "读å–æ›´æ–°åŽçš„ .gitmodules 失败" + +#~ msgid "unable to stat updated .gitmodules" +#~ msgstr "ä¸èƒ½æžšä¸¾æ›´æ–°åŽçš„ .gitmodules" + +#~ msgid "unable to remove .gitmodules from index" +#~ msgstr "ä¸èƒ½ä»Žç´¢å¼•ä¸ç§»é™¤ .gitmodules" + +#~ msgid "adding updated .gitmodules failed" +#~ msgstr "æ·»åŠ æ›´æ–°åŽçš„ .gitmodules 失败" + +#~ msgid "staging updated .gitmodules failed" +#~ msgstr "å°†æ›´æ–°åŽ .gitmodules æ·»åŠ æš‚å˜åŒºå¤±è´¥" + +#~ msgid "Could not set core.worktree in %s" +#~ msgstr "ä¸èƒ½åœ¨ %s ä¸è®¾ç½® core.worktree" + +# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ +#~ msgid " (fix conflicts and then run \"git am --resolved\")" +#~ msgstr " (解决冲çªï¼Œç„¶åŽè¿è¡Œ \"git am --resolved\")" + +# 译者:注æ„ä¿æŒå‰å¯¼ç©ºæ ¼ +#~ msgid " (all conflicts fixed: run \"git commit\")" +#~ msgstr " (解决所有冲çªåŽï¼Œæ‰§è¡Œ \"git commit\")" + +#~ msgid "more than %d trees given: '%s'" +#~ msgstr "æ供了超过 %d ä¸ªæ ‘å¯¹è±¡ï¼š'%s'" + +#~ msgid "You cannot combine --no-ff with --ff-only." +#~ msgstr "您ä¸èƒ½å°† --no-ff 与 --ff-only åŒæ—¶ä½¿ç”¨ã€‚" + +#~ msgid "Huh? Directory %s is in index and no submodule?" +#~ msgstr "嗯?目录 %s 在索引ä¸å¹¶ä¸”ä¸æ˜¯å模组?" + +#~ msgid "" +#~ "submodule '%s' (or one of its nested submodules) uses a .git directory\n" +#~ "(use 'rm -rf' if you really want to remove it including all of its " +#~ "history)" +#~ msgstr "" +#~ "å模组 '%s'(或者它的一个嵌套å模组)使用一个 .git 目录\n" +#~ "(使用 'rm -rf' å‘½ä»¤å¦‚æžœæ‚¨çœŸçš„æƒ³åˆ é™¤å®ƒåŠå…¶å…¨éƒ¨åŽ†å²ï¼‰" + +#~ msgid "" +#~ "'%s' has changes staged in the index\n" +#~ "(use --cached to keep the file, or -f to force removal)" +#~ msgstr "" +#~ "'%s' 有å˜æ›´å·²æš‚å˜è‡³ç´¢å¼•ä¸\n" +#~ "(使用 --cached ä¿å˜æ–‡ä»¶ï¼Œæˆ–用 -f å¼ºåˆ¶åˆ é™¤ï¼‰" + +#~ msgid "show commits where no parent comes before its children" +#~ msgstr "显示æ交时以时间为åºä¸”父æ交ä¸èƒ½é¢†å…ˆåæ交" + +#~ msgid "show the HEAD reference" +#~ msgstr "显示 HEAD 引用" + +#~ msgid "Submodule '$name' ($url) registered for path '$sm_path'" +#~ msgstr "å模组 '$name' ($url) 已为路径 '$sm_path' 注册" + +#~ msgid "Change flags" +#~ msgstr "修改å‚æ•°" + +#~ msgid "" +#~ "NOTE: no more files to clean; press \"t\" to toggle flags of git-clean." +#~ msgstr "注æ„:没有è¦æ¸…ç†çš„文件;å°è¯•æŒ‰ \"t\" åˆ‡æ¢ git-clean 的选项。" + +#~ msgid "Failed to recurse into submodule path '$prefix$sm_path'" +#~ msgstr "æ— æ³•é€’å½’è¿›å模组路径 '$prefix$sm_path'" #~ msgid "git shortlog [-n] [-s] [-e] [-w] [rev-opts] [--] [<commit-id>... ]" #~ msgstr "git shortlog [-n] [-s] [-e] [-w] [版本选项] [--] [<æ交å·>... ]" @@ -9991,10 +10415,6 @@ msgstr "为 '$prefix$sm_path' åŒæ¥å模组 url" #~ msgid "new files yourself (see 'git help status')." #~ msgstr "(å‚è§ 'git help status')。" -#, fuzzy -#~ msgid "aaaSynchronizing submodule url for '$prefix$sm_path'" -#~ msgstr "为 '$prefix$sm_path' åŒæ¥å模组 url" - #~ msgid "use any ref in .git/refs" #~ msgstr "使用 .git/refs 里的任æ„引用" @@ -406,7 +406,7 @@ static const char *show_ident_date(const struct ident_split *ident, return show_date(date, tz, mode); } -void pp_user_info(const struct pretty_print_context *pp, +void pp_user_info(struct pretty_print_context *pp, const char *what, struct strbuf *sb, const char *line, const char *encoding) { @@ -432,6 +432,23 @@ void pp_user_info(const struct pretty_print_context *pp, map_user(pp->mailmap, &mailbuf, &maillen, &namebuf, &namelen); if (pp->fmt == CMIT_FMT_EMAIL) { + if (pp->from_ident) { + struct strbuf buf = STRBUF_INIT; + + strbuf_addstr(&buf, "From: "); + strbuf_add(&buf, namebuf, namelen); + strbuf_addstr(&buf, " <"); + strbuf_add(&buf, mailbuf, maillen); + strbuf_addstr(&buf, ">\n"); + string_list_append(&pp->in_body_headers, + strbuf_detach(&buf, NULL)); + + mailbuf = pp->from_ident->mail_begin; + maillen = pp->from_ident->mail_end - mailbuf; + namebuf = pp->from_ident->name_begin; + namelen = pp->from_ident->name_end - namebuf; + } + strbuf_addstr(sb, "From: "); if (needs_rfc2047_encoding(namebuf, namelen, RFC2047_ADDRESS)) { add_rfc2047(sb, namebuf, namelen, @@ -1514,7 +1531,7 @@ void format_commit_message(const struct commit *commit, free(context.signature_check.signer); } -static void pp_header(const struct pretty_print_context *pp, +static void pp_header(struct pretty_print_context *pp, const char *encoding, const struct commit *commit, const char **msg_p, @@ -1575,7 +1592,7 @@ static void pp_header(const struct pretty_print_context *pp, } } -void pp_title_line(const struct pretty_print_context *pp, +void pp_title_line(struct pretty_print_context *pp, const char **msg_p, struct strbuf *sb, const char *encoding, @@ -1602,6 +1619,16 @@ void pp_title_line(const struct pretty_print_context *pp, } strbuf_addch(sb, '\n'); + if (need_8bit_cte == 0) { + int i; + for (i = 0; i < pp->in_body_headers.nr; i++) { + if (has_non_ascii(pp->in_body_headers.items[i].string)) { + need_8bit_cte = 1; + break; + } + } + } + if (need_8bit_cte > 0) { const char *header_fmt = "MIME-Version: 1.0\n" @@ -1615,10 +1642,21 @@ void pp_title_line(const struct pretty_print_context *pp, if (pp->fmt == CMIT_FMT_EMAIL) { strbuf_addch(sb, '\n'); } + + if (pp->in_body_headers.nr) { + int i; + for (i = 0; i < pp->in_body_headers.nr; i++) { + strbuf_addstr(sb, pp->in_body_headers.items[i].string); + free(pp->in_body_headers.items[i].string); + } + string_list_clear(&pp->in_body_headers, 0); + strbuf_addch(sb, '\n'); + } + strbuf_release(&title); } -void pp_remainder(const struct pretty_print_context *pp, +void pp_remainder(struct pretty_print_context *pp, const char **msg_p, struct strbuf *sb, int indent) @@ -1650,7 +1688,7 @@ void pp_remainder(const struct pretty_print_context *pp, } } -void pretty_print_commit(const struct pretty_print_context *pp, +void pretty_print_commit(struct pretty_print_context *pp, const struct commit *commit, struct strbuf *sb) { @@ -42,23 +42,6 @@ void sq_quote_buf(struct strbuf *dst, const char *src) free(to_free); } -void sq_quote_print(FILE *stream, const char *src) -{ - char c; - - fputc('\'', stream); - while ((c = *src++)) { - if (need_bs_quote(c)) { - fputs("'\\", stream); - fputc(c, stream); - fputc('\'', stream); - } else { - fputc(c, stream); - } - } - fputc('\'', stream); -} - void sq_quote_argv(struct strbuf *dst, const char** argv, size_t maxlen) { int i; @@ -312,82 +295,27 @@ void write_name_quotedpfx(const char *pfx, size_t pfxlen, fputc(terminator, fp); } -static const char *path_relative(const char *in, int len, - struct strbuf *sb, const char *prefix, - int prefix_len); - -void write_name_quoted_relative(const char *name, size_t len, - const char *prefix, size_t prefix_len, +void write_name_quoted_relative(const char *name, const char *prefix, FILE *fp, int terminator) { struct strbuf sb = STRBUF_INIT; - name = path_relative(name, len, &sb, prefix, prefix_len); + name = relative_path(name, prefix, &sb); write_name_quoted(name, fp, terminator); strbuf_release(&sb); } -/* - * Give path as relative to prefix. - * - * The strbuf may or may not be used, so do not assume it contains the - * returned path. - */ -static const char *path_relative(const char *in, int len, - struct strbuf *sb, const char *prefix, - int prefix_len) -{ - int off, i; - - if (len < 0) - len = strlen(in); - if (prefix_len < 0) { - if (prefix) - prefix_len = strlen(prefix); - else - prefix_len = 0; - } - - off = 0; - i = 0; - while (i < prefix_len && i < len && prefix[i] == in[i]) { - if (prefix[i] == '/') - off = i + 1; - i++; - } - in += off; - len -= off; - - if (i >= prefix_len) - return in; - - strbuf_reset(sb); - strbuf_grow(sb, len); - - while (i < prefix_len) { - if (prefix[i] == '/') - strbuf_addstr(sb, "../"); - i++; - } - strbuf_add(sb, in, len); - - return sb->buf; -} - /* quote path as relative to the given prefix */ -char *quote_path_relative(const char *in, int len, - struct strbuf *out, const char *prefix) +char *quote_path_relative(const char *in, const char *prefix, + struct strbuf *out) { struct strbuf sb = STRBUF_INIT; - const char *rel = path_relative(in, len, &sb, prefix, -1); + const char *rel = relative_path(in, prefix, &sb); strbuf_reset(out); quote_c_style_counted(rel, strlen(rel), out, NULL, 0); strbuf_release(&sb); - if (!out->len) - strbuf_addstr(out, "./"); - return out->buf; } @@ -463,72 +391,72 @@ int unquote_c_style(struct strbuf *sb, const char *quoted, const char **endp) /* quoting as a string literal for other languages */ -void perl_quote_print(FILE *stream, const char *src) +void perl_quote_buf(struct strbuf *sb, const char *src) { const char sq = '\''; const char bq = '\\'; char c; - fputc(sq, stream); + strbuf_addch(sb, sq); while ((c = *src++)) { if (c == sq || c == bq) - fputc(bq, stream); - fputc(c, stream); + strbuf_addch(sb, bq); + strbuf_addch(sb, c); } - fputc(sq, stream); + strbuf_addch(sb, sq); } -void python_quote_print(FILE *stream, const char *src) +void python_quote_buf(struct strbuf *sb, const char *src) { const char sq = '\''; const char bq = '\\'; const char nl = '\n'; char c; - fputc(sq, stream); + strbuf_addch(sb, sq); while ((c = *src++)) { if (c == nl) { - fputc(bq, stream); - fputc('n', stream); + strbuf_addch(sb, bq); + strbuf_addch(sb, 'n'); continue; } if (c == sq || c == bq) - fputc(bq, stream); - fputc(c, stream); + strbuf_addch(sb, bq); + strbuf_addch(sb, c); } - fputc(sq, stream); + strbuf_addch(sb, sq); } -void tcl_quote_print(FILE *stream, const char *src) +void tcl_quote_buf(struct strbuf *sb, const char *src) { char c; - fputc('"', stream); + strbuf_addch(sb, '"'); while ((c = *src++)) { switch (c) { case '[': case ']': case '{': case '}': case '$': case '\\': case '"': - fputc('\\', stream); + strbuf_addch(sb, '\\'); default: - fputc(c, stream); + strbuf_addch(sb, c); break; case '\f': - fputs("\\f", stream); + strbuf_addstr(sb, "\\f"); break; case '\r': - fputs("\\r", stream); + strbuf_addstr(sb, "\\r"); break; case '\n': - fputs("\\n", stream); + strbuf_addstr(sb, "\\n"); break; case '\t': - fputs("\\t", stream); + strbuf_addstr(sb, "\\t"); break; case '\v': - fputs("\\v", stream); + strbuf_addstr(sb, "\\v"); break; } } - fputc('"', stream); + strbuf_addch(sb, '"'); } @@ -27,8 +27,6 @@ struct strbuf; * excluding the final null regardless of the buffer size. */ -extern void sq_quote_print(FILE *stream, const char *src); - extern void sq_quote_buf(struct strbuf *, const char *src); extern void sq_quote_argv(struct strbuf *, const char **argv, size_t maxlen); @@ -60,17 +58,16 @@ extern void quote_two_c_style(struct strbuf *, const char *, const char *, int); extern void write_name_quoted(const char *name, FILE *, int terminator); extern void write_name_quotedpfx(const char *pfx, size_t pfxlen, const char *name, FILE *, int terminator); -extern void write_name_quoted_relative(const char *name, size_t len, - const char *prefix, size_t prefix_len, +extern void write_name_quoted_relative(const char *name, const char *prefix, FILE *fp, int terminator); /* quote path as relative to the given prefix */ -extern char *quote_path_relative(const char *in, int len, - struct strbuf *out, const char *prefix); +extern char *quote_path_relative(const char *in, const char *prefix, + struct strbuf *out); /* quoting as a string literal for other languages */ -extern void perl_quote_print(FILE *stream, const char *src); -extern void python_quote_print(FILE *stream, const char *src); -extern void tcl_quote_print(FILE *stream, const char *src); +extern void perl_quote_buf(struct strbuf *sb, const char *src); +extern void python_quote_buf(struct strbuf *sb, const char *src); +extern void tcl_quote_buf(struct strbuf *sb, const char *src); #endif diff --git a/read-cache.c b/read-cache.c index 6ad2ff6cdd..737a27f81b 100644 --- a/read-cache.c +++ b/read-cache.c @@ -489,7 +489,7 @@ int remove_index_entry_at(struct index_state *istate, int pos) } /* - * Remove all cache ententries marked for removal, that is where + * Remove all cache entries marked for removal, that is where * CE_REMOVE is set in ce_flags. This is much more effective than * calling remove_index_entry_at() for each entry to be removed. */ @@ -722,7 +722,7 @@ struct cache_entry *make_cache_entry(unsigned int mode, return ce; } -int ce_same_name(struct cache_entry *a, struct cache_entry *b) +int ce_same_name(const struct cache_entry *a, const struct cache_entry *b) { int len = ce_namelen(a); return ce_namelen(b) == len && !memcmp(a->name, b->name, len); @@ -1761,7 +1761,7 @@ static int has_racy_timestamp(struct index_state *istate) } /* - * Opportunisticly update the index but do not complain if we can't + * Opportunistically update the index but do not complain if we can't */ void update_index_if_able(struct index_state *istate, struct lock_file *lockfile) { @@ -72,10 +72,6 @@ int check_refname_format(const char *refname, int flags) { int component_len, component_count = 0; - if (!strcmp(refname, "@")) - /* Refname is a single character '@'. */ - return -1; - while (1) { /* We are at the start of a path component. */ component_len = check_refname_component(refname, flags); @@ -634,7 +630,9 @@ struct ref_entry_cb { static int do_one_ref(struct ref_entry *entry, void *cb_data) { struct ref_entry_cb *data = cb_data; + struct ref_entry *old_current_ref; int retval; + if (prefixcmp(entry->name, data->base)) return 0; @@ -642,10 +640,12 @@ static int do_one_ref(struct ref_entry *entry, void *cb_data) !ref_resolves_to_object(entry)) return 0; + /* Store the old value, in case this is a recursive call: */ + old_current_ref = current_ref; current_ref = entry; retval = data->fn(entry->name + data->trim, entry->u.value.sha1, entry->flag, data->cb_data); - current_ref = NULL; + current_ref = old_current_ref; return retval; } @@ -2174,11 +2174,14 @@ int lock_packed_refs(int flags) { struct packed_ref_cache *packed_ref_cache; - /* Discard the old cache because it might be invalid: */ - clear_packed_ref_cache(&ref_cache); if (hold_lock_file_for_update(&packlock, git_path("packed-refs"), flags) < 0) return -1; - /* Read the current packed-refs while holding the lock: */ + /* + * Get the current packed-refs while holding the lock. If the + * packed-refs file has been modified since we last read it, + * this will automatically invalidate the cache and re-read + * the packed-refs file. + */ packed_ref_cache = get_packed_ref_cache(&ref_cache); packed_ref_cache->lock = &packlock; /* Increment the reference count to prevent it from being freed: */ @@ -3193,14 +3196,6 @@ int update_ref(const char *action, const char *refname, return 0; } -struct ref *find_ref_by_name(const struct ref *list, const char *name) -{ - for ( ; list; list = list->next) - if (!strcmp(list->name, name)) - return (struct ref *)list; - return NULL; -} - /* * generate a format suitable for scanf from a ref_rev_parse_rules * rule, that is replace the "%.*s" spec with a "%s" spec diff --git a/remote-curl.c b/remote-curl.c index 5b3ce9eed2..b5ebe01800 100644 --- a/remote-curl.c +++ b/remote-curl.c @@ -6,6 +6,7 @@ #include "exec_cmd.h" #include "run-command.h" #include "pkt-line.h" +#include "string-list.h" #include "sideband.h" #include "argv-array.h" @@ -16,11 +17,13 @@ struct options { int verbosity; unsigned long depth; unsigned progress : 1, + check_self_contained_and_connected : 1, followtags : 1, dry_run : 1, thin : 1; }; static struct options options; +static struct string_list cas_options = STRING_LIST_INIT_DUP; static int set_option(const char *name, const char *value) { @@ -67,6 +70,22 @@ static int set_option(const char *name, const char *value) return -1; return 0; } + else if (!strcmp(name, "check-connectivity")) { + if (!strcmp(value, "true")) + options.check_self_contained_and_connected = 1; + else if (!strcmp(value, "false")) + options.check_self_contained_and_connected = 0; + else + return -1; + return 0; + } + else if (!strcmp(name, "cas")) { + struct strbuf val = STRBUF_INIT; + strbuf_addf(&val, "--" CAS_OPT_NAME "=%s", value); + string_list_append(&cas_options, val.buf); + strbuf_release(&val); + return 0; + } else { return 1 /* unsupported */; } @@ -654,7 +673,7 @@ static int fetch_git(struct discovery *heads, struct strbuf preamble = STRBUF_INIT; char *depth_arg = NULL; int argc = 0, i, err; - const char *argv[15]; + const char *argv[16]; argv[argc++] = "fetch-pack"; argv[argc++] = "--stateless-rpc"; @@ -668,6 +687,8 @@ static int fetch_git(struct discovery *heads, argv[argc++] = "-v"; argv[argc++] = "-v"; } + if (options.check_self_contained_and_connected) + argv[argc++] = "--check-self-contained-and-connected"; if (!options.progress) argv[argc++] = "--no-progress"; if (options.depth) { @@ -790,6 +811,7 @@ static int push_git(struct discovery *heads, int nr_spec, char **specs) struct rpc_state rpc; int i, err; struct argv_array args; + struct string_list_item *cas_option; argv_array_init(&args); argv_array_pushl(&args, "send-pack", "--stateless-rpc", "--helper-status", @@ -804,6 +826,8 @@ static int push_git(struct discovery *heads, int nr_spec, char **specs) else if (options.verbosity > 1) argv_array_push(&args, "--verbose"); argv_array_push(&args, options.progress ? "--progress" : "--no-progress"); + for_each_string_list_item(cas_option, &cas_options) + argv_array_push(&args, cas_option->string); argv_array_push(&args, url); for (i = 0; i < nr_spec; i++) argv_array_push(&args, specs[i]); @@ -939,6 +963,7 @@ int main(int argc, const char **argv) printf("fetch\n"); printf("option\n"); printf("push\n"); + printf("check-connectivity\n"); printf("\n"); fflush(stdout); } else { @@ -148,6 +148,7 @@ static struct remote *make_remote(const char *name, int len) } ret = xcalloc(1, sizeof(struct remote)); + ret->prune = -1; /* unspecified */ ALLOC_GROW(remotes, remotes_nr + 1, remotes_alloc); remotes[remotes_nr++] = ret; if (len) @@ -404,6 +405,8 @@ static int handle_config(const char *key, const char *value, void *cb) remote->skip_default_update = git_config_bool(key, value); else if (!strcmp(subkey, ".skipfetchall")) remote->skip_default_update = git_config_bool(key, value); + else if (!strcmp(subkey, ".prune")) + remote->prune = git_config_bool(key, value); else if (!strcmp(subkey, ".url")) { const char *v; if (git_config_string(&v, key, value)) @@ -1302,6 +1305,22 @@ static void add_missing_tags(struct ref *src, struct ref **dst, struct ref ***ds free(sent_tips.tip); } +struct ref *find_ref_by_name(const struct ref *list, const char *name) +{ + for ( ; list; list = list->next) + if (!strcmp(list->name, name)) + return (struct ref *)list; + return NULL; +} + +static void prepare_ref_index(struct string_list *ref_index, struct ref *ref) +{ + for ( ; ref; ref = ref->next) + string_list_append_nodup(ref_index, ref->name)->util = ref; + + sort_string_list(ref_index); +} + /* * Given the set of refs the local repository has, the set of refs the * remote repository has, and the refspec used for push, determine @@ -1320,6 +1339,7 @@ int match_push_refs(struct ref *src, struct ref **dst, int errs; static const char *default_refspec[] = { ":", NULL }; struct ref *ref, **dst_tail = tail_ref(dst); + struct string_list dst_ref_index = STRING_LIST_INIT_NODUP; if (!nr_refspec) { nr_refspec = 1; @@ -1330,6 +1350,7 @@ int match_push_refs(struct ref *src, struct ref **dst, /* pick the remainder */ for (ref = src; ref; ref = ref->next) { + struct string_list_item *dst_item; struct ref *dst_peer; const struct refspec *pat = NULL; char *dst_name; @@ -1338,7 +1359,11 @@ int match_push_refs(struct ref *src, struct ref **dst, if (!dst_name) continue; - dst_peer = find_ref_by_name(*dst, dst_name); + if (!dst_ref_index.nr) + prepare_ref_index(&dst_ref_index, *dst); + + dst_item = string_list_lookup(&dst_ref_index, dst_name); + dst_peer = dst_item ? dst_item->util : NULL; if (dst_peer) { if (dst_peer->peer_ref) /* We're already sending something to this ref. */ @@ -1355,6 +1380,8 @@ int match_push_refs(struct ref *src, struct ref **dst, /* Create a new one and link it */ dst_peer = make_linked_ref(dst_name, &dst_tail); hashcpy(dst_peer->new_sha1, ref->new_sha1); + string_list_insert(&dst_ref_index, + dst_peer->name)->util = dst_peer; } dst_peer->peer_ref = copy_ref(ref); dst_peer->force = pat->force; @@ -1362,10 +1389,13 @@ int match_push_refs(struct ref *src, struct ref **dst, free(dst_name); } + string_list_clear(&dst_ref_index, 0); + if (flags & MATCH_REFS_FOLLOW_TAGS) add_missing_tags(src, dst, &dst_tail); if (send_prune) { + struct string_list src_ref_index = STRING_LIST_INIT_NODUP; /* check for missing refs on the remote */ for (ref = *dst; ref; ref = ref->next) { char *src_name; @@ -1376,11 +1406,15 @@ int match_push_refs(struct ref *src, struct ref **dst, src_name = get_ref_match(rs, nr_refspec, ref, send_mirror, FROM_DST, NULL); if (src_name) { - if (!find_ref_by_name(src, src_name)) + if (!src_ref_index.nr) + prepare_ref_index(&src_ref_index, src); + if (!string_list_has_string(&src_ref_index, + src_name)) ref->peer_ref = alloc_delete_ref(); free(src_name); } } + string_list_clear(&src_ref_index, 0); } if (errs) return -1; @@ -1388,12 +1422,13 @@ int match_push_refs(struct ref *src, struct ref **dst, } void set_ref_status_for_push(struct ref *remote_refs, int send_mirror, - int force_update) + int force_update) { struct ref *ref; for (ref = remote_refs; ref; ref = ref->next) { int force_ref_update = ref->force || force_update; + int reject_reason = 0; if (ref->peer_ref) hashcpy(ref->new_sha1, ref->peer_ref->new_sha1); @@ -1408,6 +1443,26 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror, } /* + * Bypass the usual "must fast-forward" check but + * replace it with a weaker "the old value must be + * this value we observed". If the remote ref has + * moved and is now different from what we expect, + * reject any push. + * + * It also is an error if the user told us to check + * with the remote-tracking branch to find the value + * to expect, but we did not have such a tracking + * branch. + */ + if (ref->expect_old_sha1) { + if (ref->expect_old_no_trackback || + hashcmp(ref->old_sha1, ref->old_sha1_expect)) + reject_reason = REF_STATUS_REJECT_STALE; + } + + /* + * The usual "must fast-forward" rules. + * * Decide whether an individual refspec A:B can be * pushed. The push will succeed if any of the * following are true: @@ -1425,24 +1480,26 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror, * passing the --force argument */ - if (!ref->deletion && !is_null_sha1(ref->old_sha1)) { - int why = 0; /* why would this push require --force? */ - + else if (!ref->deletion && !is_null_sha1(ref->old_sha1)) { if (!prefixcmp(ref->name, "refs/tags/")) - why = REF_STATUS_REJECT_ALREADY_EXISTS; + reject_reason = REF_STATUS_REJECT_ALREADY_EXISTS; else if (!has_sha1_file(ref->old_sha1)) - why = REF_STATUS_REJECT_FETCH_FIRST; + reject_reason = REF_STATUS_REJECT_FETCH_FIRST; else if (!lookup_commit_reference_gently(ref->old_sha1, 1) || !lookup_commit_reference_gently(ref->new_sha1, 1)) - why = REF_STATUS_REJECT_NEEDS_FORCE; + reject_reason = REF_STATUS_REJECT_NEEDS_FORCE; else if (!ref_newer(ref->new_sha1, ref->old_sha1)) - why = REF_STATUS_REJECT_NONFASTFORWARD; - - if (!force_ref_update) - ref->status = why; - else if (why) - ref->forced_update = 1; + reject_reason = REF_STATUS_REJECT_NONFASTFORWARD; } + + /* + * "--force" will defeat any rejection implemented + * by the rules above. + */ + if (!force_ref_update) + ref->status = reject_reason; + else if (reject_reason) + ref->forced_update = 1; } } @@ -1913,3 +1970,121 @@ struct ref *get_stale_heads(struct refspec *refs, int ref_count, struct ref *fet string_list_clear(&ref_names, 0); return stale_refs; } + +/* + * Compare-and-swap + */ +void clear_cas_option(struct push_cas_option *cas) +{ + int i; + + for (i = 0; i < cas->nr; i++) + free(cas->entry[i].refname); + free(cas->entry); + memset(cas, 0, sizeof(*cas)); +} + +static struct push_cas *add_cas_entry(struct push_cas_option *cas, + const char *refname, + size_t refnamelen) +{ + struct push_cas *entry; + ALLOC_GROW(cas->entry, cas->nr + 1, cas->alloc); + entry = &cas->entry[cas->nr++]; + memset(entry, 0, sizeof(*entry)); + entry->refname = xmemdupz(refname, refnamelen); + return entry; +} + +int parse_push_cas_option(struct push_cas_option *cas, const char *arg, int unset) +{ + const char *colon; + struct push_cas *entry; + + if (unset) { + /* "--no-<option>" */ + clear_cas_option(cas); + return 0; + } + + if (!arg) { + /* just "--<option>" */ + cas->use_tracking_for_rest = 1; + return 0; + } + + /* "--<option>=refname" or "--<option>=refname:value" */ + colon = strchrnul(arg, ':'); + entry = add_cas_entry(cas, arg, colon - arg); + if (!*colon) + entry->use_tracking = 1; + else if (get_sha1(colon + 1, entry->expect)) + return error("cannot parse expected object name '%s'", colon + 1); + return 0; +} + +int parseopt_push_cas_option(const struct option *opt, const char *arg, int unset) +{ + return parse_push_cas_option(opt->value, arg, unset); +} + +int is_empty_cas(const struct push_cas_option *cas) +{ + return !cas->use_tracking_for_rest && !cas->nr; +} + +/* + * Look at remote.fetch refspec and see if we have a remote + * tracking branch for the refname there. Fill its current + * value in sha1[]. + * If we cannot do so, return negative to signal an error. + */ +static int remote_tracking(struct remote *remote, const char *refname, + unsigned char sha1[20]) +{ + char *dst; + + dst = apply_refspecs(remote->fetch, remote->fetch_refspec_nr, refname); + if (!dst) + return -1; /* no tracking ref for refname at remote */ + if (read_ref(dst, sha1)) + return -1; /* we know what the tracking ref is but we cannot read it */ + return 0; +} + +static void apply_cas(struct push_cas_option *cas, + struct remote *remote, + struct ref *ref) +{ + int i; + + /* Find an explicit --<option>=<name>[:<value>] entry */ + for (i = 0; i < cas->nr; i++) { + struct push_cas *entry = &cas->entry[i]; + if (!refname_match(entry->refname, ref->name, ref_rev_parse_rules)) + continue; + ref->expect_old_sha1 = 1; + if (!entry->use_tracking) + hashcpy(ref->old_sha1_expect, cas->entry[i].expect); + else if (remote_tracking(remote, ref->name, ref->old_sha1_expect)) + ref->expect_old_no_trackback = 1; + return; + } + + /* Are we using "--<option>" to cover all? */ + if (!cas->use_tracking_for_rest) + return; + + ref->expect_old_sha1 = 1; + if (remote_tracking(remote, ref->name, ref->old_sha1_expect)) + ref->expect_old_no_trackback = 1; +} + +void apply_push_cas(struct push_cas_option *cas, + struct remote *remote, + struct ref *remote_refs) +{ + struct ref *ref; + for (ref = remote_refs; ref; ref = ref->next) + apply_cas(cas, remote, ref); +} @@ -1,6 +1,8 @@ #ifndef REMOTE_H #define REMOTE_H +#include "parse-options.h" + enum { REMOTE_CONFIG, REMOTE_REMOTES, @@ -40,6 +42,7 @@ struct remote { int fetch_tags; int skip_default_update; int mirror; + int prune; const char *receivepack; const char *uploadpack; @@ -71,6 +74,56 @@ struct refspec { extern const struct refspec *tag_refspec; +struct ref { + struct ref *next; + unsigned char old_sha1[20]; + unsigned char new_sha1[20]; + unsigned char old_sha1_expect[20]; /* used by expect-old */ + char *symref; + unsigned int + force:1, + forced_update:1, + expect_old_sha1:1, + expect_old_no_trackback:1, + deletion:1, + matched:1; + + /* + * Order is important here, as we write to FETCH_HEAD + * in numeric order. And the default NOT_FOR_MERGE + * should be 0, so that xcalloc'd structures get it + * by default. + */ + enum { + FETCH_HEAD_MERGE = -1, + FETCH_HEAD_NOT_FOR_MERGE = 0, + FETCH_HEAD_IGNORE = 1 + } fetch_head_status; + + enum { + REF_STATUS_NONE = 0, + REF_STATUS_OK, + REF_STATUS_REJECT_NONFASTFORWARD, + REF_STATUS_REJECT_ALREADY_EXISTS, + REF_STATUS_REJECT_NODELETE, + REF_STATUS_REJECT_FETCH_FIRST, + REF_STATUS_REJECT_NEEDS_FORCE, + REF_STATUS_REJECT_STALE, + REF_STATUS_UPTODATE, + REF_STATUS_REMOTE_REJECT, + REF_STATUS_EXPECTING_REPORT + } status; + char *remote_status; + struct ref *peer_ref; /* when renaming */ + char name[FLEX_ARRAY]; /* more */ +}; + +#define REF_NORMAL (1u << 0) +#define REF_HEADS (1u << 1) +#define REF_TAGS (1u << 2) + +extern struct ref *find_ref_by_name(const struct ref *list, const char *name); + struct ref *alloc_ref(const char *name); struct ref *copy_ref(const struct ref *ref); struct ref *copy_ref_list(const struct ref *ref); @@ -84,6 +137,14 @@ int check_ref_type(const struct ref *ref, int flags); */ void free_refs(struct ref *ref); +struct extra_have_objects { + int nr, alloc; + unsigned char (*array)[20]; +}; +extern struct ref **get_remote_heads(int in, char *src_buf, size_t src_len, + struct ref **list, unsigned int flags, + struct extra_have_objects *); + int resolve_remote_symref(struct ref *ref, struct ref *list); int ref_newer(const unsigned char *new_sha1, const unsigned char *old_sha1); @@ -172,4 +233,27 @@ struct ref *guess_remote_head(const struct ref *head, /* Return refs which no longer exist on remote */ struct ref *get_stale_heads(struct refspec *refs, int ref_count, struct ref *fetch_map); +/* + * Compare-and-swap + */ +#define CAS_OPT_NAME "force-with-lease" + +struct push_cas_option { + unsigned use_tracking_for_rest:1; + struct push_cas { + unsigned char expect[20]; + unsigned use_tracking:1; + char *refname; + } *entry; + int nr; + int alloc; +}; + +extern int parseopt_push_cas_option(const struct option *, const char *arg, int unset); +extern int parse_push_cas_option(struct push_cas_option *, const char *arg, int unset); +extern void clear_cas_option(struct push_cas_option *); + +extern int is_empty_cas(const struct push_cas_option *); +void apply_push_cas(struct push_cas_option *, struct remote *, struct ref *); + #endif @@ -300,7 +300,7 @@ static int handle_cache(const char *path, unsigned char *sha1, const char *outpu { mmfile_t mmfile[3] = {{NULL}}; mmbuffer_t result = {NULL, 0}; - struct cache_entry *ce; + const struct cache_entry *ce; int pos, len, i, hunk_no; struct rerere_io_mem io; int marker_size = ll_merge_marker_size(path); @@ -360,7 +360,7 @@ static int handle_cache(const char *path, unsigned char *sha1, const char *outpu static int check_one_conflict(int i, int *type) { - struct cache_entry *e = active_cache[i]; + const struct cache_entry *e = active_cache[i]; if (!ce_stage(e)) { *type = RESOLVED; @@ -375,8 +375,8 @@ static int check_one_conflict(int i, int *type) /* Only handle regular files with both stages #2 and #3 */ if (i + 1 < active_nr) { - struct cache_entry *e2 = active_cache[i]; - struct cache_entry *e3 = active_cache[i + 1]; + const struct cache_entry *e2 = active_cache[i]; + const struct cache_entry *e3 = active_cache[i + 1]; if (ce_stage(e2) == 2 && ce_stage(e3) == 3 && ce_same_name(e, e3) && @@ -399,7 +399,7 @@ static int find_conflict(struct string_list *conflict) for (i = 0; i < active_nr;) { int conflict_type; - struct cache_entry *e = active_cache[i]; + const struct cache_entry *e = active_cache[i]; i = check_one_conflict(i, &conflict_type); if (conflict_type == THREE_STAGED) string_list_insert(conflict, (const char *)e->name); @@ -415,7 +415,7 @@ int rerere_remaining(struct string_list *merge_rr) for (i = 0; i < active_nr;) { int conflict_type; - struct cache_entry *e = active_cache[i]; + const struct cache_entry *e = active_cache[i]; i = check_one_conflict(i, &conflict_type); if (conflict_type == PUNTED) string_list_insert(merge_rr, (const char *)e->name); diff --git a/resolve-undo.c b/resolve-undo.c index 4b78e6f8b8..c09b00664e 100644 --- a/resolve-undo.c +++ b/resolve-undo.c @@ -115,7 +115,7 @@ void resolve_undo_clear_index(struct index_state *istate) int unmerge_index_entry_at(struct index_state *istate, int pos) { - struct cache_entry *ce; + const struct cache_entry *ce; struct string_list_item *item; struct resolve_undo_info *ru; int i, err = 0, matched; @@ -167,7 +167,7 @@ void unmerge_marked_index(struct index_state *istate) return; for (i = 0; i < istate->cache_nr; i++) { - struct cache_entry *ce = istate->cache[i]; + const struct cache_entry *ce = istate->cache[i]; if (ce->ce_flags & CE_MATCHED) i = unmerge_index_entry_at(istate, i); } @@ -181,7 +181,7 @@ void unmerge_index(struct index_state *istate, const struct pathspec *pathspec) return; for (i = 0; i < istate->cache_nr; i++) { - struct cache_entry *ce = istate->cache[i]; + const struct cache_entry *ce = istate->cache[i]; if (!match_pathspec_depth(pathspec, ce->name, ce_namelen(ce), 0, NULL)) continue; i = unmerge_index_entry_at(istate, i); diff --git a/revision.c b/revision.c index 001623a921..6230a80a77 100644 --- a/revision.c +++ b/revision.c @@ -15,6 +15,7 @@ #include "string-list.h" #include "line-log.h" #include "mailmap.h" +#include "commit-slab.h" volatile show_early_output_fn_t show_early_output; @@ -1358,7 +1359,7 @@ static void prepare_show_merge(struct rev_info *revs) if (!active_nr) read_cache(); for (i = 0; i < active_nr; i++) { - struct cache_entry *ce = active_cache[i]; + const struct cache_entry *ce = active_cache[i]; if (!ce_stage(ce)) continue; if (ce_path_match(ce, &revs->prune_data)) { @@ -2764,7 +2765,7 @@ static int commit_match(struct commit *commit, struct rev_info *opt) return retval; } -static inline int want_ancestry(struct rev_info *revs) +static inline int want_ancestry(const struct rev_info *revs) { return (revs->rewrite_parents || revs->children.name); } @@ -2821,6 +2822,14 @@ enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit) if (action == commit_show && !revs->show_all && revs->prune && revs->dense && want_ancestry(revs)) { + /* + * --full-diff on simplified parents is no good: it + * will show spurious changes from the commits that + * were elided. So we save the parents on the side + * when --full-diff is in effect. + */ + if (revs->full_diff) + save_parents(revs, commit); if (rewrite_parents(revs, commit, rewrite_one) < 0) return commit_error; } @@ -2840,6 +2849,7 @@ static struct commit *get_revision_1(struct rev_info *revs) free(entry); if (revs->reflog_info) { + save_parents(revs, commit); fake_reflog_parent(revs->reflog_info, commit); commit->object.flags &= ~(ADDED | SEEN | SHOWN); } @@ -3039,6 +3049,8 @@ struct commit *get_revision(struct rev_info *revs) c = get_revision_internal(revs); if (c && revs->graph) graph_update(revs->graph, c); + if (!c) + free_saved_parents(revs); return c; } @@ -3070,3 +3082,54 @@ void put_revision_mark(const struct rev_info *revs, const struct commit *commit) fputs(mark, stdout); putchar(' '); } + +define_commit_slab(saved_parents, struct commit_list *); + +#define EMPTY_PARENT_LIST ((struct commit_list *)-1) + +void save_parents(struct rev_info *revs, struct commit *commit) +{ + struct commit_list **pp; + + if (!revs->saved_parents_slab) { + revs->saved_parents_slab = xmalloc(sizeof(struct saved_parents)); + init_saved_parents(revs->saved_parents_slab); + } + + pp = saved_parents_at(revs->saved_parents_slab, commit); + + /* + * When walking with reflogs, we may visit the same commit + * several times: once for each appearance in the reflog. + * + * In this case, save_parents() will be called multiple times. + * We want to keep only the first set of parents. We need to + * store a sentinel value for an empty (i.e., NULL) parent + * list to distinguish it from a not-yet-saved list, however. + */ + if (*pp) + return; + if (commit->parents) + *pp = copy_commit_list(commit->parents); + else + *pp = EMPTY_PARENT_LIST; +} + +struct commit_list *get_saved_parents(struct rev_info *revs, const struct commit *commit) +{ + struct commit_list *parents; + + if (!revs->saved_parents_slab) + return commit->parents; + + parents = *saved_parents_at(revs->saved_parents_slab, commit); + if (parents == EMPTY_PARENT_LIST) + return NULL; + return parents; +} + +void free_saved_parents(struct rev_info *revs) +{ + if (revs->saved_parents_slab) + clear_saved_parents(revs->saved_parents_slab); +} diff --git a/revision.h b/revision.h index 92d6614af6..e7f1d211bf 100644 --- a/revision.h +++ b/revision.h @@ -25,6 +25,7 @@ struct rev_info; struct log_info; struct string_list; +struct saved_parents; struct rev_cmdline_info { unsigned int nr; @@ -144,6 +145,7 @@ struct rev_info { int numbered_files; int reroll_count; char *message_id; + struct ident_split from_ident; struct string_list *ref_message_ids; int add_signoff; const char *extra_headers; @@ -186,6 +188,9 @@ struct rev_info { /* line level range that we are chasing */ struct decoration line_log_data; + + /* copies of the parent lists, for --full-diff display */ + struct saved_parents *saved_parents_slab; }; #define REV_TREE_SAME 0 @@ -272,4 +277,20 @@ typedef enum rewrite_result (*rewrite_parent_fn_t)(struct rev_info *revs, struct extern int rewrite_parents(struct rev_info *revs, struct commit *commit, rewrite_parent_fn_t rewrite_parent); + +/* + * Save a copy of the parent list, and return the saved copy. This is + * used by the log machinery to retrieve the original parents when + * commit->parents has been modified by history simpification. + * + * You may only call save_parents() once per commit (this is checked + * for non-root commits). + * + * get_saved_parents() will transparently return commit->parents if + * history simplification is off. + */ +extern void save_parents(struct rev_info *revs, struct commit *commit); +extern struct commit_list *get_saved_parents(struct rev_info *revs, const struct commit *commit); +extern void free_saved_parents(struct rev_info *revs); + #endif diff --git a/run-command.c b/run-command.c index aece872e33..1b7f88eeb1 100644 --- a/run-command.c +++ b/run-command.c @@ -76,7 +76,10 @@ static inline void close_pair(int fd[2]) static inline void dup_devnull(int to) { int fd = open("/dev/null", O_RDWR); - dup2(fd, to); + if (fd < 0) + die_errno(_("open /dev/null failed")); + if (dup2(fd, to) < 0) + die_errno(_("dup2(%d,%d) failed"), fd, to); close(fd); } #endif diff --git a/run-command.h b/run-command.h index 221ce33140..6b985afd07 100644 --- a/run-command.h +++ b/run-command.h @@ -46,6 +46,7 @@ int finish_command(struct child_process *); int run_command(struct child_process *); extern char *find_hook(const char *name); +LAST_ARG_MUST_BE_NULL extern int run_hook(const char *index_file, const char *name, ...); #define RUN_COMMAND_NO_STDIN 1 diff --git a/send-pack.c b/send-pack.c index 7d172ef37f..b228d65613 100644 --- a/send-pack.c +++ b/send-pack.c @@ -5,6 +5,7 @@ #include "sideband.h" #include "run-command.h" #include "remote.h" +#include "connect.h" #include "send-pack.h" #include "quote.h" #include "transport.h" @@ -226,6 +227,7 @@ int send_pack(struct send_pack_args *args, case REF_STATUS_REJECT_ALREADY_EXISTS: case REF_STATUS_REJECT_FETCH_FIRST: case REF_STATUS_REJECT_NEEDS_FORCE: + case REF_STATUS_REJECT_STALE: case REF_STATUS_UPTODATE: continue; default: diff --git a/sequencer.c b/sequencer.c index 425207ad5f..351548f57d 100644 --- a/sequencer.c +++ b/sequencer.c @@ -331,7 +331,7 @@ static int do_recursive_merge(struct commit *base, struct commit *next, int i; strbuf_addstr(msgbuf, "\nConflicts:\n"); for (i = 0; i < active_nr;) { - struct cache_entry *ce = active_cache[i++]; + const struct cache_entry *ce = active_cache[i++]; if (ce_stage(ce)) { strbuf_addch(msgbuf, '\t'); strbuf_addstr(msgbuf, ce->name); @@ -371,8 +371,9 @@ static int is_index_unchanged(void) active_cache_tree = cache_tree(); if (!cache_tree_fully_valid(active_cache_tree)) - if (cache_tree_update(active_cache_tree, active_cache, - active_nr, 0)) + if (cache_tree_update(active_cache_tree, + (const struct cache_entry * const *)active_cache, + active_nr, 0)) return error(_("Unable to update cache tree\n")); return !hashcmp(active_cache_tree->sha1, head_commit->tree->object.sha1); @@ -227,6 +227,7 @@ int is_inside_work_tree(void) void setup_work_tree(void) { + struct strbuf sb = STRBUF_INIT; const char *work_tree, *git_dir; static int initialized = 0; @@ -246,8 +247,10 @@ void setup_work_tree(void) if (getenv(GIT_WORK_TREE_ENVIRONMENT)) setenv(GIT_WORK_TREE_ENVIRONMENT, ".", 1); - set_git_dir(relative_path(git_dir, work_tree)); + set_git_dir(relative_path(git_dir, work_tree, &sb)); initialized = 1; + + strbuf_release(&sb); } static int check_repository_format_gently(const char *gitdir, int *nongit_ok) @@ -775,3 +778,15 @@ const char *resolve_gitdir(const char *suspect) return suspect; return read_gitfile(suspect); } + +/* if any standard file descriptor is missing open it to /dev/null */ +void sanitize_stdfds(void) +{ + int fd = open("/dev/null", O_RDWR, 0); + while (fd != -1 && fd < 2) + fd = dup(fd); + if (fd == -1) + die_errno("open /dev/null or dup failed"); + if (fd > 2) + close(fd); +} diff --git a/sha1_file.c b/sha1_file.c index 0af19c00f1..8c2d1ed52d 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -614,7 +614,7 @@ static void scan_windows(struct packed_git *p, } } -static int unuse_one_window(struct packed_git *current, int keep_fd) +static int unuse_one_window(struct packed_git *current) { struct packed_git *p, *lru_p = NULL; struct pack_window *lru_w = NULL, *lru_l = NULL; @@ -628,15 +628,8 @@ static int unuse_one_window(struct packed_git *current, int keep_fd) pack_mapped -= lru_w->len; if (lru_l) lru_l->next = lru_w->next; - else { + else lru_p->windows = lru_w->next; - if (!lru_p->windows && lru_p->pack_fd != -1 - && lru_p->pack_fd != keep_fd) { - close(lru_p->pack_fd); - pack_open_fds--; - lru_p->pack_fd = -1; - } - } free(lru_w); pack_open_windows--; return 1; @@ -644,10 +637,10 @@ static int unuse_one_window(struct packed_git *current, int keep_fd) return 0; } -void release_pack_memory(size_t need, int fd) +void release_pack_memory(size_t need) { size_t cur = pack_mapped; - while (need >= (cur - pack_mapped) && unuse_one_window(NULL, fd)) + while (need >= (cur - pack_mapped) && unuse_one_window(NULL)) ; /* nothing */ } @@ -658,7 +651,7 @@ void *xmmap(void *start, size_t length, if (ret == MAP_FAILED) { if (!length) return NULL; - release_pack_memory(length, fd); + release_pack_memory(length); ret = mmap(start, length, prot, flags, fd, offset); if (ret == MAP_FAILED) die_errno("Out of memory? mmap failed"); @@ -682,6 +675,83 @@ void close_pack_windows(struct packed_git *p) } } +/* + * The LRU pack is the one with the oldest MRU window, preferring packs + * with no used windows, or the oldest mtime if it has no windows allocated. + */ +static void find_lru_pack(struct packed_git *p, struct packed_git **lru_p, struct pack_window **mru_w, int *accept_windows_inuse) +{ + struct pack_window *w, *this_mru_w; + int has_windows_inuse = 0; + + /* + * Reject this pack if it has windows and the previously selected + * one does not. If this pack does not have windows, reject + * it if the pack file is newer than the previously selected one. + */ + if (*lru_p && !*mru_w && (p->windows || p->mtime > (*lru_p)->mtime)) + return; + + for (w = this_mru_w = p->windows; w; w = w->next) { + /* + * Reject this pack if any of its windows are in use, + * but the previously selected pack did not have any + * inuse windows. Otherwise, record that this pack + * has windows in use. + */ + if (w->inuse_cnt) { + if (*accept_windows_inuse) + has_windows_inuse = 1; + else + return; + } + + if (w->last_used > this_mru_w->last_used) + this_mru_w = w; + + /* + * Reject this pack if it has windows that have been + * used more recently than the previously selected pack. + * If the previously selected pack had windows inuse and + * we have not encountered a window in this pack that is + * inuse, skip this check since we prefer a pack with no + * inuse windows to one that has inuse windows. + */ + if (*mru_w && *accept_windows_inuse == has_windows_inuse && + this_mru_w->last_used > (*mru_w)->last_used) + return; + } + + /* + * Select this pack. + */ + *mru_w = this_mru_w; + *lru_p = p; + *accept_windows_inuse = has_windows_inuse; +} + +static int close_one_pack(void) +{ + struct packed_git *p, *lru_p = NULL; + struct pack_window *mru_w = NULL; + int accept_windows_inuse = 1; + + for (p = packed_git; p; p = p->next) { + if (p->pack_fd == -1) + continue; + find_lru_pack(p, &lru_p, &mru_w, &accept_windows_inuse); + } + + if (lru_p) { + close(lru_p->pack_fd); + pack_open_fds--; + lru_p->pack_fd = -1; + return 1; + } + + return 0; +} + void unuse_pack(struct pack_window **w_cursor) { struct pack_window *w = *w_cursor; @@ -777,7 +847,7 @@ static int open_packed_git_1(struct packed_git *p) pack_max_fds = 1; } - while (pack_max_fds <= pack_open_fds && unuse_one_window(NULL, -1)) + while (pack_max_fds <= pack_open_fds && close_one_pack()) ; /* nothing */ p->pack_fd = git_open_noatime(p->pack_name); @@ -893,7 +963,7 @@ unsigned char *use_pack(struct packed_git *p, win->len = (size_t)len; pack_mapped += win->len; while (packed_git_limit < pack_mapped - && unuse_one_window(p, p->pack_fd)) + && unuse_one_window(p)) ; /* nothing */ win->base = xmmap(NULL, win->len, PROT_READ, MAP_PRIVATE, @@ -939,7 +1009,7 @@ static struct packed_git *alloc_packed_git(int extra) static void try_to_free_pack_memory(size_t size) { - release_pack_memory(size, -1); + release_pack_memory(size); } struct packed_git *add_packed_git(const char *path, int path_len, int local) @@ -1306,6 +1376,26 @@ static int git_open_noatime(const char *name) } } +static int stat_sha1_file(const unsigned char *sha1, struct stat *st) +{ + char *name = sha1_file_name(sha1); + struct alternate_object_database *alt; + + if (!lstat(name, st)) + return 0; + + prepare_alt_odb(); + errno = ENOENT; + for (alt = alt_odb_list; alt; alt = alt->next) { + name = alt->name; + fill_sha1_path(name, sha1); + if (!lstat(alt->base, st)) + return 0; + } + + return -1; +} + static int open_sha1_file(const unsigned char *sha1) { int fd; @@ -1693,46 +1783,21 @@ static int retry_bad_packed_offset(struct packed_git *p, off_t obj_offset) return type; } - #define POI_STACK_PREALLOC 64 -static int packed_object_info(struct packed_git *p, off_t obj_offset, - unsigned long *sizep, int *rtype) +static enum object_type packed_to_object_type(struct packed_git *p, + off_t obj_offset, + enum object_type type, + struct pack_window **w_curs, + off_t curpos) { - struct pack_window *w_curs = NULL; - unsigned long size; - off_t curpos = obj_offset; - enum object_type type; off_t small_poi_stack[POI_STACK_PREALLOC]; off_t *poi_stack = small_poi_stack; int poi_stack_nr = 0, poi_stack_alloc = POI_STACK_PREALLOC; - type = unpack_object_header(p, &w_curs, &curpos, &size); - - if (rtype) - *rtype = type; /* representation type */ - - if (sizep) { - if (type == OBJ_OFS_DELTA || type == OBJ_REF_DELTA) { - off_t tmp_pos = curpos; - off_t base_offset = get_delta_base(p, &w_curs, &tmp_pos, - type, obj_offset); - if (!base_offset) { - type = OBJ_BAD; - goto out; - } - *sizep = get_size_from_delta(p, &w_curs, tmp_pos); - if (*sizep == 0) { - type = OBJ_BAD; - goto out; - } - } else { - *sizep = size; - } - } - while (type == OBJ_OFS_DELTA || type == OBJ_REF_DELTA) { off_t base_offset; + unsigned long size; /* Push the object we're going to leave behind */ if (poi_stack_nr >= poi_stack_alloc && poi_stack == small_poi_stack) { poi_stack_alloc = alloc_nr(poi_stack_nr); @@ -1743,11 +1808,11 @@ static int packed_object_info(struct packed_git *p, off_t obj_offset, } poi_stack[poi_stack_nr++] = obj_offset; /* If parsing the base offset fails, just unwind */ - base_offset = get_delta_base(p, &w_curs, &curpos, type, obj_offset); + base_offset = get_delta_base(p, w_curs, &curpos, type, obj_offset); if (!base_offset) goto unwind; curpos = obj_offset = base_offset; - type = unpack_object_header(p, &w_curs, &curpos, &size); + type = unpack_object_header(p, w_curs, &curpos, &size); if (type <= OBJ_NONE) { /* If getting the base itself fails, we first * retry the base, otherwise unwind */ @@ -1774,7 +1839,6 @@ static int packed_object_info(struct packed_git *p, off_t obj_offset, out: if (poi_stack != small_poi_stack) free(poi_stack); - unuse_pack(&w_curs); return type; unwind: @@ -1788,6 +1852,57 @@ unwind: goto out; } +static int packed_object_info(struct packed_git *p, off_t obj_offset, + struct object_info *oi) +{ + struct pack_window *w_curs = NULL; + unsigned long size; + off_t curpos = obj_offset; + enum object_type type; + + /* + * We always get the representation type, but only convert it to + * a "real" type later if the caller is interested. + */ + type = unpack_object_header(p, &w_curs, &curpos, &size); + + if (oi->sizep) { + if (type == OBJ_OFS_DELTA || type == OBJ_REF_DELTA) { + off_t tmp_pos = curpos; + off_t base_offset = get_delta_base(p, &w_curs, &tmp_pos, + type, obj_offset); + if (!base_offset) { + type = OBJ_BAD; + goto out; + } + *oi->sizep = get_size_from_delta(p, &w_curs, tmp_pos); + if (*oi->sizep == 0) { + type = OBJ_BAD; + goto out; + } + } else { + *oi->sizep = size; + } + } + + if (oi->disk_sizep) { + struct revindex_entry *revidx = find_pack_revindex(p, obj_offset); + *oi->disk_sizep = revidx[1].offset - obj_offset; + } + + if (oi->typep) { + *oi->typep = packed_to_object_type(p, obj_offset, type, &w_curs, curpos); + if (*oi->typep < 0) { + type = OBJ_BAD; + goto out; + } + } + +out: + unuse_pack(&w_curs); + return type; +} + static void *unpack_compressed_entry(struct packed_git *p, struct pack_window **w_curs, off_t curpos, @@ -2357,7 +2472,8 @@ struct packed_git *find_sha1_pack(const unsigned char *sha1, } -static int sha1_loose_object_info(const unsigned char *sha1, unsigned long *sizep) +static int sha1_loose_object_info(const unsigned char *sha1, + struct object_info *oi) { int status; unsigned long mapsize, size; @@ -2365,19 +2481,37 @@ static int sha1_loose_object_info(const unsigned char *sha1, unsigned long *size git_zstream stream; char hdr[32]; + /* + * If we don't care about type or size, then we don't + * need to look inside the object at all. + */ + if (!oi->typep && !oi->sizep) { + if (oi->disk_sizep) { + struct stat st; + if (stat_sha1_file(sha1, &st) < 0) + return -1; + *oi->disk_sizep = st.st_size; + } + return 0; + } + map = map_sha1_file(sha1, &mapsize); if (!map) return -1; + if (oi->disk_sizep) + *oi->disk_sizep = mapsize; if (unpack_sha1_header(&stream, map, mapsize, hdr, sizeof(hdr)) < 0) status = error("unable to unpack %s header", sha1_to_hex(sha1)); else if ((status = parse_sha1_header(hdr, &size)) < 0) status = error("unable to parse %s header", sha1_to_hex(sha1)); - else if (sizep) - *sizep = size; + else if (oi->sizep) + *oi->sizep = size; git_inflate_end(&stream); munmap(map, mapsize); - return status; + if (oi->typep) + *oi->typep = status; + return 0; } /* returns enum object_type or negative */ @@ -2385,34 +2519,37 @@ int sha1_object_info_extended(const unsigned char *sha1, struct object_info *oi) { struct cached_object *co; struct pack_entry e; - int status, rtype; + int rtype; co = find_cached_object(sha1); if (co) { + if (oi->typep) + *(oi->typep) = co->type; if (oi->sizep) *(oi->sizep) = co->size; + if (oi->disk_sizep) + *(oi->disk_sizep) = 0; oi->whence = OI_CACHED; - return co->type; + return 0; } if (!find_pack_entry(sha1, &e)) { /* Most likely it's a loose object. */ - status = sha1_loose_object_info(sha1, oi->sizep); - if (status >= 0) { + if (!sha1_loose_object_info(sha1, oi)) { oi->whence = OI_LOOSE; - return status; + return 0; } /* Not a loose object; someone else may have just packed it. */ reprepare_packed_git(); if (!find_pack_entry(sha1, &e)) - return status; + return -1; } - status = packed_object_info(e.p, e.offset, oi->sizep, &rtype); - if (status < 0) { + rtype = packed_object_info(e.p, e.offset, oi); + if (rtype < 0) { mark_bad_packed_object(e.p, sha1); - status = sha1_object_info_extended(sha1, oi); + return sha1_object_info_extended(sha1, oi); } else if (in_delta_base_cache(e.p, e.offset)) { oi->whence = OI_DBCACHED; } else { @@ -2423,15 +2560,19 @@ int sha1_object_info_extended(const unsigned char *sha1, struct object_info *oi) rtype == OBJ_OFS_DELTA); } - return status; + return 0; } int sha1_object_info(const unsigned char *sha1, unsigned long *sizep) { - struct object_info oi; + enum object_type type; + struct object_info oi = {NULL}; + oi.typep = &type; oi.sizep = sizep; - return sha1_object_info_extended(sha1, &oi); + if (sha1_object_info_extended(sha1, &oi) < 0) + return -1; + return type; } static void *read_packed_sha1(const unsigned char *sha1, diff --git a/sha1_name.c b/sha1_name.c index 1a75fac05f..65ad066d9b 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -52,7 +52,7 @@ static void update_candidates(struct disambiguate_state *ds, const unsigned char } if (!ds->candidate_ok) { - /* discard the candidate; we know it does not satisify fn */ + /* discard the candidate; we know it does not satisfy fn */ hashcpy(ds->candidate, current); ds->candidate_checked = 0; return; @@ -445,20 +445,22 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1) "\n" "where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" "examine these refs and maybe delete them. Turn this message off by\n" - "running \"git config advice.object_name_warning false\""); + "running \"git config advice.objectNameWarning false\""); unsigned char tmp_sha1[20]; char *real_ref = NULL; int refs_found = 0; int at, reflog_len, nth_prior = 0; if (len == 40 && !get_sha1_hex(str, sha1)) { - refs_found = dwim_ref(str, len, tmp_sha1, &real_ref); - if (refs_found > 0 && warn_ambiguous_refs) { - warning(warn_msg, len, str); - if (advice_object_name_warning) - fprintf(stderr, "%s\n", _(object_name_msg)); + if (warn_on_object_refname_ambiguity) { + refs_found = dwim_ref(str, len, tmp_sha1, &real_ref); + if (refs_found > 0 && warn_ambiguous_refs) { + warning(warn_msg, len, str); + if (advice_object_name_warning) + fprintf(stderr, "%s\n", _(object_name_msg)); + } + free(real_ref); } - free(real_ref); return 0; } @@ -1002,17 +1004,6 @@ int get_sha1_mb(const char *name, unsigned char *sha1) return st; } -/* parse @something syntax, when 'something' is not {.*} */ -static int interpret_empty_at(const char *name, int namelen, int len, struct strbuf *buf) -{ - if (len || name[1] == '{') - return -1; - - strbuf_reset(buf); - strbuf_add(buf, "HEAD", 4); - return 1; -} - static int reinterpret(const char *name, int namelen, int len, struct strbuf *buf) { /* we have extra data, which might need further processing */ @@ -1075,15 +1066,9 @@ int interpret_branch_name(const char *name, struct strbuf *buf) cp = strchr(name, '@'); if (!cp) return -1; - - len = interpret_empty_at(name, namelen, cp - name, buf); - if (len > 0) - return reinterpret(name, namelen, len, buf); - tmp_len = upstream_mark(cp, namelen - (cp - name)); if (!tmp_len) return -1; - len = cp + tmp_len - name; cp = xstrndup(name, cp - name); upstream = branch_get(*cp ? cp : NULL); @@ -1234,7 +1219,7 @@ static void diagnose_invalid_index_path(int stage, const char *filename) { struct stat st; - struct cache_entry *ce; + const struct cache_entry *ce; int pos; unsigned namelen = strlen(filename); unsigned fullnamelen; @@ -1328,7 +1313,7 @@ static int get_sha1_with_context_1(const char *name, */ if (name[0] == ':') { int stage = 0; - struct cache_entry *ce; + const struct cache_entry *ce; char *new_path = NULL; int pos; if (!only_to_die && namelen > 2 && name[1] == '/') { @@ -110,17 +110,12 @@ struct commit_list *get_shallow_commits(struct object_array *heads, int depth, continue; *pointer = cur_depth; } - if (cur_depth < depth) { - if (p->next) - add_object_array(&p->item->object, - NULL, &stack); - else { - commit = p->item; - cur_depth = *(int *)commit->util; - } - } else { - commit_list_insert(p->item, &result); - p->item->object.flags |= shallow_flag; + if (p->next) + add_object_array(&p->item->object, + NULL, &stack); + else { + commit = p->item; + cur_depth = *(int *)commit->util; } } } @@ -147,7 +147,6 @@ int main(int argc, char **argv) char *prog; const char **user_argv; struct commands *cmd; - int devnull_fd; int count; git_setup_gettext(); @@ -156,15 +155,10 @@ int main(int argc, char **argv) /* * Always open file descriptors 0/1/2 to avoid clobbering files - * in die(). It also avoids not messing up when the pipes are - * dup'ed onto stdin/stdout/stderr in the child processes we spawn. + * in die(). It also avoids messing up when the pipes are dup'ed + * onto stdin/stdout/stderr in the child processes we spawn. */ - devnull_fd = open("/dev/null", O_RDWR); - while (devnull_fd >= 0 && devnull_fd <= 2) - devnull_fd = dup(devnull_fd); - if (devnull_fd == -1) - die_errno("opening /dev/null failed"); - close (devnull_fd); + sanitize_stdfds(); /* * Special hack to pretend to be a CVS server diff --git a/streaming.c b/streaming.c index cabcd9d157..debe904523 100644 --- a/streaming.c +++ b/streaming.c @@ -111,11 +111,11 @@ static enum input_source istream_source(const unsigned char *sha1, unsigned long size; int status; + oi->typep = type; oi->sizep = &size; status = sha1_object_info_extended(sha1, oi); if (status < 0) return stream_error; - *type = status; switch (oi->whence) { case OI_LOOSE: @@ -135,7 +135,7 @@ struct git_istream *open_istream(const unsigned char *sha1, struct stream_filter *filter) { struct git_istream *st; - struct object_info oi; + struct object_info oi = {NULL}; const unsigned char *real = lookup_replace_object(sha1); enum input_source src = istream_source(real, type, &oi); @@ -149,7 +149,7 @@ struct git_istream *open_istream(const unsigned char *sha1, return NULL; } } - if (st && filter) { + if (filter) { /* Add "&& !is_null_stream_filter(filter)" for performance */ struct git_istream *nst = attach_stream_filter(st, filter); if (!nst) diff --git a/submodule.c b/submodule.c index 0494492bd0..1905d75b2b 100644 --- a/submodule.c +++ b/submodule.c @@ -252,6 +252,9 @@ int parse_submodule_config_option(const char *var, const char *value) return 0; if (!strcmp(key, "path")) { + if (!value) + return config_error_nonbool(var); + config = unsorted_string_list_lookup(&config_name_for_path, value); if (config) free(config->util); @@ -269,6 +272,9 @@ int parse_submodule_config_option(const char *var, const char *value) } else if (!strcmp(key, "ignore")) { char *name_cstr; + if (!value) + return config_error_nonbool(var); + if (strcmp(value, "untracked") && strcmp(value, "dirty") && strcmp(value, "all") && strcmp(value, "none")) { warning("Invalid parameter \"%s\" for config option \"submodule.%s.ignore\"", value, var); @@ -742,7 +748,7 @@ int fetch_populated_submodules(const struct argv_array *options, struct strbuf submodule_path = STRBUF_INIT; struct strbuf submodule_git_dir = STRBUF_INIT; struct strbuf submodule_prefix = STRBUF_INIT; - struct cache_entry *ce = active_cache[i]; + const struct cache_entry *ce = active_cache[i]; const char *git_dir, *name, *default_argv; if (!S_ISGITLINK(ce->ce_mode)) diff --git a/t/annotate-tests.sh b/t/annotate-tests.sh index c56a77d237..99caa42f5c 100644 --- a/t/annotate-tests.sh +++ b/t/annotate-tests.sh @@ -2,11 +2,21 @@ # sourced from t8001-annotate.sh and t8002-blame.sh. check_count () { - head= - case "$1" in -h) head="$2"; shift; shift ;; esac - echo "$PROG file $head" >&4 - $PROG file $head >.result || return 1 - cat .result | perl -e ' + head= && + file='file' && + options= && + while : + do + case "$1" in + -h) head="$2"; shift; shift ;; + -f) file="$2"; shift; shift ;; + -*) options="$options $1"; shift ;; + *) break ;; + esac + done && + echo "$PROG $options $file $head" >&4 && + $PROG $options $file $head >actual && + perl -e ' my %expect = (@ARGV); my %count = map { $_ => 0 } keys %expect; while (<STDIN>) { @@ -31,107 +41,492 @@ check_count () { print STDERR "Author $author (expected $value, attributed $count) $ok\n"; } exit($bad); - ' "$@" + ' "$@" <actual } -test_expect_success \ - 'prepare reference tree' \ - 'echo "1A quick brown fox jumps over the" >file && - echo "lazy dog" >>file && - git add file && - GIT_AUTHOR_NAME="A" GIT_AUTHOR_EMAIL="A@test.git" git commit -a -m "Initial."' - -test_expect_success \ - 'check all lines blamed on A' \ - 'check_count A 2' - -test_expect_success \ - 'Setup new lines blamed on B' \ - 'echo "2A quick brown fox jumps over the" >>file && - echo "lazy dog" >> file && - GIT_AUTHOR_NAME="B" GIT_AUTHOR_EMAIL="B@test.git" git commit -a -m "Second."' - -test_expect_success \ - 'Two lines blamed on A, two on B' \ - 'check_count A 2 B 2' - -test_expect_success \ - 'merge-setup part 1' \ - 'git checkout -b branch1 master && - echo "3A slow green fox jumps into the" >> file && - echo "well." >> file && - GIT_AUTHOR_NAME="B1" GIT_AUTHOR_EMAIL="B1@test.git" git commit -a -m "Branch1-1"' - -test_expect_success \ - 'Two lines blamed on A, two on B, two on B1' \ - 'check_count A 2 B 2 B1 2' - -test_expect_success \ - 'merge-setup part 2' \ - 'git checkout -b branch2 master && - sed -e "s/2A quick brown/4A quick brown lazy dog/" < file > file.new && - mv file.new file && - GIT_AUTHOR_NAME="B2" GIT_AUTHOR_EMAIL="B2@test.git" git commit -a -m "Branch2-1"' - -test_expect_success \ - 'Two lines blamed on A, one on B, one on B2' \ - 'check_count A 2 B 1 B2 1' - -test_expect_success \ - 'merge-setup part 3' \ - 'git pull . branch1' - -test_expect_success \ - 'Two lines blamed on A, one on B, two on B1, one on B2' \ - 'check_count A 2 B 1 B1 2 B2 1' - -test_expect_success \ - 'Annotating an old revision works' \ - 'check_count -h master A 2 B 2' - -test_expect_success \ - 'Annotating an old revision works' \ - 'check_count -h master^ A 2' - -test_expect_success \ - 'merge-setup part 4' \ - 'echo "evil merge." >>file && - git commit -a --amend' - -test_expect_success \ - 'Two lines blamed on A, one on B, two on B1, one on B2, one on A U Thor' \ - 'check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1' - -test_expect_success \ - 'an incomplete line added' \ - 'echo "incomplete" | tr -d "\\012" >>file && - GIT_AUTHOR_NAME="C" GIT_AUTHOR_EMAIL="C@test.git" git commit -a -m "Incomplete"' - -test_expect_success \ - 'With incomplete lines.' \ - 'check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1 C 1' - -test_expect_success \ - 'some edit' \ - 'mv file file.orig && - { - cat file.orig && - echo - } | sed -e "s/^3A/99/" -e "/^1A/d" -e "/^incomplete/d" > file && - echo "incomplete" | tr -d "\\012" >>file && - GIT_AUTHOR_NAME="D" GIT_AUTHOR_EMAIL="D@test.git" git commit -a -m "edit"' - -test_expect_success \ - 'some edit' \ - 'check_count A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1' - -test_expect_success \ - 'an obfuscated email added' \ - 'echo "No robots allowed" > file.new && - cat file >> file.new && - mv file.new file && - GIT_AUTHOR_NAME="E" GIT_AUTHOR_EMAIL="E at test dot git" git commit -a -m "norobots"' - -test_expect_success \ - 'obfuscated email parsed' \ - 'check_count A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1' +test_expect_success 'setup A lines' ' + echo "1A quick brown fox jumps over the" >file && + echo "lazy dog" >>file && + git add file && + GIT_AUTHOR_NAME="A" GIT_AUTHOR_EMAIL="A@test.git" \ + git commit -a -m "Initial." +' + +test_expect_success 'blame 1 author' ' + check_count A 2 +' + +test_expect_success 'setup B lines' ' + echo "2A quick brown fox jumps over the" >>file && + echo "lazy dog" >>file && + GIT_AUTHOR_NAME="B" GIT_AUTHOR_EMAIL="B@test.git" \ + git commit -a -m "Second." +' + +test_expect_success 'blame 2 authors' ' + check_count A 2 B 2 +' + +test_expect_success 'setup B1 lines (branch1)' ' + git checkout -b branch1 master && + echo "3A slow green fox jumps into the" >>file && + echo "well." >>file && + GIT_AUTHOR_NAME="B1" GIT_AUTHOR_EMAIL="B1@test.git" \ + git commit -a -m "Branch1-1" +' + +test_expect_success 'blame 2 authors + 1 branch1 author' ' + check_count A 2 B 2 B1 2 +' + +test_expect_success 'setup B2 lines (branch2)' ' + git checkout -b branch2 master && + sed -e "s/2A quick brown/4A quick brown lazy dog/" <file >file.new && + mv file.new file && + GIT_AUTHOR_NAME="B2" GIT_AUTHOR_EMAIL="B2@test.git" \ + git commit -a -m "Branch2-1" +' + +test_expect_success 'blame 2 authors + 1 branch2 author' ' + check_count A 2 B 1 B2 1 +' + +test_expect_success 'merge branch1 & branch2' ' + git pull . branch1 +' + +test_expect_success 'blame 2 authors + 2 merged-in authors' ' + check_count A 2 B 1 B1 2 B2 1 +' + +test_expect_success 'blame ancestor' ' + check_count -h master A 2 B 2 +' + +test_expect_success 'blame great-ancestor' ' + check_count -h master^ A 2 +' + +test_expect_success 'setup evil merge' ' + echo "evil merge." >>file && + git commit -a --amend +' + +test_expect_success 'blame evil merge' ' + check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1 +' + +test_expect_success 'setup incomplete line' ' + echo "incomplete" | tr -d "\\012" >>file && + GIT_AUTHOR_NAME="C" GIT_AUTHOR_EMAIL="C@test.git" \ + git commit -a -m "Incomplete" +' + +test_expect_success 'blame incomplete line' ' + check_count A 2 B 1 B1 2 B2 1 "A U Thor" 1 C 1 +' + +test_expect_success 'setup edits' ' + mv file file.orig && + { + cat file.orig && + echo + } | sed -e "s/^3A/99/" -e "/^1A/d" -e "/^incomplete/d" >file && + echo "incomplete" | tr -d "\\012" >>file && + GIT_AUTHOR_NAME="D" GIT_AUTHOR_EMAIL="D@test.git" \ + git commit -a -m "edit" +' + +test_expect_success 'blame edits' ' + check_count A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 +' + +test_expect_success 'setup obfuscated email' ' + echo "No robots allowed" >file.new && + cat file >>file.new && + mv file.new file && + GIT_AUTHOR_NAME="E" GIT_AUTHOR_EMAIL="E at test dot git" \ + git commit -a -m "norobots" +' + +test_expect_success 'blame obfuscated email' ' + check_count A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1 +' + +test_expect_success 'blame -L 1 (all)' ' + check_count -L1 A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1 +' + +test_expect_success 'blame -L , (all)' ' + check_count -L, A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1 +' + +test_expect_success 'blame -L X (X to end)' ' + check_count -L5 B1 1 C 1 D 1 "A U Thor" 1 +' + +test_expect_success 'blame -L X, (X to end)' ' + check_count -L5, B1 1 C 1 D 1 "A U Thor" 1 +' + +test_expect_success 'blame -L ,Y (up to Y)' ' + check_count -L,3 A 1 B2 1 E 1 +' + +test_expect_success 'blame -L X,X' ' + check_count -L3,3 B2 1 +' + +test_expect_success 'blame -L X,Y' ' + check_count -L3,6 B 1 B1 1 B2 1 D 1 +' + +test_expect_success 'blame -L Y,X (undocumented)' ' + check_count -L6,3 B 1 B1 1 B2 1 D 1 +' + +test_expect_success 'blame -L -X' ' + test_must_fail $PROG -L-1 file +' + +test_expect_success 'blame -L 0' ' + test_must_fail $PROG -L0 file +' + +test_expect_success 'blame -L ,0' ' + test_must_fail $PROG -L,0 file +' + +test_expect_success 'blame -L ,+0' ' + test_must_fail $PROG -L,+0 file +' + +test_expect_success 'blame -L X,+0' ' + test_must_fail $PROG -L1,+0 file +' + +test_expect_success 'blame -L X,+1' ' + check_count -L3,+1 B2 1 +' + +test_expect_success 'blame -L X,+N' ' + check_count -L3,+4 B 1 B1 1 B2 1 D 1 +' + +test_expect_success 'blame -L ,-0' ' + test_must_fail $PROG -L,-0 file +' + +test_expect_success 'blame -L X,-0' ' + test_must_fail $PROG -L1,-0 file +' + +test_expect_success 'blame -L X,-1' ' + check_count -L3,-1 B2 1 +' + +test_expect_success 'blame -L X,-N' ' + check_count -L6,-4 B 1 B1 1 B2 1 D 1 +' + +test_expect_success 'blame -L /RE/ (RE to end)' ' + check_count -L/evil/ C 1 "A U Thor" 1 +' + +test_expect_success 'blame -L /RE/,/RE2/' ' + check_count -L/robot/,/green/ A 1 B 1 B2 1 D 1 E 1 +' + +test_expect_success 'blame -L X,/RE/' ' + check_count -L5,/evil/ B1 1 D 1 "A U Thor" 1 +' + +test_expect_success 'blame -L /RE/,Y' ' + check_count -L/99/,7 B1 1 D 1 "A U Thor" 1 +' + +test_expect_success 'blame -L /RE/,+N' ' + check_count -L/99/,+3 B1 1 D 1 "A U Thor" 1 +' + +test_expect_success 'blame -L /RE/,-N' ' + check_count -L/99/,-3 B 1 B2 1 D 1 +' + +# 'file' ends with an incomplete line, so 'wc' reports one fewer lines than +# git-blame sees, hence the last line is actually $(wc...)+1. +test_expect_success 'blame -L X (X == nlines)' ' + n=$(expr $(wc -l <file) + 1) && + check_count -L$n C 1 +' + +test_expect_success 'blame -L X (X == nlines + 1)' ' + n=$(expr $(wc -l <file) + 2) && + test_must_fail $PROG -L$n file +' + +test_expect_success 'blame -L X (X > nlines)' ' + test_must_fail $PROG -L12345 file +' + +test_expect_success 'blame -L ,Y (Y == nlines)' ' + n=$(expr $(wc -l <file) + 1) && + check_count -L,$n A 1 B 1 B1 1 B2 1 "A U Thor" 1 C 1 D 1 E 1 +' + +test_expect_success 'blame -L ,Y (Y == nlines + 1)' ' + n=$(expr $(wc -l <file) + 2) && + test_must_fail $PROG -L,$n file +' + +test_expect_success 'blame -L ,Y (Y > nlines)' ' + test_must_fail $PROG -L,12345 file +' + +test_expect_success 'blame -L multiple (disjoint)' ' + check_count -L2,3 -L6,7 A 1 B1 1 B2 1 "A U Thor" 1 +' + +test_expect_success 'blame -L multiple (disjoint: unordered)' ' + check_count -L6,7 -L2,3 A 1 B1 1 B2 1 "A U Thor" 1 +' + +test_expect_success 'blame -L multiple (adjacent)' ' + check_count -L2,3 -L4,5 A 1 B 1 B2 1 D 1 +' + +test_expect_success 'blame -L multiple (adjacent: unordered)' ' + check_count -L4,5 -L2,3 A 1 B 1 B2 1 D 1 +' + +test_expect_success 'blame -L multiple (overlapping)' ' + check_count -L2,4 -L3,5 A 1 B 1 B2 1 D 1 +' + +test_expect_success 'blame -L multiple (overlapping: unordered)' ' + check_count -L3,5 -L2,4 A 1 B 1 B2 1 D 1 +' + +test_expect_success 'blame -L multiple (superset/subset)' ' + check_count -L2,8 -L3,5 A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1 +' + +test_expect_success 'blame -L multiple (superset/subset: unordered)' ' + check_count -L3,5 -L2,8 A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1 +' + +test_expect_success 'blame -L /RE/ (relative)' ' + check_count -L3,3 -L/fox/ B1 1 B2 1 C 1 D 1 "A U Thor" 1 +' + +test_expect_success 'blame -L /RE/ (relative: no preceding range)' ' + check_count -L/dog/ A 1 B 1 B1 1 B2 1 C 1 D 1 "A U Thor" 1 +' + +test_expect_success 'blame -L /RE/ (relative: adjacent)' ' + check_count -L1,1 -L/dog/,+1 A 1 E 1 +' + +test_expect_success 'blame -L /RE/ (relative: not found)' ' + test_must_fail $PROG -L4,4 -L/dog/ file +' + +test_expect_success 'blame -L /RE/ (relative: end-of-file)' ' + test_must_fail $PROG -L, -L/$/ file +' + +test_expect_success 'blame -L ^/RE/ (absolute)' ' + check_count -L3,3 -L^/dog/,+2 A 1 B2 1 +' + +test_expect_success 'blame -L ^/RE/ (absolute: no preceding range)' ' + check_count -L^/dog/,+2 A 1 B2 1 +' + +test_expect_success 'blame -L ^/RE/ (absolute: not found)' ' + test_must_fail $PROG -L4,4 -L^/tambourine/ file +' + +test_expect_success 'blame -L ^/RE/ (absolute: end-of-file)' ' + n=$(expr $(wc -l <file) + 1) && + check_count -L$n -L^/$/,+2 A 1 C 1 E 1 +' + +test_expect_success 'setup -L :regex' ' + tr Q "\\t" >hello.c <<-\EOF && + int main(int argc, const char *argv[]) + { + Qputs("hello"); + } + EOF + git add hello.c && + GIT_AUTHOR_NAME="F" GIT_AUTHOR_EMAIL="F@test.git" \ + git commit -m "hello" && + + mv hello.c hello.orig && + sed -e "/}/ {x; s/$/Qputs(\"goodbye\");/; G;}" <hello.orig | + tr Q "\\t" >hello.c && + GIT_AUTHOR_NAME="G" GIT_AUTHOR_EMAIL="G@test.git" \ + git commit -a -m "goodbye" && + + mv hello.c hello.orig && + echo "#include <stdio.h>" >hello.c && + cat hello.orig >>hello.c && + tr Q "\\t" >>hello.c <<-\EOF + void mail() + { + Qputs("mail"); + } + EOF + GIT_AUTHOR_NAME="H" GIT_AUTHOR_EMAIL="H@test.git" \ + git commit -a -m "mail" +' + +test_expect_success 'blame -L :literal' ' + check_count -f hello.c -L:main F 4 G 1 +' + +test_expect_success 'blame -L :regex' ' + check_count -f hello.c "-L:m[a-z][a-z]l" H 4 +' + +test_expect_success 'blame -L :nomatch' ' + test_must_fail $PROG -L:nomatch hello.c +' + +test_expect_success 'blame -L :RE (relative)' ' + check_count -f hello.c -L3,3 -L:ma.. F 1 H 4 +' + +test_expect_success 'blame -L :RE (relative: no preceding range)' ' + check_count -f hello.c -L:ma.. F 4 G 1 +' + +test_expect_success 'blame -L :RE (relative: not found)' ' + test_must_fail $PROG -L3,3 -L:tambourine hello.c +' + +test_expect_success 'blame -L :RE (relative: end-of-file)' ' + test_must_fail $PROG -L, -L:main hello.c +' + +test_expect_success 'blame -L ^:RE (absolute)' ' + check_count -f hello.c -L3,3 -L^:ma.. F 4 G 1 +' + +test_expect_success 'blame -L ^:RE (absolute: no preceding range)' ' + check_count -f hello.c -L^:ma.. F 4 G 1 +' + +test_expect_success 'blame -L ^:RE (absolute: not found)' ' + test_must_fail $PROG -L4,4 -L^:tambourine hello.c +' + +test_expect_success 'blame -L ^:RE (absolute: end-of-file)' ' + n=$(printf "%d" $(wc -l <hello.c)) && + check_count -f hello.c -L$n -L^:ma.. F 4 G 1 H 1 +' + +test_expect_success 'setup incremental' ' + ( + GIT_AUTHOR_NAME=I && + export GIT_AUTHOR_NAME && + GIT_AUTHOR_EMAIL=I@test.git && + export GIT_AUTHOR_EMAIL && + >incremental && + git add incremental && + git commit -m "step 0" && + printf "partial" >>incremental && + git commit -a -m "step 0.5" && + echo >>incremental && + git commit -a -m "step 1" + ) +' + +test_expect_success 'blame empty' ' + check_count -h HEAD^^ -f incremental +' + +test_expect_success 'blame -L 0 empty' ' + test_must_fail $PROG -L0 incremental HEAD^^ +' + +test_expect_success 'blame -L 1 empty' ' + test_must_fail $PROG -L1 incremental HEAD^^ +' + +test_expect_success 'blame -L 2 empty' ' + test_must_fail $PROG -L2 incremental HEAD^^ +' + +test_expect_success 'blame half' ' + check_count -h HEAD^ -f incremental I 1 +' + +test_expect_success 'blame -L 0 half' ' + test_must_fail $PROG -L0 incremental HEAD^ +' + +test_expect_success 'blame -L 1 half' ' + check_count -h HEAD^ -f incremental -L1 I 1 +' + +test_expect_success 'blame -L 2 half' ' + test_must_fail $PROG -L2 incremental HEAD^ +' + +test_expect_success 'blame -L 3 half' ' + test_must_fail $PROG -L3 incremental HEAD^ +' + +test_expect_success 'blame full' ' + check_count -f incremental I 1 +' + +test_expect_success 'blame -L 0 full' ' + test_must_fail $PROG -L0 incremental +' + +test_expect_success 'blame -L 1 full' ' + check_count -f incremental -L1 I 1 +' + +test_expect_success 'blame -L 2 full' ' + test_must_fail $PROG -L2 incremental +' + +test_expect_success 'blame -L 3 full' ' + test_must_fail $PROG -L3 incremental +' + +test_expect_success 'blame -L' ' + test_must_fail $PROG -L file +' + +test_expect_success 'blame -L X,+' ' + test_must_fail $PROG -L1,+ file +' + +test_expect_success 'blame -L X,-' ' + test_must_fail $PROG -L1,- file +' + +test_expect_success 'blame -L X (non-numeric X)' ' + test_must_fail $PROG -LX file +' + +test_expect_success 'blame -L X,Y (non-numeric Y)' ' + test_must_fail $PROG -L1,Y file +' + +test_expect_success 'blame -L X,+N (non-numeric N)' ' + test_must_fail $PROG -L1,+N file +' + +test_expect_success 'blame -L X,-N (non-numeric N)' ' + test_must_fail $PROG -L1,-N file +' + +test_expect_success 'blame -L ,^/RE/' ' + test_must_fail $PROG -L1,^/99/ file +' diff --git a/t/gitweb-lib.sh b/t/gitweb-lib.sh index ae2dc4604f..9e381e000f 100644 --- a/t/gitweb-lib.sh +++ b/t/gitweb-lib.sh @@ -36,7 +36,7 @@ EOF # You can set the GITWEB_TEST_INSTALLED environment variable to # the gitwebdir (the directory where gitweb is installed / deployed to) - # of an existing gitweb instalation to test that installation, + # of an existing gitweb installation to test that installation, # or simply to pathname of installed gitweb script. if test -n "$GITWEB_TEST_INSTALLED" ; then if test -d $GITWEB_TEST_INSTALLED; then diff --git a/t/lib-httpd.sh b/t/lib-httpd.sh index 895b9258b0..dab405d574 100644 --- a/t/lib-httpd.sh +++ b/t/lib-httpd.sh @@ -141,10 +141,11 @@ stop_httpd() { -f "$TEST_PATH/apache.conf" $HTTPD_PARA -k stop } -test_http_push_nonff() { +test_http_push_nonff () { REMOTE_REPO=$1 LOCAL_REPO=$2 BRANCH=$3 + EXPECT_CAS_RESULT=${4-failure} test_expect_success 'non-fast-forward push fails' ' cd "$REMOTE_REPO" && @@ -167,6 +168,22 @@ test_http_push_nonff() { test_expect_success 'non-fast-forward push shows help message' ' test_i18ngrep "Updates were rejected because" output ' + + test_expect_failure 'force with lease aka cas' ' + HEAD=$( cd "$REMOTE_REPO" && git rev-parse --verify HEAD ) && + test_when_finished '\'' + (cd "$REMOTE_REPO" && git update-ref HEAD "$HEAD") + '\'' && + ( + cd "$LOCAL_REPO" && + git push -v --force-with-lease=$BRANCH:$HEAD origin + ) && + git rev-parse --verify "$BRANCH" >expect && + ( + cd "$REMOTE_REPO" && git rev-parse --verify HEAD + ) >actual && + test_cmp expect actual + ' } setup_askpass_helper() { diff --git a/t/lib-httpd/apache.conf b/t/lib-httpd/apache.conf index dd17e3a09d..397c480401 100644 --- a/t/lib-httpd/apache.conf +++ b/t/lib-httpd/apache.conf @@ -22,6 +22,9 @@ ErrorLog error.log <IfModule !mod_version.c> LoadModule version_module modules/mod_version.so </IfModule> +<IfModule !mod_headers.c> + LoadModule headers_module modules/mod_headers.so +</IfModule> <IfVersion < 2.4> LockFile accept.lock @@ -87,6 +90,11 @@ Alias /auth/dumb/ www/auth/dumb/ SetEnv GIT_HTTP_EXPORT_ALL SetEnv GIT_NAMESPACE ns </LocationMatch> +<LocationMatch /smart_cookies/> + SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH} + SetEnv GIT_HTTP_EXPORT_ALL + Header set Set-Cookie name=value +</LocationMatch> ScriptAliasMatch /smart_*[^/]*/(.*) ${GIT_EXEC_PATH}/git-http-backend/$1 ScriptAlias /broken_smart/ broken-smart-http.sh/ <Directory ${GIT_EXEC_PATH}> diff --git a/t/lib-t6000.sh b/t/lib-t6000.sh index 4ffd90127e..3f2d873fec 100644 --- a/t/lib-t6000.sh +++ b/t/lib-t6000.sh @@ -34,7 +34,7 @@ save_tag () { mv sed.script.tmp sed.script } -# Replace unhelpful sha1 hashses with their symbolic equivalents +# Replace unhelpful sha1 hashes with their symbolic equivalents entag () { sed -f sed.script } diff --git a/t/perf/perf-lib.sh b/t/perf/perf-lib.sh index c61d5351e1..f4eecaa171 100644 --- a/t/perf/perf-lib.sh +++ b/t/perf/perf-lib.sh @@ -161,7 +161,7 @@ test_perf () { echo "$test_count" >>"$perf_results_dir"/$base.subtests echo "$1" >"$perf_results_dir"/$base.$test_count.descr if test -z "$verbose"; then - echo -n "perf $test_count - $1:" + printf "%s" "perf $test_count - $1:" else echo "perf $test_count - $1:" fi @@ -170,7 +170,7 @@ test_perf () { if test_run_perf_ "$2" then if test -z "$verbose"; then - echo -n " $i" + printf " %s" "$i" else echo "* timing run $i/$GIT_PERF_REPEAT_COUNT:" fi diff --git a/t/t0008-ignores.sh b/t/t0008-ignores.sh index 2ced8e9729..96f40fedfb 100755 --- a/t/t0008-ignores.sh +++ b/t/t0008-ignores.sh @@ -697,13 +697,21 @@ test_expect_success PIPE 'streaming support for --stdin' ' # shell, and then echo to the fd. We make sure to close it at # the end, so that the subprocess does get EOF and dies # properly. + # + # Similarly, we must keep "out" open so that check-ignore does + # not ever get SIGPIPE trying to write to us. Not only would that + # produce incorrect results, but then there would be no writer on the + # other end of the pipe, and we would potentially block forever trying + # to open it. exec 9>in && + exec 8<out && test_when_finished "exec 9>&-" && + test_when_finished "exec 8<&-" && echo >&9 one && - read response <out && + read response <&8 && echo "$response" | grep "^\.gitignore:1:one one" && echo >&9 two && - read response <out && + read response <&8 && echo "$response" | grep "^:: two" ' diff --git a/t/t0060-path-utils.sh b/t/t0060-path-utils.sh index 09a42a428e..3a48de20d8 100755 --- a/t/t0060-path-utils.sh +++ b/t/t0060-path-utils.sh @@ -8,8 +8,15 @@ test_description='Test various path utilities' . ./test-lib.sh norm_path() { + expected=$(test-path-utils mingw_path "$2") test_expect_success $3 "normalize path: $1 => $2" \ - "test \"\$(test-path-utils normalize_path_copy '$1')\" = '$2'" + "test \"\$(test-path-utils normalize_path_copy '$1')\" = '$expected'" +} + +relative_path() { + expected=$(test-path-utils mingw_path "$3") + test_expect_success $4 "relative path: $1 $2 => $3" \ + "test \"\$(test-path-utils relative_path '$1' '$2')\" = '$expected'" } # On Windows, we are using MSYS's bash, which mangles the paths. @@ -34,8 +41,8 @@ ancestor() { test \"\$actual\" = '$expected'" } -# Absolute path tests must be skipped on Windows because due to path mangling -# the test program never sees a POSIX-style absolute path +# Some absolute path tests should be skipped on Windows due to path mangling +# on POSIX-style absolute paths case $(uname -s) in *MINGW*) ;; @@ -68,30 +75,30 @@ norm_path d1/s1//../s2/../../d2 d2 norm_path d1/.../d2 d1/.../d2 norm_path d1/..././../d2 d1/d2 -norm_path / / POSIX +norm_path / / norm_path // / POSIX norm_path /// / POSIX -norm_path /. / POSIX +norm_path /. / norm_path /./ / POSIX norm_path /./.. ++failed++ POSIX -norm_path /../. ++failed++ POSIX +norm_path /../. ++failed++ norm_path /./../.// ++failed++ POSIX norm_path /dir/.. / POSIX norm_path /dir/sub/../.. / POSIX norm_path /dir/sub/../../.. ++failed++ POSIX -norm_path /dir /dir POSIX -norm_path /dir// /dir/ POSIX -norm_path /./dir /dir POSIX -norm_path /dir/. /dir/ POSIX -norm_path /dir///./ /dir/ POSIX -norm_path /dir//sub/.. /dir/ POSIX -norm_path /dir/sub/../ /dir/ POSIX +norm_path /dir /dir +norm_path /dir// /dir/ +norm_path /./dir /dir +norm_path /dir/. /dir/ +norm_path /dir///./ /dir/ +norm_path /dir//sub/.. /dir/ +norm_path /dir/sub/../ /dir/ norm_path //dir/sub/../. /dir/ POSIX -norm_path /dir/s1/../s2/ /dir/s2/ POSIX -norm_path /d1/s1///s2/..//../s3/ /d1/s3/ POSIX -norm_path /d1/s1//../s2/../../d2 /d2 POSIX -norm_path /d1/.../d2 /d1/.../d2 POSIX -norm_path /d1/..././../d2 /d1/d2 POSIX +norm_path /dir/s1/../s2/ /dir/s2/ +norm_path /d1/s1///s2/..//../s3/ /d1/s3/ +norm_path /d1/s1//../s2/../../d2 /d2 +norm_path /d1/.../d2 /d1/.../d2 +norm_path /d1/..././../d2 /d1/d2 ancestor / / -1 ancestor /foo / 0 @@ -183,4 +190,33 @@ test_expect_success SYMLINKS 'real path works on symlinks' ' test "$sym" = "$(test-path-utils real_path "$dir2/syml")" ' +relative_path /a/b/c/ /a/b/ c/ +relative_path /a/b/c/ /a/b c/ +relative_path /a//b//c/ //a/b// c/ POSIX +relative_path /a/b /a/b ./ +relative_path /a/b/ /a/b ./ +relative_path /a /a/b ../ +relative_path / /a/b/ ../../ +relative_path /a/c /a/b/ ../c +relative_path /a/c /a/b ../c +relative_path /x/y /a/b/ ../../x/y +relative_path /a/b "<empty>" /a/b +relative_path /a/b "<null>" /a/b +relative_path a/b/c/ a/b/ c/ +relative_path a/b/c/ a/b c/ +relative_path a/b//c a//b c +relative_path a/b/ a/b/ ./ +relative_path a/b/ a/b ./ +relative_path a a/b ../ +relative_path x/y a/b ../../x/y +relative_path a/c a/b ../c +relative_path a/b "<empty>" a/b +relative_path a/b "<null>" a/b +relative_path "<empty>" /a/b ./ +relative_path "<empty>" "<empty>" ./ +relative_path "<empty>" "<null>" ./ +relative_path "<null>" "<empty>" ./ +relative_path "<null>" "<null>" ./ +relative_path "<null>" /a/b ./ + test_done diff --git a/t/t0070-fundamental.sh b/t/t0070-fundamental.sh index 986b2a8f26..5ed69a6f56 100755 --- a/t/t0070-fundamental.sh +++ b/t/t0070-fundamental.sh @@ -25,6 +25,10 @@ test_expect_success POSIXPERM,SANITY 'mktemp to unwritable directory prints file grep "cannotwrite/test" err ' +test_expect_success 'git_mkstemps_mode does not fail if fd 0 is not open' ' + git commit --allow-empty -m message <&- +' + test_expect_success 'check for a bug in the regex routines' ' # if this test fails, re-build git with NO_REGEX=1 test-regex diff --git a/t/t1006-cat-file.sh b/t/t1006-cat-file.sh index 9cc5c6bf4d..a420742494 100755 --- a/t/t1006-cat-file.sh +++ b/t/t1006-cat-file.sh @@ -36,66 +36,54 @@ $content" ' test_expect_success "Type of $type is correct" ' - test $type = "$(git cat-file -t $sha1)" + echo $type >expect && + git cat-file -t $sha1 >actual && + test_cmp expect actual ' test_expect_success "Size of $type is correct" ' - test $size = "$(git cat-file -s $sha1)" + echo $size >expect && + git cat-file -s $sha1 >actual && + test_cmp expect actual ' test -z "$content" || test_expect_success "Content of $type is correct" ' - expect="$(maybe_remove_timestamp "$content" $no_ts)" - actual="$(maybe_remove_timestamp "$(git cat-file $type $sha1)" $no_ts)" - - if test "z$expect" = "z$actual" - then - : happy - else - echo "Oops: expected $expect" - echo "but got $actual" - false - fi + maybe_remove_timestamp "$content" $no_ts >expect && + maybe_remove_timestamp "$(git cat-file $type $sha1)" $no_ts >actual && + test_cmp expect actual ' test_expect_success "Pretty content of $type is correct" ' - expect="$(maybe_remove_timestamp "$pretty_content" $no_ts)" - actual="$(maybe_remove_timestamp "$(git cat-file -p $sha1)" $no_ts)" - if test "z$expect" = "z$actual" - then - : happy - else - echo "Oops: expected $expect" - echo "but got $actual" - false - fi + maybe_remove_timestamp "$pretty_content" $no_ts >expect && + maybe_remove_timestamp "$(git cat-file -p $sha1)" $no_ts >actual && + test_cmp expect actual ' test -z "$content" || test_expect_success "--batch output of $type is correct" ' - expect="$(maybe_remove_timestamp "$batch_output" $no_ts)" - actual="$(maybe_remove_timestamp "$(echo $sha1 | git cat-file --batch)" $no_ts)" - if test "z$expect" = "z$actual" - then - : happy - else - echo "Oops: expected $expect" - echo "but got $actual" - false - fi + maybe_remove_timestamp "$batch_output" $no_ts >expect && + maybe_remove_timestamp "$(echo $sha1 | git cat-file --batch)" $no_ts >actual && + test_cmp expect actual ' test_expect_success "--batch-check output of $type is correct" ' - expect="$sha1 $type $size" - actual="$(echo_without_newline $sha1 | git cat-file --batch-check)" - if test "z$expect" = "z$actual" - then - : happy - else - echo "Oops: expected $expect" - echo "but got $actual" - false - fi + echo "$sha1 $type $size" >expect && + echo_without_newline $sha1 | git cat-file --batch-check >actual && + test_cmp expect actual + ' + + test_expect_success "custom --batch-check format" ' + echo "$type $sha1" >expect && + echo $sha1 | git cat-file --batch-check="%(objecttype) %(objectname)" >actual && + test_cmp expect actual + ' + + test_expect_success '--batch-check with %(rest)' ' + echo "$type this is some extra content" >expect && + echo "$sha1 this is some extra content" | + git cat-file --batch-check="%(objecttype) %(rest)" >actual && + test_cmp expect actual ' } @@ -110,6 +98,14 @@ test_expect_success "setup" ' run_tests 'blob' $hello_sha1 $hello_size "$hello_content" "$hello_content" +test_expect_success '--batch-check without %(rest) considers whole line' ' + echo "$hello_sha1 blob $hello_size" >expect && + git update-index --add --cacheinfo 100644 $hello_sha1 "white space" && + test_when_finished "git update-index --remove \"white space\"" && + echo ":white space" | git cat-file --batch-check >actual && + test_cmp expect actual +' + tree_sha1=$(git write-tree) tree_size=33 tree_pretty_content="100644 blob $hello_sha1 hello" diff --git a/t/t1307-config-blob.sh b/t/t1307-config-blob.sh new file mode 100755 index 0000000000..fdc257e66f --- /dev/null +++ b/t/t1307-config-blob.sh @@ -0,0 +1,70 @@ +#!/bin/sh + +test_description='support for reading config from a blob' +. ./test-lib.sh + +test_expect_success 'create config blob' ' + cat >config <<-\EOF && + [some] + value = 1 + EOF + git add config && + git commit -m foo +' + +test_expect_success 'list config blob contents' ' + echo some.value=1 >expect && + git config --blob=HEAD:config --list >actual && + test_cmp expect actual +' + +test_expect_success 'fetch value from blob' ' + echo true >expect && + git config --blob=HEAD:config --bool some.value >actual && + test_cmp expect actual +' + +test_expect_success 'reading non-existing value from blob is an error' ' + test_must_fail git config --blob=HEAD:config non.existing +' + +test_expect_success 'reading from blob and file is an error' ' + test_must_fail git config --blob=HEAD:config --system --list +' + +test_expect_success 'reading from missing ref is an error' ' + test_must_fail git config --blob=HEAD:doesnotexist --list +' + +test_expect_success 'reading from non-blob is an error' ' + test_must_fail git config --blob=HEAD --list +' + +test_expect_success 'setting a value in a blob is an error' ' + test_must_fail git config --blob=HEAD:config some.value foo +' + +test_expect_success 'deleting a value in a blob is an error' ' + test_must_fail git config --blob=HEAD:config --unset some.value +' + +test_expect_success 'editing a blob is an error' ' + test_must_fail git config --blob=HEAD:config --edit +' + +test_expect_success 'parse errors in blobs are properly attributed' ' + cat >config <<-\EOF && + [some] + value = " + EOF + git add config && + git commit -m broken && + + test_must_fail git config --blob=HEAD:config some.value 2>err && + + # just grep for our token as the exact error message is likely to + # change or be internationalized + grep "HEAD:config" err +' + +test_done diff --git a/t/t1403-show-ref.sh b/t/t1403-show-ref.sh new file mode 100755 index 0000000000..3e500ed7da --- /dev/null +++ b/t/t1403-show-ref.sh @@ -0,0 +1,167 @@ +#!/bin/sh + +test_description='show-ref' +. ./test-lib.sh + +test_expect_success setup ' + test_commit A && + git tag -f -a -m "annotated A" A && + git checkout -b side && + test_commit B && + git tag -f -a -m "annotated B" B && + git checkout master && + test_commit C && + git branch B A^0 +' + +test_expect_success 'show-ref' ' + echo $(git rev-parse refs/tags/A) refs/tags/A >expect && + + git show-ref A >actual && + test_cmp expect actual && + + git show-ref tags/A >actual && + test_cmp expect actual && + + git show-ref refs/tags/A >actual && + test_cmp expect actual && + + >expect && + + test_must_fail git show-ref D >actual + test_cmp expect actual +' + +test_expect_success 'show-ref -q' ' + >expect && + + git show-ref -q A >actual && + test_cmp expect actual && + + git show-ref -q tags/A >actual && + test_cmp expect actual && + + git show-ref -q refs/tags/A >actual && + test_cmp expect actual && + + test_must_fail git show-ref -q D >actual && + test_cmp expect actual +' + +test_expect_success 'show-ref --verify' ' + echo $(git rev-parse refs/tags/A) refs/tags/A >expect && + + git show-ref --verify refs/tags/A >actual && + test_cmp expect actual && + + >expect && + + test_must_fail git show-ref --verify A >actual && + test_cmp expect actual && + + test_must_fail git show-ref --verify tags/A >actual && + test_cmp expect actual && + + test_must_fail git show-ref --verify D >actual + test_cmp expect actual +' + +test_expect_success 'show-ref --verify -q' ' + >expect && + + git show-ref --verify -q refs/tags/A >actual && + test_cmp expect actual && + + test_must_fail git show-ref --verify -q A >actual && + test_cmp expect actual && + + test_must_fail git show-ref --verify -q tags/A >actual && + test_cmp expect actual && + + test_must_fail git show-ref --verify -q D >actual + test_cmp expect actual +' + +test_expect_success 'show-ref -d' ' + { + echo $(git rev-parse refs/tags/A) refs/tags/A && + echo $(git rev-parse refs/tags/A^0) "refs/tags/A^{}" + echo $(git rev-parse refs/tags/C) refs/tags/C + } >expect && + git show-ref -d A C >actual && + test_cmp expect actual && + + git show-ref -d tags/A tags/C >actual && + test_cmp expect actual && + + git show-ref -d refs/tags/A refs/tags/C >actual && + test_cmp expect actual && + + echo $(git rev-parse refs/heads/master) refs/heads/master >expect && + git show-ref -d master >actual && + test_cmp expect actual && + + git show-ref -d heads/master >actual && + test_cmp expect actual && + + git show-ref -d refs/heads/master >actual && + test_cmp expect actual + + git show-ref -d --verify refs/heads/master >actual && + test_cmp expect actual + + >expect && + + test_must_fail git show-ref -d --verify master >actual && + test_cmp expect actual && + + test_must_fail git show-ref -d --verify heads/master >actual && + test_cmp expect actual + +' + +test_expect_success 'show-ref --heads, --tags, --head, pattern' ' + for branch in B master side + do + echo $(git rev-parse refs/heads/$branch) refs/heads/$branch + done >expect.heads && + git show-ref --heads >actual && + test_cmp expect.heads actual && + + for tag in A B C + do + echo $(git rev-parse refs/tags/$tag) refs/tags/$tag + done >expect.tags && + git show-ref --tags >actual && + test_cmp expect.tags actual && + + cat expect.heads expect.tags >expect && + git show-ref --heads --tags >actual && + test_cmp expect actual && + + { + echo $(git rev-parse HEAD) HEAD && + cat expect.heads expect.tags + } >expect && + git show-ref --heads --tags --head >actual && + test_cmp expect actual && + + { + echo $(git rev-parse HEAD) HEAD && + echo $(git rev-parse refs/heads/B) refs/heads/B + echo $(git rev-parse refs/tags/B) refs/tags/B + } >expect && + git show-ref --head B >actual && + test_cmp expect actual && + + { + echo $(git rev-parse HEAD) HEAD && + echo $(git rev-parse refs/heads/B) refs/heads/B + echo $(git rev-parse refs/tags/B) refs/tags/B + echo $(git rev-parse refs/tags/B^0) "refs/tags/B^{}" + } >expect && + git show-ref --head -d B >actual && + test_cmp expect actual +' + +test_done diff --git a/t/t1411-reflog-show.sh b/t/t1411-reflog-show.sh index 9a105fe21f..6f47c0dd0e 100755 --- a/t/t1411-reflog-show.sh +++ b/t/t1411-reflog-show.sh @@ -144,4 +144,26 @@ test_expect_success 'empty reflog file' ' test_cmp expect actual ' +# This guards against the alternative of showing the diffs vs. the +# reflog ancestor. The reflog used is designed to list the commits +# more than once, so as to exercise the corresponding logic. +test_expect_success 'git log -g -p shows diffs vs. parents' ' + test_commit two && + git branch flipflop && + git update-ref refs/heads/flipflop -m flip1 HEAD^ && + git update-ref refs/heads/flipflop -m flop1 HEAD && + git update-ref refs/heads/flipflop -m flip2 HEAD^ && + git log -g -p flipflop >reflog && + grep -v ^Reflog reflog >actual && + git log -1 -p HEAD^ >log.one && + git log -1 -p HEAD >log.two && + ( + cat log.one; echo + cat log.two; echo + cat log.one; echo + cat log.two + ) >expect && + test_cmp expect actual +' + test_done diff --git a/t/t1508-at-combinations.sh b/t/t1508-at-combinations.sh index 4db1613f8a..e5aea3b896 100755 --- a/t/t1508-at-combinations.sh +++ b/t/t1508-at-combinations.sh @@ -55,8 +55,6 @@ check "HEAD@{u}" ref refs/heads/upstream-branch check "@{u}@{1}" commit upstream-one check "@{-1}@{u}" ref refs/heads/master check "@{-1}@{u}@{1}" commit master-one -check "@" commit new-two -check "@@{u}" ref refs/heads/upstream-branch nonsense "@{u}@{-1}" nonsense "@{0}@{0}" nonsense "@{1}@{u}" diff --git a/t/t2202-add-addremove.sh b/t/t2202-add-addremove.sh index 6a8151064c..fc8b59e7f7 100755 --- a/t/t2202-add-addremove.sh +++ b/t/t2202-add-addremove.sh @@ -41,4 +41,14 @@ test_expect_success 'git add --all' ' test_cmp expect actual ' +test_expect_success 'Just "git add" is a no-op' ' + git reset --hard && + echo >will-remove && + >will-not-be-added && + git add && + git diff-index --name-status --cached HEAD >actual && + >expect && + test_cmp expect actual +' + test_done diff --git a/t/t3032-merge-recursive-options.sh b/t/t3032-merge-recursive-options.sh index 2b17311cb0..5fd7bbb652 100755 --- a/t/t3032-merge-recursive-options.sh +++ b/t/t3032-merge-recursive-options.sh @@ -14,7 +14,7 @@ test_description='merge-recursive options . ./test-lib.sh test_have_prereq SED_STRIPS_CR && SED_OPTIONS=-b -test_have_prereq MINGW && export GREP_OPTIONS=-U +test_have_prereq GREP_STRIPS_CR && export GREP_OPTIONS=-U test_expect_success 'setup' ' conflict_hunks () { diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh index 8a6ec039fe..4dbeddb0de 100755 --- a/t/t3404-rebase-interactive.sh +++ b/t/t3404-rebase-interactive.sh @@ -926,6 +926,21 @@ test_expect_success 'rebase --edit-todo can be used to modify todo' ' test L = $(git cat-file commit HEAD | sed -ne \$p) ' +test_expect_success 'rebase -i produces readable reflog' ' + git reset --hard && + git branch -f branch-reflog-test H && + git rebase -i --onto I F branch-reflog-test && + cat >expect <<-\EOF && + rebase -i (start): checkout I + rebase -i (pick): G + rebase -i (pick): H + rebase -i (finish): returning to refs/heads/branch-reflog-test + EOF + tail -n 4 .git/logs/HEAD | + sed -e "s/.* //" >actual && + test_cmp expect actual +' + test_expect_success 'rebase -i respects core.commentchar' ' git reset --hard && git checkout E^0 && @@ -961,4 +976,17 @@ test_expect_success 'rebase -i with --strategy and -X' ' test $(cat file1) = Z ' +test_expect_success 'rebase -i error on commits with \ in message' ' + current_head=$(git rev-parse HEAD) + test_when_finished "git rebase --abort; git reset --hard $current_head; rm -f error" && + test_commit TO-REMOVE will-conflict old-content && + test_commit "\temp" will-conflict new-content dummy && + ( + EDITOR=true && + export EDITOR && + test_must_fail git rebase -i HEAD^ --onto HEAD^^ 2>error + ) && + test_expect_code 1 grep " emp" error +' + test_done diff --git a/t/t3900-i18n-commit.sh b/t/t3900-i18n-commit.sh index 37ddabba2d..4bf1dbe9c9 100755 --- a/t/t3900-i18n-commit.sh +++ b/t/t3900-i18n-commit.sh @@ -34,11 +34,47 @@ test_expect_success 'no encoding header for base case' ' test z = "z$E" ' -test_expect_failure 'UTF-16 refused because of NULs' ' +test_expect_success 'UTF-16 refused because of NULs' ' echo UTF-16 >F && - git commit -a -F "$TEST_DIRECTORY"/t3900/UTF-16.txt + test_must_fail git commit -a -F "$TEST_DIRECTORY"/t3900/UTF-16.txt ' +test_expect_success 'UTF-8 invalid characters refused' ' + test_when_finished "rm -f $HOME/stderr $HOME/invalid" && + echo "UTF-8 characters" >F && + printf "Commit message\n\nInvalid surrogate:\355\240\200\n" \ + >"$HOME/invalid" && + git commit -a -F "$HOME/invalid" 2>"$HOME"/stderr && + grep "did not conform" "$HOME"/stderr +' + +test_expect_success 'UTF-8 overlong sequences rejected' ' + test_when_finished "rm -f $HOME/stderr $HOME/invalid" && + rm -f "$HOME/stderr" "$HOME/invalid" && + echo "UTF-8 overlong" >F && + printf "\340\202\251ommit message\n\nThis is not a space:\300\240\n" \ + >"$HOME/invalid" && + git commit -a -F "$HOME/invalid" 2>"$HOME"/stderr && + grep "did not conform" "$HOME"/stderr +' + +test_expect_success 'UTF-8 non-characters refused' ' + test_when_finished "rm -f $HOME/stderr $HOME/invalid" && + echo "UTF-8 non-character 1" >F && + printf "Commit message\n\nNon-character:\364\217\277\276\n" \ + >"$HOME/invalid" && + git commit -a -F "$HOME/invalid" 2>"$HOME"/stderr && + grep "did not conform" "$HOME"/stderr +' + +test_expect_success 'UTF-8 non-characters refused' ' + test_when_finished "rm -f $HOME/stderr $HOME/invalid" && + echo "UTF-8 non-character 2." >F && + printf "Commit message\n\nNon-character:\357\267\220\n" \ + >"$HOME/invalid" && + git commit -a -F "$HOME/invalid" 2>"$HOME"/stderr && + grep "did not conform" "$HOME"/stderr +' for H in ISO8859-1 eucJP ISO-2022-JP do diff --git a/t/t3900/UTF-16.txt b/t/t3900/UTF-16.txt Binary files differnew file mode 100644 index 0000000000..2257f05a99 --- /dev/null +++ b/t/t3900/UTF-16.txt diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh index 5d22f17ca2..debda7a678 100755 --- a/t/t3903-stash.sh +++ b/t/t3903-stash.sh @@ -673,22 +673,4 @@ test_expect_success 'store updates stash ref and reflog' ' grep quux bazzy ' -test_expect_success 'stash a change to turn a non-directory to a directory' ' - git reset --hard && - >testfile && - git add testfile && - git commit -m "add testfile as a regular file" && - rm testfile && - mkdir testfile && - >testfile/file && - test_must_fail git stash save "recover regular file" && - test -f testfile/file -' - -test_expect_success 'stash a change to turn a non-directory to a directory (forced)' ' - git stash save --force "recover regular file (forced)" && - ! test -f testfile/file && - test -f testfile -' - test_done diff --git a/t/t4000-diff-format.sh b/t/t4000-diff-format.sh index 6ddd46915d..8de36b7d12 100755 --- a/t/t4000-diff-format.sh +++ b/t/t4000-diff-format.sh @@ -15,17 +15,17 @@ line 3' cat path0 >path1 chmod +x path1 -test_expect_success \ - 'update-index --add two files with and without +x.' \ - 'git update-index --add path0 path1' +test_expect_success 'update-index --add two files with and without +x.' ' + git update-index --add path0 path1 +' mv path0 path0- sed -e 's/line/Line/' <path0- >path0 chmod +x path0 rm -f path1 -test_expect_success \ - 'git diff-files -p after editing work tree.' \ - 'git diff-files -p >current' +test_expect_success 'git diff-files -p after editing work tree.' ' + git diff-files -p >actual +' # that's as far as it comes if [ "$(git config --get core.filemode)" = false ] @@ -55,8 +55,38 @@ deleted file mode 100755 -line 3 EOF -test_expect_success \ - 'validate git diff-files -p output.' \ - 'compare_diff_patch current expected' +test_expect_success 'validate git diff-files -p output.' ' + compare_diff_patch expected actual +' + +test_expect_success 'git diff-files -s after editing work tree' ' + git diff-files -s >actual 2>err && + test_must_be_empty actual && + test_must_be_empty err +' + +test_expect_success 'git diff-files --no-patch as synonym for -s' ' + git diff-files --no-patch >actual 2>err && + test_must_be_empty actual && + test_must_be_empty err +' + +test_expect_success 'git diff-files --no-patch --patch shows the patch' ' + git diff-files --no-patch --patch >actual && + compare_diff_patch expected actual +' + +test_expect_success 'git diff-files --no-patch --patch-with-raw shows the patch and raw data' ' + git diff-files --no-patch --patch-with-raw >actual && + grep -q "^:100644 100755 .* 0000000000000000000000000000000000000000 M path0\$" actual && + tail -n +4 actual >actual-patch && + compare_diff_patch expected actual-patch +' + +test_expect_success 'git diff-files --patch --no-patch does not show the patch' ' + git diff-files --patch --no-patch >actual 2>err && + test_must_be_empty actual && + test_must_be_empty err +' test_done diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh index 58d418098d..668933bfb2 100755 --- a/t/t4014-format-patch.sh +++ b/t/t4014-format-patch.sh @@ -972,6 +972,49 @@ test_expect_success 'empty subject prefix does not have extra space' ' test_cmp expect actual ' +test_expect_success '--from=ident notices bogus ident' ' + test_must_fail git format-patch -1 --stdout --from=foo >patch +' + +test_expect_success '--from=ident replaces author' ' + git format-patch -1 --stdout --from="Me <me@example.com>" >patch && + cat >expect <<-\EOF && + From: Me <me@example.com> + + From: A U Thor <author@example.com> + + EOF + sed -ne "/^From:/p; /^$/p; /^---$/q" <patch >patch.head && + test_cmp expect patch.head +' + +test_expect_success '--from uses committer ident' ' + git format-patch -1 --stdout --from >patch && + cat >expect <<-\EOF && + From: C O Mitter <committer@example.com> + + From: A U Thor <author@example.com> + + EOF + sed -ne "/^From:/p; /^$/p; /^---$/q" <patch >patch.head && + test_cmp expect patch.head +' + +test_expect_success 'in-body headers trigger content encoding' ' + GIT_AUTHOR_NAME="éxötìc" test_commit exotic && + test_when_finished "git reset --hard HEAD^" && + git format-patch -1 --stdout --from >patch && + cat >expect <<-\EOF && + From: C O Mitter <committer@example.com> + Content-Type: text/plain; charset=UTF-8 + + From: éxötìc <author@example.com> + + EOF + sed -ne "/^From:/p; /^$/p; /^Content-Type/p; /^---$/q" <patch >patch.head && + test_cmp expect patch.head +' + append_signoff() { C=$(git commit-tree HEAD^^{tree} -p HEAD) && diff --git a/t/t4203-mailmap.sh b/t/t4203-mailmap.sh index 842b7549ec..baa4685dcc 100755 --- a/t/t4203-mailmap.sh +++ b/t/t4203-mailmap.sh @@ -13,6 +13,11 @@ fuzz_blame () { } test_expect_success setup ' + cat >contacts <<-\EOF && + A U Thor <author@example.com> + nick1 <bugs@company.xx> + EOF + echo one >one && git add one && test_tick && @@ -23,6 +28,44 @@ test_expect_success setup ' git commit --author "nick1 <bugs@company.xx>" -m second ' +test_expect_success 'check-mailmap no arguments' ' + test_must_fail git check-mailmap +' + +test_expect_success 'check-mailmap arguments' ' + cat >expect <<-\EOF && + A U Thor <author@example.com> + nick1 <bugs@company.xx> + EOF + git check-mailmap \ + "A U Thor <author@example.com>" \ + "nick1 <bugs@company.xx>" >actual && + test_cmp expect actual +' + +test_expect_success 'check-mailmap --stdin' ' + cat >expect <<-\EOF && + A U Thor <author@example.com> + nick1 <bugs@company.xx> + EOF + git check-mailmap --stdin <contacts >actual && + test_cmp expect actual +' + +test_expect_success 'check-mailmap --stdin arguments' ' + cat >expect <<-\EOF && + Internal Guy <bugs@company.xy> + EOF + cat <contacts >>expect && + git check-mailmap --stdin "Internal Guy <bugs@company.xy>" \ + <contacts >actual && + test_cmp expect actual +' + +test_expect_success 'check-mailmap bogus contact' ' + test_must_fail git check-mailmap bogus +' + cat >expect <<\EOF A U Thor (1): initial @@ -247,6 +290,24 @@ test_expect_success 'cleanup after mailmap.blob tests' ' rm -f .mailmap ' +test_expect_success 'single-character name' ' + echo " 1 A <author@example.com>" >expect && + echo " 1 nick1 <bugs@company.xx>" >>expect && + echo "A <author@example.com>" >.mailmap && + test_when_finished "rm .mailmap" && + git shortlog -es HEAD >actual && + test_cmp expect actual +' + +test_expect_success 'preserve canonical email case' ' + echo " 1 A U Thor <AUTHOR@example.com>" >expect && + echo " 1 nick1 <bugs@company.xx>" >>expect && + echo "<AUTHOR@example.com> <author@example.com>" >.mailmap && + test_when_finished "rm .mailmap" && + git shortlog -es HEAD >actual && + test_cmp expect actual +' + # Extended mailmap configurations should give us the following output for shortlog cat >expect <<\EOF A U Thor <author@example.com> (1): diff --git a/t/t4211-line-log.sh b/t/t4211-line-log.sh index 7776f93e3d..7369d3c517 100755 --- a/t/t4211-line-log.sh +++ b/t/t4211-line-log.sh @@ -48,7 +48,7 @@ canned_test "-M -L '/long f/,/^}/:b.c' move-support" move-support-f canned_test "-M -L ':f:b.c' parallel-change" parallel-change-f-to-main canned_test "-L 4,12:a.c -L :main:a.c simple" multiple -canned_test "-L 4,18:a.c -L :main:a.c simple" multiple-overlapping +canned_test "-L 4,18:a.c -L ^:main:a.c simple" multiple-overlapping canned_test "-L :main:a.c -L 4,18:a.c simple" multiple-overlapping canned_test "-L 4:a.c -L 8,12:a.c simple" multiple-superset canned_test "-L 8,12:a.c -L 4:a.c simple" multiple-superset @@ -64,4 +64,34 @@ test_bad_opts "-L 1,1000:b.c" "has only.*lines" test_bad_opts "-L :b.c" "argument.*not of the form" test_bad_opts "-L :foo:b.c" "no match" +test_expect_success '-L X (X == nlines)' ' + n=$(wc -l <b.c) && + git log -L $n:b.c +' + +test_expect_success '-L X (X == nlines + 1)' ' + n=$(expr $(wc -l <b.c) + 1) && + test_must_fail git log -L $n:b.c +' + +test_expect_success '-L X (X == nlines + 2)' ' + n=$(expr $(wc -l <b.c) + 2) && + test_must_fail git log -L $n:b.c +' + +test_expect_success '-L ,Y (Y == nlines)' ' + n=$(printf "%d" $(wc -l <b.c)) && + git log -L ,$n:b.c +' + +test_expect_success '-L ,Y (Y == nlines + 1)' ' + n=$(expr $(wc -l <b.c) + 1) && + test_must_fail git log -L ,$n:b.c +' + +test_expect_success '-L ,Y (Y == nlines + 2)' ' + n=$(expr $(wc -l <b.c) + 2) && + test_must_fail git log -L ,$n:b.c +' + test_done diff --git a/t/t4211/expect.multiple-superset b/t/t4211/expect.multiple-superset index a1f5bc49c8..d930b6eec4 100644 --- a/t/t4211/expect.multiple-superset +++ b/t/t4211/expect.multiple-superset @@ -1,3 +1,100 @@ +commit 4659538844daa2849b1a9e7d6fadb96fcd26fc83 +Author: Thomas Rast <trast@student.ethz.ch> +Date: Thu Feb 28 10:48:43 2013 +0100 + + change back to complete line + +diff --git a/a.c b/a.c +--- a/a.c ++++ b/a.c +@@ -4,19 +4,21 @@ + long f(long x) + { + int s = 0; + while (x) { + x >>= 1; + s++; + } + return s; + } + + /* + * This is only an example! + */ + + int main () + { + printf("%ld\n", f(15)); + return 0; +-} +\ No newline at end of file ++} ++ ++/* incomplete lines are bad! */ + +commit 100b61a6f2f720f812620a9d10afb3a960ccb73c +Author: Thomas Rast <trast@student.ethz.ch> +Date: Thu Feb 28 10:48:10 2013 +0100 + + change to an incomplete line at end + +diff --git a/a.c b/a.c +--- a/a.c ++++ b/a.c +@@ -4,19 +4,19 @@ + long f(long x) + { + int s = 0; + while (x) { + x >>= 1; + s++; + } + return s; + } + + /* + * This is only an example! + */ + + int main () + { + printf("%ld\n", f(15)); + return 0; +-} ++} +\ No newline at end of file + +commit 39b6eb2d5b706d3322184a169f666f25ed3fbd00 +Author: Thomas Rast <trast@student.ethz.ch> +Date: Thu Feb 28 10:45:41 2013 +0100 + + touch comment + +diff --git a/a.c b/a.c +--- a/a.c ++++ b/a.c +@@ -3,19 +3,19 @@ + long f(long x) + { + int s = 0; + while (x) { + x >>= 1; + s++; + } + return s; + } + + /* +- * A comment. ++ * This is only an example! + */ + + int main () + { + printf("%ld\n", f(15)); + return 0; + } + commit a6eb82647d5d67f893da442f8f9375fd89a3b1e2 Author: Thomas Rast <trast@student.ethz.ch> Date: Thu Feb 28 10:45:16 2013 +0100 @@ -7,7 +104,7 @@ Date: Thu Feb 28 10:45:16 2013 +0100 diff --git a/a.c b/a.c --- a/a.c +++ b/a.c -@@ -3,9 +3,9 @@ +@@ -3,19 +3,19 @@ -int f(int x) +long f(long x) { @@ -18,6 +115,17 @@ diff --git a/a.c b/a.c } return s; } + + /* + * A comment. + */ + + int main () + { +- printf("%d\n", f(15)); ++ printf("%ld\n", f(15)); + return 0; + } commit f04fb20f2c77850996cba739709acc6faecc58f7 Author: Thomas Rast <trast@student.ethz.ch> @@ -28,7 +136,7 @@ Date: Thu Feb 28 10:44:55 2013 +0100 diff --git a/a.c b/a.c --- a/a.c +++ b/a.c -@@ -3,8 +3,9 @@ +@@ -3,18 +3,19 @@ int f(int x) { int s = 0; @@ -38,6 +146,16 @@ diff --git a/a.c b/a.c } + return s; } + + /* + * A comment. + */ + + int main () + { + printf("%d\n", f(15)); + return 0; + } commit de4c48ae814792c02a49c4c3c0c757ae69c55f6a Author: Thomas Rast <trast@student.ethz.ch> @@ -48,7 +166,7 @@ Date: Thu Feb 28 10:44:48 2013 +0100 diff --git a/a.c b/a.c --- /dev/null +++ b/a.c -@@ -0,0 +3,8 @@ +@@ -0,0 +3,18 @@ +int f(int x) +{ + int s = 0; @@ -57,3 +175,13 @@ diff --git a/a.c b/a.c + s++; + } +} ++ ++/* ++ * A comment. ++ */ ++ ++int main () ++{ ++ printf("%d\n", f(15)); ++ return 0; ++} diff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh index fd2598e601..a80584ea0e 100755 --- a/t/t5500-fetch-pack.sh +++ b/t/t5500-fetch-pack.sh @@ -505,4 +505,20 @@ test_expect_success 'test --all, --depth, and explicit tag' ' ) >out-adt 2>error-adt ' +test_expect_success 'shallow fetch with tags does not break the repository' ' + mkdir repo1 && + ( + cd repo1 && + git init && + test_commit 1 && + test_commit 2 && + test_commit 3 && + mkdir repo2 && + cd repo2 && + git init && + git fetch --depth=2 ../.git master:branch && + git fsck + ) +' + test_done diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh index fde689166a..1f0f8e6827 100755 --- a/t/t5510-fetch.sh +++ b/t/t5510-fetch.sh @@ -497,6 +497,88 @@ test_expect_success "should be able to fetch with duplicate refspecs" ' ) ' +# configured prune tests + +set_config_tristate () { + # var=$1 val=$2 + case "$2" in + unset) test_unconfig "$1" ;; + *) git config "$1" "$2" ;; + esac +} + +test_configured_prune () { + fetch_prune=$1 remote_origin_prune=$2 cmdline=$3 expected=$4 + + test_expect_success "prune fetch.prune=$1 remote.origin.prune=$2${3:+ $3}; $4" ' + # make sure a newbranch is there in . and also in one + git branch -f newbranch && + ( + cd one && + test_unconfig fetch.prune && + test_unconfig remote.origin.prune && + git fetch && + git rev-parse --verify refs/remotes/origin/newbranch + ) + + # now remove it + git branch -d newbranch && + + # then test + ( + cd one && + set_config_tristate fetch.prune $fetch_prune && + set_config_tristate remote.origin.prune $remote_origin_prune && + + git fetch $cmdline && + case "$expected" in + pruned) + test_must_fail git rev-parse --verify refs/remotes/origin/newbranch + ;; + kept) + git rev-parse --verify refs/remotes/origin/newbranch + ;; + esac + ) + ' +} + +test_configured_prune unset unset "" kept +test_configured_prune unset unset "--no-prune" kept +test_configured_prune unset unset "--prune" pruned + +test_configured_prune false unset "" kept +test_configured_prune false unset "--no-prune" kept +test_configured_prune false unset "--prune" pruned + +test_configured_prune true unset "" pruned +test_configured_prune true unset "--prune" pruned +test_configured_prune true unset "--no-prune" kept + +test_configured_prune unset false "" kept +test_configured_prune unset false "--no-prune" kept +test_configured_prune unset false "--prune" pruned + +test_configured_prune false false "" kept +test_configured_prune false false "--no-prune" kept +test_configured_prune false false "--prune" pruned + +test_configured_prune true false "" kept +test_configured_prune true false "--prune" pruned +test_configured_prune true false "--no-prune" kept + +test_configured_prune unset true "" pruned +test_configured_prune unset true "--no-prune" kept +test_configured_prune unset true "--prune" pruned + +test_configured_prune false true "" pruned +test_configured_prune false true "--no-prune" kept +test_configured_prune false true "--prune" pruned + +test_configured_prune true true "" pruned +test_configured_prune true true "--prune" pruned +test_configured_prune true true "--no-prune" kept + test_expect_success 'all boundary commits are excluded' ' test_commit base && test_commit oneside && diff --git a/t/t5533-push-cas.sh b/t/t5533-push-cas.sh new file mode 100755 index 0000000000..ba20d83333 --- /dev/null +++ b/t/t5533-push-cas.sh @@ -0,0 +1,189 @@ +#!/bin/sh + +test_description='compare & swap push force/delete safety' + +. ./test-lib.sh + +setup_srcdst_basic () { + rm -fr src dst && + git clone --no-local . src && + git clone --no-local src dst && + ( + cd src && git checkout HEAD^0 + ) +} + +test_expect_success setup ' + : create template repository + test_commit A && + test_commit B && + test_commit C +' + +test_expect_success 'push to update (protected)' ' + setup_srcdst_basic && + ( + cd dst && + test_commit D && + test_must_fail git push --force-with-lease=master:master origin master + ) && + git ls-remote . refs/heads/master >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to update (protected, forced)' ' + setup_srcdst_basic && + ( + cd dst && + test_commit D && + git push --force --force-with-lease=master:master origin master + ) && + git ls-remote dst refs/heads/master >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to update (protected, tracking)' ' + setup_srcdst_basic && + ( + cd src && + git checkout master && + test_commit D && + git checkout HEAD^0 + ) && + git ls-remote src refs/heads/master >expect && + ( + cd dst && + test_commit E && + git ls-remote . refs/remotes/origin/master >expect && + test_must_fail git push --force-with-lease=master origin master && + git ls-remote . refs/remotes/origin/master >actual && + test_cmp expect actual + ) && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to update (protected, tracking, forced)' ' + setup_srcdst_basic && + ( + cd src && + git checkout master && + test_commit D && + git checkout HEAD^0 + ) && + ( + cd dst && + test_commit E && + git ls-remote . refs/remotes/origin/master >expect && + git push --force --force-with-lease=master origin master + ) && + git ls-remote dst refs/heads/master >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to update (allowed)' ' + setup_srcdst_basic && + ( + cd dst && + test_commit D && + git push --force-with-lease=master:master^ origin master + ) && + git ls-remote dst refs/heads/master >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to update (allowed, tracking)' ' + setup_srcdst_basic && + ( + cd dst && + test_commit D && + git push --force-with-lease=master origin master + ) && + git ls-remote dst refs/heads/master >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to update (allowed even though no-ff)' ' + setup_srcdst_basic && + ( + cd dst && + git reset --hard HEAD^ && + test_commit D && + git push --force-with-lease=master origin master + ) && + git ls-remote dst refs/heads/master >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to delete (protected)' ' + setup_srcdst_basic && + git ls-remote src refs/heads/master >expect && + ( + cd dst && + test_must_fail git push --force-with-lease=master:master^ origin :master + ) && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to delete (protected, forced)' ' + setup_srcdst_basic && + ( + cd dst && + git push --force --force-with-lease=master:master^ origin :master + ) && + >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'push to delete (allowed)' ' + setup_srcdst_basic && + ( + cd dst && + git push --force-with-lease=master origin :master + ) && + >expect && + git ls-remote src refs/heads/master >actual && + test_cmp expect actual +' + +test_expect_success 'cover everything with default force-with-lease (protected)' ' + setup_srcdst_basic && + ( + cd src && + git branch naster master^ + ) + git ls-remote src refs/heads/\* >expect && + ( + cd dst && + test_must_fail git push --force-with-lease origin master master:naster + ) && + git ls-remote src refs/heads/\* >actual && + test_cmp expect actual +' + +test_expect_success 'cover everything with default force-with-lease (allowed)' ' + setup_srcdst_basic && + ( + cd src && + git branch naster master^ + ) + ( + cd dst && + git fetch && + git push --force-with-lease origin master master:naster + ) && + git ls-remote dst refs/heads/master | + sed -e "s/master/naster/" >expect && + git ls-remote src refs/heads/naster >actual && + test_cmp expect actual +' + +test_done diff --git a/t/t5541-http-push.sh b/t/t5541-http-push.sh index beb00be4b1..470ac54295 100755 --- a/t/t5541-http-push.sh +++ b/t/t5541-http-push.sh @@ -153,7 +153,7 @@ test_expect_success 'used receive-pack service' ' ' test_http_push_nonff "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git \ - "$ROOT_PATH"/test_repo_clone master + "$ROOT_PATH"/test_repo_clone master success test_expect_success 'push fails for non-fast-forward refs unmatched by remote helper' ' # create a dissimilarly-named remote ref so that git is unable to match the diff --git a/t/t5551-http-fetch.sh b/t/t5551-http-fetch.sh index 55a866af80..8196af19f6 100755 --- a/t/t5551-http-fetch.sh +++ b/t/t5551-http-fetch.sh @@ -187,6 +187,22 @@ test_expect_success 'dumb clone via http-backend respects namespace' ' test_cmp expect actual ' +cat >cookies.txt <<EOF +127.0.0.1 FALSE /smart_cookies/ FALSE 0 othername othervalue +EOF +cat >expect_cookies.txt <<EOF + +127.0.0.1 FALSE /smart_cookies/ FALSE 0 othername othervalue +127.0.0.1 FALSE /smart_cookies/repo.git/info/ FALSE 0 name value +EOF +test_expect_success 'cookies stored in http.cookiefile when http.savecookies set' ' + git config http.cookiefile cookies.txt && + git config http.savecookies true && + git ls-remote $HTTPD_URL/smart_cookies/repo.git master && + tail -3 cookies.txt > cookies_tail.txt + test_cmp expect_cookies.txt cookies_tail.txt +' + test -n "$GIT_TEST_LONG" && test_set_prereq EXPENSIVE test_expect_success EXPENSIVE 'create 50,000 tags in the repo' ' diff --git a/t/t5560-http-backend-noserver.sh b/t/t5560-http-backend-noserver.sh index ef98d95e00..9be9ae3436 100755 --- a/t/t5560-http-backend-noserver.sh +++ b/t/t5560-http-backend-noserver.sh @@ -5,7 +5,7 @@ test_description='test git-http-backend-noserver' HTTPD_DOCUMENT_ROOT_PATH="$TRASH_DIRECTORY" -test_have_prereq MINGW && export GREP_OPTIONS=-U +test_have_prereq GREP_STRIPS_CR && export GREP_OPTIONS=-U run_backend() { echo "$2" | diff --git a/t/t5710-info-alternate.sh b/t/t5710-info-alternate.sh index 8956c21617..5a6e49d18d 100755 --- a/t/t5710-info-alternate.sh +++ b/t/t5710-info-alternate.sh @@ -58,7 +58,13 @@ test_expect_success 'creating too deep nesting' \ git clone -l -s D E && git clone -l -s E F && git clone -l -s F G && -test_must_fail git clone --bare -l -s G H' +git clone --bare -l -s G H' + +test_expect_success 'invalidity of deepest repository' \ +'cd H && { + test_valid_repo + test $? -ne 0 +}' cd "$base_dir" diff --git a/t/t6012-rev-list-simplify.sh b/t/t6012-rev-list-simplify.sh index 57ce2395d6..fde5e712eb 100755 --- a/t/t6012-rev-list-simplify.sh +++ b/t/t6012-rev-list-simplify.sh @@ -127,4 +127,10 @@ test_expect_success 'full history simplification without parent' ' } ' +test_expect_success '--full-diff is not affected by --parents' ' + git log -p --pretty="%H" --full-diff -- file >expected && + git log -p --pretty="%H" --full-diff --parents -- file >actual && + test_cmp expected actual +' + test_done diff --git a/t/t6021-merge-criss-cross.sh b/t/t6021-merge-criss-cross.sh index 331b9b07d4..d15b313d4b 100755 --- a/t/t6021-merge-criss-cross.sh +++ b/t/t6021-merge-criss-cross.sh @@ -3,7 +3,7 @@ # Copyright (c) 2005 Fredrik Kuivinen # -# See http://marc.theaimsgroup.com/?l=git&m=111463358500362&w=2 for a +# See http://marc.info/?l=git&m=111463358500362&w=2 for a # nice description of what this is about. diff --git a/t/t6120-describe.sh b/t/t6120-describe.sh index a25729f2a7..c0e5b2a627 100755 --- a/t/t6120-describe.sh +++ b/t/t6120-describe.sh @@ -174,4 +174,28 @@ check_describe "test2-lightweight-*" --tags --match="test2-*" check_describe "test2-lightweight-*" --long --tags --match="test2-*" HEAD^ +test_expect_success 'name-rev with exact tags' ' + echo A >expect && + tag_object=$(git rev-parse refs/tags/A) && + git name-rev --tags --name-only $tag_object >actual && + test_cmp expect actual && + + echo "A^0" >expect && + tagged_commit=$(git rev-parse "refs/tags/A^0") && + git name-rev --tags --name-only $tagged_commit >actual && + test_cmp expect actual +' + +test_expect_success 'describe --contains with the exact tags' ' + echo "A^0" >expect && + tag_object=$(git rev-parse refs/tags/A) && + git describe --contains $tag_object >actual && + test_cmp expect actual && + + echo "A^0" >expect && + tagged_commit=$(git rev-parse "refs/tags/A^0") && + git describe --contains $tagged_commit >actual && + test_cmp expect actual +' + test_done diff --git a/t/t7301-clean-interactive.sh b/t/t7301-clean-interactive.sh new file mode 100755 index 0000000000..3ae394e934 --- /dev/null +++ b/t/t7301-clean-interactive.sh @@ -0,0 +1,475 @@ +#!/bin/sh + +test_description='git clean -i basic tests' + +. ./test-lib.sh + +test_expect_success 'setup' ' + + mkdir -p src && + touch src/part1.c Makefile && + echo build >.gitignore && + echo \*.o >>.gitignore && + git add . && + git commit -m setup && + touch src/part2.c README && + git add . + +' + +test_expect_success 'git clean -i (c: clean hotkey)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + echo c | git clean -i && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test ! -f a.out && + test -f docs/manual.txt && + test ! -f src/part3.c && + test ! -f src/part3.h && + test ! -f src/part4.c && + test ! -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -i (cl: clean prefix)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + echo cl | git clean -i && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test ! -f a.out && + test -f docs/manual.txt && + test ! -f src/part3.c && + test ! -f src/part3.h && + test ! -f src/part4.c && + test ! -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -i (quit)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + echo quit | git clean -i && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test -f a.out && + test -f docs/manual.txt && + test -f src/part3.c && + test -f src/part3.h && + test -f src/part4.c && + test -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -i (Ctrl+D)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + echo "\04" | git clean -i && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test -f a.out && + test -f docs/manual.txt && + test -f src/part3.c && + test -f src/part3.h && + test -f src/part4.c && + test -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id (filter all)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (echo f; echo "*"; echo; echo c) | \ + git clean -id && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test -f a.out && + test -f docs/manual.txt && + test -f src/part3.c && + test -f src/part3.h && + test -f src/part4.c && + test -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id (filter patterns)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (echo f; echo "part3.* *.out"; echo; echo c) | \ + git clean -id && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test -f a.out && + test ! -f docs/manual.txt && + test -f src/part3.c && + test -f src/part3.h && + test ! -f src/part4.c && + test ! -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id (filter patterns 2)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (echo f; echo "* !*.out"; echo; echo c) | \ + git clean -id && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test ! -f a.out && + test -f docs/manual.txt && + test -f src/part3.c && + test -f src/part3.h && + test -f src/part4.c && + test -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id (select - all)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (echo s; echo "*"; echo; echo c) | \ + git clean -id && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test ! -f a.out && + test ! -f docs/manual.txt && + test ! -f src/part3.c && + test ! -f src/part3.h && + test ! -f src/part4.c && + test ! -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id (select - none)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (echo s; echo; echo c) | \ + git clean -id && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test -f a.out && + test -f docs/manual.txt && + test -f src/part3.c && + test -f src/part3.h && + test -f src/part4.c && + test -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id (select - number)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (echo s; echo 3; echo; echo c) | \ + git clean -id && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test -f a.out && + test -f docs/manual.txt && + test ! -f src/part3.c && + test -f src/part3.h && + test -f src/part4.c && + test -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id (select - number 2)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (echo s; echo 2 3; echo 5; echo; echo c) | \ + git clean -id && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test -f a.out && + test ! -f docs/manual.txt && + test ! -f src/part3.c && + test -f src/part3.h && + test ! -f src/part4.c && + test -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id (select - number 3)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (echo s; echo 3,4 5; echo; echo c) | \ + git clean -id && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test -f a.out && + test -f docs/manual.txt && + test ! -f src/part3.c && + test ! -f src/part3.h && + test ! -f src/part4.c && + test -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id (select - filenames)' ' + + mkdir -p build docs && + touch a.out foo.txt bar.txt baz.txt && + (echo s; echo a.out fo ba bar; echo; echo c) | \ + git clean -id && + test -f Makefile && + test ! -f a.out && + test ! -f foo.txt && + test ! -f bar.txt && + test -f baz.txt && + rm baz.txt + +' + +test_expect_success 'git clean -id (select - range)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (echo s; echo 1,3-4; echo 2; echo; echo c) | \ + git clean -id && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test ! -f a.out && + test ! -f src/part3.c && + test ! -f src/part3.h && + test -f src/part4.c && + test -f src/part4.h && + test ! -f docs/manual.txt && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id (select - range 2)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (echo s; echo 4- 1; echo; echo c) | \ + git clean -id && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test ! -f a.out && + test -f docs/manual.txt && + test -f src/part3.c && + test ! -f src/part3.h && + test ! -f src/part4.c && + test ! -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id (inverse select)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (echo s; echo "*"; echo -5- 1 -2; echo; echo c) | \ + git clean -id && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test ! -f a.out && + test -f docs/manual.txt && + test ! -f src/part3.c && + test ! -f src/part3.h && + test -f src/part4.c && + test -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id (ask)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (echo a; echo Y; echo y; echo no; echo yes; echo bad; echo) | \ + git clean -id && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test ! -f a.out && + test ! -f docs/manual.txt && + test -f src/part3.c && + test ! -f src/part3.h && + test -f src/part4.c && + test -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id (ask - Ctrl+D)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (echo a; echo Y; echo no; echo yes; echo "\04") | \ + git clean -id && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test ! -f a.out && + test -f docs/manual.txt && + test ! -f src/part3.c && + test -f src/part3.h && + test -f src/part4.c && + test -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id with prefix and path (filter)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (cd build/ && \ + (echo f; echo "docs"; echo "*.h"; echo ; echo c) | \ + git clean -id ..) && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test ! -f a.out && + test -f docs/manual.txt && + test ! -f src/part3.c && + test -f src/part3.h && + test ! -f src/part4.c && + test -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id with prefix and path (select by name)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (cd build/ && \ + (echo s; echo "../docs/"; echo "../src/part3.c"; \ + echo "../src/part4.c"; echo; echo c) | \ + git clean -id ..) && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test -f a.out && + test ! -f docs/manual.txt && + test ! -f src/part3.c && + test -f src/part3.h && + test ! -f src/part4.c && + test -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_expect_success 'git clean -id with prefix and path (ask)' ' + + mkdir -p build docs && + touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \ + docs/manual.txt obj.o build/lib.so && + (cd build/ && \ + (echo a; echo Y; echo y; echo no; echo yes; echo bad; echo) | \ + git clean -id ..) && + test -f Makefile && + test -f README && + test -f src/part1.c && + test -f src/part2.c && + test ! -f a.out && + test ! -f docs/manual.txt && + test -f src/part3.c && + test ! -f src/part3.h && + test -f src/part4.c && + test -f src/part4.h && + test -f obj.o && + test -f build/lib.so + +' + +test_done diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index a9dd7306c5..4192fe0ec6 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -18,6 +18,16 @@ test_expect_success 'setup - initial commit' ' git branch initial ' +test_expect_success 'configuration parsing' ' + test_when_finished "rm -f .gitmodules" && + cat >.gitmodules <<-\EOF && + [submodule "s"] + path + ignore + EOF + test_must_fail git status +' + test_expect_success 'setup - repository in init subdirectory' ' mkdir init && ( @@ -957,4 +967,20 @@ test_expect_success 'submodule with UTF-8 name' ' git submodule >&2 && test -n "$(git submodule | grep "$svname")" ' + +test_expect_success 'submodule add clone shallow submodule' ' + mkdir super && + pwd=$(pwd) + ( + cd super && + git init && + git submodule add --depth=1 file://"$pwd"/example2 submodule && + ( + cd submodule && + test 1 = $(git log --oneline | wc -l) + ) + ) +' + + test_done diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh index cdb0538392..b192f936bc 100755 --- a/t/t7406-submodule-update.sh +++ b/t/t7406-submodule-update.sh @@ -294,6 +294,35 @@ test_expect_success 'submodule update - checkout in .git/config' ' ) ' +test_expect_success 'submodule update - command in .git/config' ' + (cd super && + git config submodule.submodule.update "!git checkout" + ) && + (cd super/submodule && + git reset --hard HEAD^ + ) && + (cd super && + (cd submodule && + compare_head + ) && + git submodule update submodule && + cd submodule && + ! compare_head + ) +' + +test_expect_success 'submodule update - command in .git/config catches failure' ' + (cd super && + git config submodule.submodule.update "!false" + ) && + (cd super/submodule && + git reset --hard HEAD^ + ) && + (cd super && + test_must_fail git submodule update submodule + ) +' + test_expect_success 'submodule init picks up rebase' ' (cd super && git config -f .gitmodules submodule.rebasing.update rebase && @@ -700,14 +729,24 @@ test_expect_success 'submodule update properly revives a moved submodule' ' test_expect_success SYMLINKS 'submodule update can handle symbolic links in pwd' ' mkdir -p linked/dir && ln -s linked/dir linkto && - ( - cd linkto && - git clone "$TRASH_DIRECTORY"/super_update_r2 super && - ( - cd super && - git submodule update --init --recursive - ) + (cd linkto && + git clone "$TRASH_DIRECTORY"/super_update_r2 super && + (cd super && + git submodule update --init --recursive + ) ) ' +test_expect_success 'submodule update clone shallow submodule' ' + git clone cloned super3 && + pwd=$(pwd) + (cd super3 && + sed -e "s#url = ../#url = file://$pwd/#" <.gitmodules >.gitmodules.tmp && + mv -f .gitmodules.tmp .gitmodules && + git submodule update --init --depth=3 + (cd submodule && + test 1 = $(git log --oneline | wc -l) + ) + ) +' test_done diff --git a/t/t7407-submodule-foreach.sh b/t/t7407-submodule-foreach.sh index 91d4fd1fac..be93f10cf0 100755 --- a/t/t7407-submodule-foreach.sh +++ b/t/t7407-submodule-foreach.sh @@ -145,7 +145,7 @@ test_expect_success 'use "submodule foreach" to checkout 2nd level submodule' ' git rev-parse --resolve-git-dir nested1/.git && test_must_fail git rev-parse --resolve-git-dir nested1/nested2/.git && git submodule foreach "git submodule update --init" && - git rev-parse --resolve-git-dir nested1/nested1/nested2/.git + git rev-parse --resolve-git-dir nested1/nested2/.git && test_must_fail git rev-parse --resolve-git-dir nested1/nested2/nested3/.git ) ' diff --git a/t/t7600-merge.sh b/t/t7600-merge.sh index 460d8ebf48..10aa028017 100755 --- a/t/t7600-merge.sh +++ b/t/t7600-merge.sh @@ -497,9 +497,15 @@ test_expect_success 'combining --squash and --no-ff is refused' ' test_must_fail git merge --no-ff --squash c1 ' -test_expect_success 'combining --ff-only and --no-ff is refused' ' - test_must_fail git merge --ff-only --no-ff c1 && - test_must_fail git merge --no-ff --ff-only c1 +test_expect_success 'option --ff-only overwrites --no-ff' ' + git merge --no-ff --ff-only c1 && + test_must_fail git merge --no-ff --ff-only c2 +' + +test_expect_success 'option --no-ff overrides merge.ff=only config' ' + git reset --hard c0 && + test_config merge.ff only && + git merge --no-ff c1 ' test_expect_success 'merge c0 with c1 (ff overrides no-ff)' ' diff --git a/t/t7601-merge-pull-config.sh b/t/t7601-merge-pull-config.sh index 25dac79889..830a4c3e9d 100755 --- a/t/t7601-merge-pull-config.sh +++ b/t/t7601-merge-pull-config.sh @@ -109,7 +109,7 @@ test_expect_success 'setup conflicted merge' ' ' # First do the merge with resolve and recursive then verify that -# recusive is chosen. +# recursive is chosen. test_expect_success 'merge picks up the best result' ' git config --unset-all pull.twohead && diff --git a/t/t8001-annotate.sh b/t/t8001-annotate.sh index 41962f04a7..72176e42c1 100755 --- a/t/t8001-annotate.sh +++ b/t/t8001-annotate.sh @@ -6,9 +6,9 @@ test_description='git annotate' PROG='git annotate' . "$TEST_DIRECTORY"/annotate-tests.sh -test_expect_success 'Annotating an old revision works' ' - git annotate file master >result && - awk "{ print \$3; }" <result >authors && +test_expect_success 'annotate old revision' ' + git annotate file master >actual && + awk "{ print \$3; }" <actual >authors && test 2 = $(grep A <authors | wc -l) && test 2 = $(grep B <authors | wc -l) ' diff --git a/t/t8002-blame.sh b/t/t8002-blame.sh index e2896cffc1..5cdf3f178e 100755 --- a/t/t8002-blame.sh +++ b/t/t8002-blame.sh @@ -7,8 +7,16 @@ PROG='git blame -c' . "$TEST_DIRECTORY"/annotate-tests.sh PROG='git blame -c -e' -test_expect_success 'Blame --show-email works' ' - check_count "<A@test.git>" 1 "<B@test.git>" 1 "<B1@test.git>" 1 "<B2@test.git>" 1 "<author@example.com>" 1 "<C@test.git>" 1 "<D@test.git>" 1 "<E at test dot git>" 1 +test_expect_success 'blame --show-email' ' + check_count \ + "<A@test.git>" 1 \ + "<B@test.git>" 1 \ + "<B1@test.git>" 1 \ + "<B2@test.git>" 1 \ + "<author@example.com>" 1 \ + "<C@test.git>" 1 \ + "<D@test.git>" 1 \ + "<E at test dot git>" 1 ' test_done diff --git a/t/t9020-remote-svn.sh b/t/t9020-remote-svn.sh index d9f6b73ab0..4d81ba1c2c 100755 --- a/t/t9020-remote-svn.sh +++ b/t/t9020-remote-svn.sh @@ -24,7 +24,7 @@ init_git () { rm -fr .git && git init && #git remote add svnsim testsvn::sim:///$TEST_DIRECTORY/t9020/example.svnrdump - # let's reuse an exisiting dump file!? + # let's reuse an existing dump file!? git remote add svnsim testsvn::sim://$TEST_DIRECTORY/t9154/svn.dump git remote add svnfile testsvn::file://$TEST_DIRECTORY/t9154/svn.dump } diff --git a/t/t9112-git-svn-md5less-file.sh b/t/t9112-git-svn-md5less-file.sh index a61d6716d2..9861c719f8 100755 --- a/t/t9112-git-svn-md5less-file.sh +++ b/t/t9112-git-svn-md5less-file.sh @@ -7,7 +7,7 @@ test_description='test that git handles an svn repository with missing md5sums' # Loading a node from a svn dumpfile without a Text-Content-Length # field causes svn to neglect to store or report an md5sum. (it will # calculate one if you had put Text-Content-Length: 0). This showed -# up in a repository creted with cvs2svn. +# up in a repository created with cvs2svn. cat > dumpfile.svn <<EOF SVN-fs-dump-format-version: 1 diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh index ac6f3b6af2..31a770d9bc 100755 --- a/t/t9300-fast-import.sh +++ b/t/t9300-fast-import.sh @@ -1031,6 +1031,32 @@ test_expect_success \ git diff-tree -M -r M3^ M3 >actual && compare_diff_raw expect actual' +cat >input <<INPUT_END +commit refs/heads/M4 +committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE +data <<COMMIT +rename root +COMMIT + +from refs/heads/M2^0 +R "" sub + +INPUT_END + +cat >expect <<EOF +:100644 100644 7123f7f44e39be127c5eb701e5968176ee9d78b1 7123f7f44e39be127c5eb701e5968176ee9d78b1 R100 file2/oldf sub/file2/oldf +:100755 100755 85df50785d62d3b05ab03d9cbf7e4a0b49449730 85df50785d62d3b05ab03d9cbf7e4a0b49449730 R100 file4 sub/file4 +:100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc R100 i/am/new/to/you sub/i/am/new/to/you +:100755 100755 e74b7d465e52746be2b4bae983670711e6e66657 e74b7d465e52746be2b4bae983670711e6e66657 R100 newdir/exec.sh sub/newdir/exec.sh +:100644 100644 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 R100 newdir/interesting sub/newdir/interesting +EOF +test_expect_success \ + 'M: rename root to subdirectory' \ + 'git fast-import <input && + git diff-tree -M -r M4^ M4 >actual && + cat actual && + compare_diff_raw expect actual' + ### ### series N ### @@ -1228,6 +1254,29 @@ test_expect_success \ compare_diff_raw expect actual' test_expect_success \ + 'N: copy root by path' \ + 'cat >expect <<-\EOF && + :100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc C100 file2/newf oldroot/file2/newf + :100644 100644 7123f7f44e39be127c5eb701e5968176ee9d78b1 7123f7f44e39be127c5eb701e5968176ee9d78b1 C100 file2/oldf oldroot/file2/oldf + :100755 100755 85df50785d62d3b05ab03d9cbf7e4a0b49449730 85df50785d62d3b05ab03d9cbf7e4a0b49449730 C100 file4 oldroot/file4 + :100755 100755 e74b7d465e52746be2b4bae983670711e6e66657 e74b7d465e52746be2b4bae983670711e6e66657 C100 newdir/exec.sh oldroot/newdir/exec.sh + :100644 100644 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 fcf778cda181eaa1cbc9e9ce3a2e15ee9f9fe791 C100 newdir/interesting oldroot/newdir/interesting + EOF + cat >input <<-INPUT_END && + commit refs/heads/N-copy-root-path + committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE + data <<COMMIT + copy root directory by (empty) path + COMMIT + + from refs/heads/branch^0 + C "" oldroot + INPUT_END + git fast-import <input && + git diff-tree -C --find-copies-harder -r branch N-copy-root-path >actual && + compare_diff_raw expect actual' + +test_expect_success \ 'N: delete directory by copying' \ 'cat >expect <<-\EOF && OBJID @@ -2934,4 +2983,20 @@ test_expect_success 'S: ls with garbage after sha1 must fail' ' test_i18ngrep "space after tree-ish" err ' +### +### series T (ls) +### +# Setup is carried over from series S. + +test_expect_success 'T: ls root tree' ' + sed -e "s/Z\$//" >expect <<-EOF && + 040000 tree $(git rev-parse S^{tree}) Z + EOF + sha1=$(git rev-parse --verify S) && + git fast-import --import-marks=marks <<-EOF >actual && + ls $sha1 "" + EOF + test_cmp expect actual +' + test_done diff --git a/t/t9801-git-p4-branch.sh b/t/t9801-git-p4-branch.sh index 9730821c30..2bf142d09c 100755 --- a/t/t9801-git-p4-branch.sh +++ b/t/t9801-git-p4-branch.sh @@ -469,9 +469,11 @@ test_expect_success 'use-client-spec detect-branches skips branches setup' ' View: //depot/usecs/b1/... //depot/usecs/b3/... EOF - echo b3/b3-file3 >b3/b3-file3 && - p4 add b3/b3-file3 && - p4 submit -d "b3/b3-file3" + echo b3/b3-file3_1 >b3/b3-file3_1 && + echo b3/b3-file3_2 >b3/b3-file3_2 && + p4 add b3/b3-file3_1 && + p4 add b3/b3-file3_2 && + p4 submit -d "b3/b3-file3_1 b3/b3-file3_2" ) ' @@ -487,6 +489,21 @@ test_expect_success 'use-client-spec detect-branches skips branches' ' ) ' +test_expect_success 'use-client-spec detect-branches skips files in branches' ' + client_view "//depot/usecs/... //client/..." \ + "-//depot/usecs/b3/b3-file3_1 //client/b3/b3-file3_1" && + test_when_finished cleanup_git && + test_create_repo "$git" && + ( + cd "$git" && + git p4 sync --detect-branches --use-client-spec //depot/usecs@all && + git checkout -b master p4/usecs/b3 && + test_path_is_file b1-file1 && + test_path_is_file b3-file3_2 && + test_path_is_missing b3-file3_1 + ) +' + test_expect_success 'kill p4d' ' kill_p4d ' diff --git a/t/t9802-git-p4-filetype.sh b/t/t9802-git-p4-filetype.sh index b0d1d94bf4..a82744bab0 100755 --- a/t/t9802-git-p4-filetype.sh +++ b/t/t9802-git-p4-filetype.sh @@ -28,7 +28,7 @@ test_expect_success 'p4 client newlines, unix' ' test_cmp f-unix-orig f-unix && # make sure stored in repo as unix newlines - # use sed to eat python-appened newline + # use sed to eat python-appended newline p4 -G print //depot/f-unix | marshal_dump data 2 |\ sed \$d >f-unix-p4-print && test_cmp f-unix-orig f-unix-p4-print && diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index 272a071e85..2d4beb5e50 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -69,7 +69,7 @@ run_completion () local -a COMPREPLY _words local _cword _words=( $1 ) - test "${1: -1}" = ' ' && _words+=('') + test "${1: -1}" = ' ' && _words[${#_words[@]}+1]='' (( _cword = ${#_words[@]} - 1 )) __git_wrap__git_main && print_comp } diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh index 3c3e4e8c38..59f875e830 100755 --- a/t/t9903-bash-prompt.sh +++ b/t/t9903-bash-prompt.sh @@ -61,6 +61,29 @@ test_expect_success 'prompt - unborn branch' ' test_cmp expected "$actual" ' +repo_with_newline='repo +with +newline' + +if mkdir "$repo_with_newline" 2>/dev/null +then + test_set_prereq FUNNYNAMES +else + say 'Your filesystem does not allow newlines in filenames.' +fi + +test_expect_success FUNNYNAMES 'prompt - with newline in path' ' + printf " (master)" >expected && + git init "$repo_with_newline" && + test_when_finished "rm -rf \"$repo_with_newline\"" && + mkdir "$repo_with_newline"/subdir && + ( + cd "$repo_with_newline/subdir" && + __git_ps1 >"$actual" + ) && + test_cmp expected "$actual" +' + test_expect_success 'prompt - detached head' ' printf " ((%s...))" $(git log -1 --format="%h" --abbrev=13 b1^) >expected && test_config core.abbrev 13 && diff --git a/t/test-lib.sh b/t/test-lib.sh index 2d63307351..1aa27bdbbf 100644 --- a/t/test-lib.sh +++ b/t/test-lib.sh @@ -92,6 +92,7 @@ unset VISUAL EMAIL LANGUAGE COLUMNS $("$PERL_PATH" -e ' print join("\n", @vars); ') unset XDG_CONFIG_HOME +unset GITPERLLIB GIT_AUTHOR_EMAIL=author@example.com GIT_AUTHOR_NAME='A U Thor' GIT_COMMITTER_EMAIL=committer@example.com @@ -824,6 +825,7 @@ case $(uname -s) in test_set_prereq MINGW test_set_prereq NOT_CYGWIN test_set_prereq SED_STRIPS_CR + test_set_prereq GREP_STRIPS_CR ;; *CYGWIN*) test_set_prereq POSIXPERM @@ -831,6 +833,7 @@ case $(uname -s) in test_set_prereq NOT_MINGW test_set_prereq CYGWIN test_set_prereq SED_STRIPS_CR + test_set_prereq GREP_STRIPS_CR ;; *) test_set_prereq POSIXPERM diff --git a/templates/hooks--pre-commit.sample b/templates/hooks--pre-commit.sample index 18c4829765..586e3bf94d 100755 --- a/templates/hooks--pre-commit.sample +++ b/templates/hooks--pre-commit.sample @@ -15,13 +15,13 @@ else against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi -# If you want to allow non-ascii filenames set this variable to true. +# If you want to allow non-ASCII filenames set this variable to true. allownonascii=$(git config hooks.allownonascii) # Redirect output to stderr. exec 1>&2 -# Cross platform projects tend to avoid non-ascii filenames; prevent +# Cross platform projects tend to avoid non-ASCII filenames; prevent # them from being added to the repository. We exploit the fact that the # printable range starts at the space character and ends with tilde. if [ "$allownonascii" != "true" ] && @@ -31,18 +31,17 @@ if [ "$allownonascii" != "true" ] && test $(git diff --cached --name-only --diff-filter=A -z $against | LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 then - echo "Error: Attempt to add a non-ascii file name." - echo - echo "This can cause problems if you want to work" - echo "with people on other platforms." - echo - echo "To be portable it is advisable to rename the file ..." - echo - echo "If you know what you are doing you can disable this" - echo "check using:" - echo - echo " git config hooks.allownonascii true" - echo + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF exit 1 fi diff --git a/templates/hooks--pre-push.sample b/templates/hooks--pre-push.sample index 15ab6d8e7e..1f3bcebfd7 100755 --- a/templates/hooks--pre-push.sample +++ b/templates/hooks--pre-push.sample @@ -30,6 +30,7 @@ do if [ "$local_sha" = $z40 ] then # Handle delete + : else if [ "$remote_sha" = $z40 ] then diff --git a/test-dump-cache-tree.c b/test-dump-cache-tree.c index a6ffdf39d5..47eab9765f 100644 --- a/test-dump-cache-tree.c +++ b/test-dump-cache-tree.c @@ -59,6 +59,8 @@ int main(int ac, char **av) struct cache_tree *another = cache_tree(); if (read_cache() < 0) die("unable to read index file"); - cache_tree_update(another, active_cache, active_nr, WRITE_TREE_DRY_RUN); + cache_tree_update(another, + (const struct cache_entry * const *)active_cache, + active_nr, WRITE_TREE_DRY_RUN); return dump_cache_tree(active_cache_tree, another, ""); } diff --git a/test-path-utils.c b/test-path-utils.c index 0092cbf354..bb975e4d3e 100644 --- a/test-path-utils.c +++ b/test-path-utils.c @@ -28,6 +28,19 @@ static int normalize_ceiling_entry(struct string_list_item *item, void *unused) return 1; } +static void normalize_argv_string(const char **var, const char *input) +{ + if (!strcmp(input, "<null>")) + *var = NULL; + else if (!strcmp(input, "<empty>")) + *var = ""; + else + *var = input; + + if (*var && (**var == '<' || **var == '(')) + die("Bad value: %s\n", input); +} + int main(int argc, char **argv) { if (argc == 3 && !strcmp(argv[1], "normalize_path_copy")) { @@ -103,6 +116,25 @@ int main(int argc, char **argv) return 0; } + if (argc == 3 && !strcmp(argv[1], "mingw_path")) { + puts(argv[2]); + return 0; + } + + if (argc == 4 && !strcmp(argv[1], "relative_path")) { + struct strbuf sb = STRBUF_INIT; + const char *in, *prefix, *rel; + normalize_argv_string(&in, argv[2]); + normalize_argv_string(&prefix, argv[3]); + rel = relative_path(in, prefix, &sb); + if (!rel) + puts("(null)"); + else + puts(strlen(rel) > 0 ? rel : "(empty)"); + strbuf_release(&sb); + return 0; + } + fprintf(stderr, "%s: unknown function name: %s\n", argv[0], argv[1] ? argv[1] : "(there was none)"); return 1; @@ -75,6 +75,7 @@ static void trace_vprintf(const char *key, const char *fmt, va_list ap) strbuf_release(&buf); } +__attribute__((format (printf, 2, 3))) static void trace_printf_key(const char *key, const char *fmt, ...) { va_list ap; diff --git a/transport-helper.c b/transport-helper.c index db9bd18298..4c2a39e8ff 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -27,6 +27,7 @@ struct helper_data { push : 1, connect : 1, signed_tags : 1, + check_connectivity : 1, no_disconnect_req : 1; char *export_marks; char *import_marks; @@ -186,6 +187,8 @@ static struct child_process *get_helper(struct transport *transport) data->bidi_import = 1; else if (!strcmp(capname, "export")) data->export = 1; + else if (!strcmp(capname, "check-connectivity")) + data->check_connectivity = 1; else if (!data->refspecs && !prefixcmp(capname, "refspec ")) { ALLOC_GROW(refspecs, refspec_nr + 1, @@ -349,6 +352,9 @@ static int fetch_with_fetch(struct transport *transport, struct strbuf buf = STRBUF_INIT; standard_options(transport); + if (data->check_connectivity && + data->transport_options.check_self_contained_and_connected) + set_helper_option(transport, "check-connectivity", "true"); for (i = 0; i < nr_heads; i++) { const struct ref *posn = to_fetch[i]; @@ -372,6 +378,10 @@ static int fetch_with_fetch(struct transport *transport, else transport->pack_lockfile = xstrdup(name); } + else if (data->check_connectivity && + data->transport_options.check_self_contained_and_connected && + !strcmp(buf.buf, "connectivity-ok")) + data->transport_options.self_contained_and_connected = 1; else if (!buf.len) break; else @@ -683,6 +693,11 @@ static int push_update_ref_status(struct strbuf *buf, free(msg); msg = NULL; } + else if (!strcmp(msg, "stale info")) { + status = REF_STATUS_REJECT_STALE; + free(msg); + msg = NULL; + } } if (*ref) @@ -737,13 +752,15 @@ static void push_update_refs_status(struct helper_data *data, } static int push_refs_with_push(struct transport *transport, - struct ref *remote_refs, int flags) + struct ref *remote_refs, int flags) { int force_all = flags & TRANSPORT_PUSH_FORCE; int mirror = flags & TRANSPORT_PUSH_MIRROR; struct helper_data *data = transport->data; struct strbuf buf = STRBUF_INIT; struct ref *ref; + struct string_list cas_options = STRING_LIST_INIT_DUP; + struct string_list_item *cas_option; get_helper(transport); if (!data->push) @@ -756,6 +773,7 @@ static int push_refs_with_push(struct transport *transport, /* Check for statuses set by set_ref_status_for_push() */ switch (ref->status) { case REF_STATUS_REJECT_NONFASTFORWARD: + case REF_STATUS_REJECT_STALE: case REF_STATUS_REJECT_ALREADY_EXISTS: case REF_STATUS_UPTODATE: continue; @@ -778,11 +796,29 @@ static int push_refs_with_push(struct transport *transport, strbuf_addch(&buf, ':'); strbuf_addstr(&buf, ref->name); strbuf_addch(&buf, '\n'); + + /* + * The "--force-with-lease" options without explicit + * values to expect have already been expanded into + * the ref->old_sha1_expect[] field; we can ignore + * transport->smart_options->cas altogether and instead + * can enumerate them from the refs. + */ + if (ref->expect_old_sha1) { + struct strbuf cas = STRBUF_INIT; + strbuf_addf(&cas, "%s:%s", + ref->name, sha1_to_hex(ref->old_sha1_expect)); + string_list_append(&cas_options, strbuf_detach(&cas, NULL)); + } } - if (buf.len == 0) + if (buf.len == 0) { + string_list_clear(&cas_options, 0); return 0; + } standard_options(transport); + for_each_string_list_item(cas_option, &cas_options) + set_helper_option(transport, "cas", cas_option->string); if (flags & TRANSPORT_PUSH_DRY_RUN) { if (set_helper_option(transport, "dry-run", "true") != 0) @@ -982,6 +1018,7 @@ int transport_helper_init(struct transport *transport, const char *name) #define PBUFFERSIZE 8192 /* Print bidirectional transfer loop debug message. */ +__attribute__((format (printf, 1, 2))) static void transfer_debug(const char *fmt, ...) { va_list args; @@ -1067,7 +1104,7 @@ static int udt_do_read(struct unidirectional_transfer *t) return -1; } else if (bytes == 0) { transfer_debug("%s EOF (with %i bytes in buffer)", - t->src_name, t->bufuse); + t->src_name, (int)t->bufuse); t->state = SSTATE_FLUSHING; } else if (bytes > 0) { t->bufuse += bytes; @@ -1131,7 +1168,7 @@ static void *udt_copy_task_routine(void *udt) #ifndef NO_PTHREADS /* - * Join thread, with apporiate errors on failure. Name is name for the + * Join thread, with appropriate errors on failure. Name is name for the * thread (for error messages). Returns 0 on success, 1 on failure. */ static int tloop_join(pthread_t thread, const char *name) @@ -1197,7 +1234,7 @@ static void udt_kill_transfer(struct unidirectional_transfer *t) } /* - * Join process, with apporiate errors on failure. Name is name for the + * Join process, with appropriate errors on failure. Name is name for the * process (for error messages). Returns 0 on success, 1 on failure. */ static int tloop_join(pid_t pid, const char *name) diff --git a/transport.c b/transport.c index e15db9808c..b321d6a49d 100644 --- a/transport.c +++ b/transport.c @@ -3,6 +3,8 @@ #include "run-command.h" #include "pkt-line.h" #include "fetch-pack.h" +#include "remote.h" +#include "connect.h" #include "send-pack.h" #include "walker.h" #include "bundle.h" @@ -707,6 +709,10 @@ static int print_one_push_status(struct ref *ref, const char *dest, int count, i print_ref_status('!', "[rejected]", ref, ref->peer_ref, "needs force", porcelain); break; + case REF_STATUS_REJECT_STALE: + print_ref_status('!', "[rejected]", ref, ref->peer_ref, + "stale info", porcelain); + break; case REF_STATUS_REMOTE_REJECT: print_ref_status('!', "[remote rejected]", ref, ref->deletion ? NULL : ref->peer_ref, @@ -1076,6 +1082,7 @@ static int run_pre_push_hook(struct transport *transport, for (r = remote_refs; r; r = r->next) { if (!r->peer_ref) continue; if (r->status == REF_STATUS_REJECT_NONFASTFORWARD) continue; + if (r->status == REF_STATUS_REJECT_STALE) continue; if (r->status == REF_STATUS_UPTODATE) continue; strbuf_reset(&buf); @@ -1140,6 +1147,12 @@ int transport_push(struct transport *transport, return -1; } + if (transport->smart_options && + transport->smart_options->cas && + !is_empty_cas(transport->smart_options->cas)) + apply_push_cas(transport->smart_options->cas, + transport->remote, remote_refs); + set_ref_status_for_push(remote_refs, flags & TRANSPORT_PUSH_MIRROR, flags & TRANSPORT_PUSH_FORCE); diff --git a/transport.h b/transport.h index ea70ea7e4a..10f7556001 100644 --- a/transport.h +++ b/transport.h @@ -2,6 +2,7 @@ #define TRANSPORT_H #include "cache.h" +#include "run-command.h" #include "remote.h" struct git_transport_options { @@ -13,6 +14,7 @@ struct git_transport_options { int depth; const char *uploadpack; const char *receivepack; + struct push_cas_option *cas; }; struct transport { @@ -126,6 +128,9 @@ struct transport *transport_get(struct remote *, const char *); /* Transfer the data as a thin pack if not null */ #define TRANS_OPT_THIN "thin" +/* Check the current value of the remote ref */ +#define TRANS_OPT_CAS "cas" + /* Keep the pack that was transferred if not null */ #define TRANS_OPT_KEEP "keep" diff --git a/tree-walk.c b/tree-walk.c index c366852553..5ece8c3477 100644 --- a/tree-walk.c +++ b/tree-walk.c @@ -324,7 +324,6 @@ static inline int prune_traversal(struct name_entry *e, int traverse_trees(int n, struct tree_desc *t, struct traverse_info *info) { - int ret = 0; int error = 0; struct name_entry *entry = xmalloc(n*sizeof(*entry)); int i; @@ -342,6 +341,7 @@ int traverse_trees(int n, struct tree_desc *t, struct traverse_info *info) strbuf_setlen(&base, info->pathlen); } for (;;) { + int trees_used; unsigned long mask, dirmask; const char *first = NULL; int first_len = 0; @@ -405,15 +405,14 @@ int traverse_trees(int n, struct tree_desc *t, struct traverse_info *info) if (interesting < 0) break; if (interesting) { - ret = info->fn(n, mask, dirmask, entry, info); - if (ret < 0) { - error = ret; + trees_used = info->fn(n, mask, dirmask, entry, info); + if (trees_used < 0) { + error = trees_used; if (!info->show_all_errors) break; } - mask &= ret; + mask &= trees_used; } - ret = 0; for (i = 0; i < n; i++) if (mask & (1ul << i)) update_extended_entry(tx + i, entry + i); @@ -159,7 +159,7 @@ int read_tree(struct tree *tree, int stage, struct pathspec *match) * sort at the end. */ for (i = 0; !fn && i < active_nr; i++) { - struct cache_entry *ce = active_cache[i]; + const struct cache_entry *ce = active_cache[i]; if (ce_stage(ce) == stage) fn = read_one_entry; } diff --git a/unpack-trees.c b/unpack-trees.c index b27f2a62e8..1a61e6f363 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -179,7 +179,7 @@ static void display_error_msgs(struct unpack_trees_options *o) * Unlink the last component and schedule the leading directories for * removal, such that empty directories get removed. */ -static void unlink_entry(struct cache_entry *ce) +static void unlink_entry(const struct cache_entry *ce) { if (!check_leading_path(ce->name, ce_namelen(ce))) return; @@ -199,7 +199,7 @@ static int check_updates(struct unpack_trees_options *o) if (o->update && o->verbose_update) { for (total = cnt = 0; cnt < index->cache_nr; cnt++) { - struct cache_entry *ce = index->cache[cnt]; + const struct cache_entry *ce = index->cache[cnt]; if (ce->ce_flags & (CE_UPDATE | CE_WT_REMOVE)) total++; } @@ -212,7 +212,7 @@ static int check_updates(struct unpack_trees_options *o) if (o->update) git_attr_set_direction(GIT_ATTR_CHECKOUT, &o->result); for (i = 0; i < index->cache_nr; i++) { - struct cache_entry *ce = index->cache[i]; + const struct cache_entry *ce = index->cache[i]; if (ce->ce_flags & CE_WT_REMOVE) { display_progress(progress, ++cnt); @@ -376,7 +376,7 @@ static struct cache_entry *next_cache_entry(struct unpack_trees_options *o) return NULL; } -static void add_same_unmerged(struct cache_entry *ce, +static void add_same_unmerged(const struct cache_entry *ce, struct unpack_trees_options *o) { struct index_state *index = o->src_index; @@ -650,7 +650,7 @@ static int find_cache_pos(struct traverse_info *info, int p_len = tree_entry_len(p); for (pos = o->cache_bottom; pos < index->cache_nr; pos++) { - struct cache_entry *ce = index->cache[pos]; + const struct cache_entry *ce = index->cache[pos]; const char *ce_name, *ce_slash; int cmp, ce_len; @@ -1154,8 +1154,10 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options o->src_index = NULL; ret = check_updates(o) ? (-2) : 0; - if (o->dst_index) + if (o->dst_index) { + discard_index(o->dst_index); *o->dst_index = o->result; + } done: clear_exclude_list(&el); @@ -1353,7 +1355,7 @@ static int verify_clean_subdirectory(const struct cache_entry *ce, */ static int icase_exists(struct unpack_trees_options *o, const char *name, int len, struct stat *st) { - struct cache_entry *src; + const struct cache_entry *src; src = index_name_exists(o->src_index, name, len, 1); return src && !ie_match_stat(o->src_index, src, st, CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE); @@ -1364,7 +1366,7 @@ static int check_ok_to_remove(const char *name, int len, int dtype, enum unpack_trees_error_types error_type, struct unpack_trees_options *o) { - struct cache_entry *result; + const struct cache_entry *result; /* * It may be that the 'lstat()' succeeded even though diff --git a/upload-pack.c b/upload-pack.c index 127e59a603..b03492e664 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -10,6 +10,7 @@ #include "revision.h" #include "list-objects.h" #include "run-command.h" +#include "connect.h" #include "sigchain.h" #include "version.h" #include "string-list.h" @@ -10,6 +10,7 @@ int utf8_strwidth(const char *string); int is_utf8(const char *text); int is_encoding_utf8(const char *name); int same_encoding(const char *, const char *); +__attribute__((format (printf, 2, 3))) int utf8_fprintf(FILE *, const char *, ...); void strbuf_add_wrapped_text(struct strbuf *buf, diff --git a/wrap-for-bin.sh b/wrap-for-bin.sh index 53a8dd0a3f..701d2339b9 100644 --- a/wrap-for-bin.sh +++ b/wrap-for-bin.sh @@ -14,7 +14,7 @@ else GIT_TEMPLATE_DIR='@@BUILD_DIR@@/templates/blt' export GIT_TEMPLATE_DIR fi -GITPERLLIB='@@BUILD_DIR@@/perl/blib/lib' +GITPERLLIB='@@BUILD_DIR@@/perl/blib/lib'"${GITPERLLIB:+:$GITPERLLIB}" GIT_TEXTDOMAINDIR='@@BUILD_DIR@@/po/build/locale' PATH='@@BUILD_DIR@@/bin-wrappers:'"$PATH" export GIT_EXEC_PATH GITPERLLIB PATH GIT_TEXTDOMAINDIR @@ -322,7 +322,7 @@ int git_mkstemps_mode(char *pattern, int suffix_len, int mode) template[5] = letters[v % num_letters]; v /= num_letters; fd = open(pattern, O_CREAT | O_EXCL | O_RDWR, mode); - if (fd > 0) + if (fd >= 0) return fd; /* * Fatal error (EPERM, ENOSPC etc). diff --git a/wt-status.c b/wt-status.c index 33baf0a698..ff4b32426a 100644 --- a/wt-status.c +++ b/wt-status.c @@ -245,7 +245,7 @@ static void wt_status_print_unmerged_data(struct wt_status *s, struct strbuf onebuf = STRBUF_INIT; const char *one, *how = _("bug"); - one = quote_path(it->string, -1, &onebuf, s->prefix); + one = quote_path(it->string, s->prefix, &onebuf); status_printf(s, color(WT_STATUS_HEADER, s), "\t"); switch (d->stagemask) { case 1: how = _("both deleted:"); break; @@ -299,8 +299,8 @@ static void wt_status_print_change_data(struct wt_status *s, change_type); } - one = quote_path(one_name, -1, &onebuf, s->prefix); - two = quote_path(two_name, -1, &twobuf, s->prefix); + one = quote_path(one_name, s->prefix, &onebuf); + two = quote_path(two_name, s->prefix, &twobuf); status_printf(s, color(WT_STATUS_HEADER, s), "\t"); switch (status) { @@ -373,7 +373,7 @@ static void wt_status_collect_changed_cb(struct diff_queue_struct *q, static int unmerged_mask(const char *path) { int pos, mask; - struct cache_entry *ce; + const struct cache_entry *ce; pos = cache_name_pos(path, strlen(path)); if (0 <= pos) @@ -475,7 +475,7 @@ static void wt_status_collect_changes_initial(struct wt_status *s) for (i = 0; i < active_nr; i++) { struct string_list_item *it; struct wt_status_change_data *d; - struct cache_entry *ce = active_cache[i]; + const struct cache_entry *ce = active_cache[i]; if (!ce_path_match(ce, &s->pathspec)) continue; @@ -705,8 +705,7 @@ static void wt_status_print_other(struct wt_status *s, struct string_list_item *it; const char *path; it = &(l->items[i]); - path = quote_path(it->string, strlen(it->string), - &buf, s->prefix); + path = quote_path(it->string, s->prefix, &buf); if (column_active(s->colopts)) { string_list_append(&output, path); continue; @@ -1291,7 +1290,7 @@ static void wt_shortstatus_unmerged(struct string_list_item *it, } else { struct strbuf onebuf = STRBUF_INIT; const char *one; - one = quote_path(it->string, -1, &onebuf, s->prefix); + one = quote_path(it->string, s->prefix, &onebuf); printf(" %s\n", one); strbuf_release(&onebuf); } @@ -1319,7 +1318,7 @@ static void wt_shortstatus_status(struct string_list_item *it, struct strbuf onebuf = STRBUF_INIT; const char *one; if (d->head_path) { - one = quote_path(d->head_path, -1, &onebuf, s->prefix); + one = quote_path(d->head_path, s->prefix, &onebuf); if (*one != '"' && strchr(one, ' ') != NULL) { putchar('"'); strbuf_addch(&onebuf, '"'); @@ -1328,7 +1327,7 @@ static void wt_shortstatus_status(struct string_list_item *it, printf("%s -> ", one); strbuf_release(&onebuf); } - one = quote_path(it->string, -1, &onebuf, s->prefix); + one = quote_path(it->string, s->prefix, &onebuf); if (*one != '"' && strchr(one, ' ') != NULL) { putchar('"'); strbuf_addch(&onebuf, '"'); @@ -1347,7 +1346,7 @@ static void wt_shortstatus_other(struct string_list_item *it, } else { struct strbuf onebuf = STRBUF_INIT; const char *one; - one = quote_path(it->string, -1, &onebuf, s->prefix); + one = quote_path(it->string, s->prefix, &onebuf); color_fprintf(s->fp, color(WT_STATUS_UNTRACKED, s), "%s", sign); printf(" %s\n", one); strbuf_release(&onebuf); diff --git a/wt-status.h b/wt-status.h index 8463672ed3..9966c13deb 100644 --- a/wt-status.h +++ b/wt-status.h @@ -96,9 +96,9 @@ void wt_status_get_state(struct wt_status_state *state, int get_detached_from); void wt_shortstatus_print(struct wt_status *s); void wt_porcelain_print(struct wt_status *s); -void status_printf_ln(struct wt_status *s, const char *color, const char *fmt, ...) - ; -void status_printf(struct wt_status *s, const char *color, const char *fmt, ...) - ; +__attribute__((format (printf, 3, 4))) +void status_printf_ln(struct wt_status *s, const char *color, const char *fmt, ...); +__attribute__((format (printf, 3, 4))) +void status_printf(struct wt_status *s, const char *color, const char *fmt, ...); #endif /* STATUS_H */ |