Git development
 help / color / mirror / Atom feed
* Re: cogito and remote#branch, was Re: [PATCH] Git homepage: remove all the references to Cogito
From: Petr Baudis @ 2007-10-31 17:09 UTC (permalink / raw)
  To: Jonas Fonseca; +Cc: Johannes Schindelin, Paolo Ciarrocchi, git
In-Reply-To: <2c6b72b30710161516j5c029847r1acb3ce2d88344a1@mail.gmail.com>

On Wed, Oct 17, 2007 at 12:16:25AM +0200, Jonas Fonseca wrote:
> On 10/16/07, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> > On Tue, 16 Oct 2007, Petr Baudis wrote:
> > > I'm not sure this is good idea, Cogito is still quite frequently used
> > > and it should be documented that it exists.
> >
> > I agree.  But maybe it could be marked as unmaintained?  Maybe someone
> > steps up to maintain it.  Or, even better, comes up with a list of "this
> > is what I like do regularly with cogito, but there's no easy way with core
> > git" issues.
> 
> One thing that I occasionally miss is
> 
>   cg-export /path/to/directory/
> 
> And yes, I know it can be accomplished via "obscurities" like
> git-archive+tar (or worse git-checkout-index) but I think having
> an easy way to checkout to a directory could be great (and possibly
> with the ability to apply substitutions with the recent discussion).
> 
> Else, I am really looking forward for the option parser work to provide
> an easy way to list options. I found it very useful with Cogito.
> Also, most of the "status" commands in Cogito seemd to provide a richer
> default output geared towards human consumption. For example stuff like
> git-branch -v and git remote -v flags would have been the default for
> Cogito ... I think.

A "me too" mail for once...

I fully second this. cg-export is one of the Cogito commands I still use
frequently. I wonder if there is any obvious piece of Git command set we
could glue this on (so that we don't introduce Yet Another Command)... I
think cg-export is better-named here than git-archive. ;-)

And some command in Git to easily get the equivalent of cg-status -g
output is something I probably miss the most in Git now. (Originally I
was about to say that I just miss an equivalent of cg-status, but
thinking about it, most of the time I'm interested only in either -g
(long branch info) or -w (git status output)).

-- 
				Petr "Pasky" Baudis
We don't know who it was that discovered water, but we're pretty sure
that it wasn't a fish.		-- Marshall McLuhan

^ permalink raw reply

* Re: Recording merges after repo conversion
From: Johan Herland @ 2007-10-31 17:08 UTC (permalink / raw)
  To: git
  Cc: Linus Torvalds, Johannes Schindelin, Peter Karlsson, Lars Hjemli,
	Benoit SIGOURE
In-Reply-To: <alpine.LFD.0.999.0710310928490.3340@woody.linux-foundation.org>

[-- Attachment #1: Type: text/plain, Size: 2698 bytes --]

On Wednesday 31 October 2007, Linus Torvalds wrote:
> On Wed, 31 Oct 2007, Johannes Schindelin wrote:
> > Seriously, your proposal does not make any sense.  If you have to set up a 
> > hook to get the _sane_ behaviour, something is really wrong.  So I do not 
> > really understand why you brought up this idea here and now.
> 
> Well, I think this does kind of have some commonality with another issue 
> that has come up before: git clone only clones the really core repository 
> data.
> 
> That's generally a big feature, and I think it's absolutely the correct 
> thing to do.
> 
> But I can also see that sometimes, you might want to clone more than the 
> actual repository, and get things like SVN metadata, branch reflogs, 
> various hooks and all the config options too.
> 
> Of course, in practice, at least right now, the right thing to do for that 
> is to just do a recursive filesystem copy and then a "git status", but I 
> think the background here is that some people simply do end up wanting to 
> transfer more infrastructure than just the actual repository data.
> 
> One thing to note: one reason for *not* allowing that is that incremental 
> upgrades of non-repo data is obviously not possible. You might be able to 
> *clone* a repo with config info and other metadata (if nothing else, then 
> by just doing that raw filesystem copy), but you will never ever be able 
> to _fetch_ the updates, because they aren't part of the core repository, 
> and aren't versioned.
> 
> So I think I can understand why some people would want to do things like 
> this, but I do think it's broken. Yes, you can make the grafts file (or 
> the config file) be part of the repo, and even just add a symlink to your 
> .git/ directory, but it's simply not a very good model.
> 
> So I think it always does end up breaking (other people might rebase, and 
> break your grafts, or just not want them in the first place, or they don't 
> care about the same things, and mess up "your" configuration etc etc). So 
> the git repo layout is designed to have the minimally required shared 
> state, and not anything else.

I agree that sharing the "metainfo" (i.e. config, grafts, hooks, reflogs, 
rerere magic, etc.) of the repo is not something git should do in the general 
case.

But in some specific workflows (e.g. in-house, centralized workflows), I think 
it makes sense to coordinate/share some of this info between repos. But in 
that case, I guess such coordination/sharing can be done by special-purpose 
tools built on top of git (e.g. in-house admin scripts).


...Johan

-- 
Johan Herland, <johan@herland.net>
www.herland.net

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply

* Re: remote#branch
From: Petr Baudis @ 2007-10-31 17:13 UTC (permalink / raw)
  To: Jeff King
  Cc: Linus Torvalds, Pascal Obry, Matthieu Moy, Tom Prince,
	Theodore Tso, Junio C Hamano, Jan Hudec, Johannes Schindelin,
	Paolo Ciarrocchi, git
In-Reply-To: <20071030235823.GA22747@coredump.intra.peff.net>

On Tue, Oct 30, 2007 at 07:58:23PM -0400, Jeff King wrote:
>   http://host/git repo with spaces in the path
> 
> compared to:
> 
>   http://host/git+repo+with+spaces+in+the+path

Just pedantic side-note: these two URLs are not equivalent. '+' is valid
substitute for a space only in query string part of URL. In path you
have to use %20.

-- 
				Petr "Pasky" Baudis
We don't know who it was that discovered water, but we're pretty sure
that it wasn't a fish.		-- Marshall McLuhan

^ permalink raw reply

* Re: [PATCH 1/1] Add --first-parent support to interactive rebase.
From: Jeff King @ 2007-10-31 18:05 UTC (permalink / raw)
  To: Dmitry Potapov
  Cc: Karl Hasselström, Björn Steinbrink, Junio C Hamano,
	Johannes.Schindelin, git
In-Reply-To: <20071031143641.GF15182@dpotapov.dyndns.org>

On Wed, Oct 31, 2007 at 05:36:41PM +0300, Dmitry Potapov wrote:

> Hmm... I looked at the mail again and I cannot see where 8859-1 is
> specified. It seems that context encoding is not specified at all.
> Of course, it is incorrect to use non ASCII characters in a mail
> without specifying encoding. Apparently, because I use utf-8 in the
> terminal, the Sign-off line displays correctly for me, so I did not
> notice the problem. Sorry for the noise...

It is our old friend vger adding the iso-8859-1 header, I think, since
no encoding was specified.

I think the problem is that git-format-patch only decides whether to
append a MIME header based on the commit message contents; it does not
take the Signed-Off-By into account. This may also be the cause of the
recent complaints from Matti Aarnio.

-Peff

^ permalink raw reply

* Re: [PATCH 10/10] push: teach push to be quiet if local ref is strict subset of remote ref
From: Junio C Hamano @ 2007-10-31 18:51 UTC (permalink / raw)
  To: Steffen Prohaska; +Cc: git
In-Reply-To: <B3C76DB8-076D-4C43-AC28-99119A05325C@zib.de>

Steffen Prohaska <prohaska@zib.de> writes:

> On Oct 31, 2007, at 9:45 AM, Junio C Hamano wrote:
>
>> I would not doubt it would be safer for _your_ workflow, but you
>> should consider the risk of making things more cumbersome for
>> workflows of others by enforcing that policy.
>
> Together with the '--create' flag it would be safer in all
> cases, because it would always do _less_ than what git push
> currently does. The safest choice would be if "git push"
> refused to do anything until configured appropriately.
>
> "safer" is independent of the workflow.

By your definition, a command that does not do anything by
default is safer regardless of the workflow.

That may be theoretically true --- it cannot do any harm by
default.  But that is not useful.

> I'm mainly interested in using git against a shared repo,
> and make it as simple and as safe as possible to use in
> such a setup. I suspect that git is more optimized for the
> workflow used for the Linux kernel and for developing git,
> which heavily rely on sending patches to mailing lists and
> pulling fro read-only repos.

You forgot a lot more important part.  Pushing into publishing
repositories.  And the discussion is about git-push command.

^ permalink raw reply

* Newbie: report of first experience with git-rebase.
From: Sergei Organov @ 2007-10-31 19:39 UTC (permalink / raw)
  To: git

Hello,

I've made my first attempt at tracking my changes to upstream git
repository using git-fetch/git-rebase workflow. I did three commits to
my master branch, and then upstream incorporated two of them in slightly
modified form, so that some conflicts are to be expected. I did
git-fetch followed by git-rebase, and finally have got the end result I
hoped for, but there were some confusion along the way. I think I'd post
the log of the session here along with my thoughts so that an interested
person could see how it works for a newbie (my thoughts and non-git
actions at the time of rebasing are marked with 'me>' prefix):

$ git fetch
[...]
$ git rebase origin
First, rewinding head to replay your work on top of it...
HEAD is now at 9c51414... Merge branch 'maint' into HEAD

Applying Fix a typo.

Wrote tree f5b2feefc021486eae9d2d84c69e0d6ead027a9d
Committed: 983e907b1360c17c7ac925d6035d82cc7243f406

Applying Use new syntax (-m option) for git-merge.

error: patch failed: Documentation/core-tutorial.txt:878
error: Documentation/core-tutorial.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merged Documentation/core-tutorial.txt
CONFLICT (content): Merge conflict in Documentation/core-tutorial.txt
Failed to merge in the changes.
Patch failed at 0002.

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".

me> Nice, this conflict is expected.
me> Editing Documentation/core-tutorial.txt to resolve the
me> conflict... Conflict is resolved so that the working file matches
me> upstream version.

$ git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add

me> Nice helpful message, -- need to do git-add

$ git add Documentation/core-tutorial.txt
$ git rebase --continue

Applying Use new syntax (-m option) for git-merge.

No changes - did you forget to use 'git add'?

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".

me> What?! I just did the git-add! Moreover, before I did git-add, the
me> error was different and helpful. Something went wrong? 
me> Well, it's unlikely, but maybe I made a mistake of not specifying
me> the 'origin'?

$ git rebase --continue origin

Applying Use new syntax (-m option) for git-merge.

No changes - did you forget to use 'git add'?

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".

me> No luck :( A few seconds of thinking... Hmm... no-op patch, do I
me> need to skip it? Let's try the --skip:

$ git rebase --skip

Applying Fix SYNOPSIS.

error: patch failed: Documentation/git-merge.txt:10
error: Documentation/git-merge.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merged Documentation/git-merge.txt
CONFLICT (content): Merge conflict in Documentation/git-merge.txt
Failed to merge in the changes.
Patch failed at 0003.

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".

me> Aha, that's it! But why git didn't just skip the no-op patch
me> automatically? Well, anyway , now I have a new expected conflict,
me> and I'm sure I just want to skip this patch, so let's try exactly
me> that:

$ git rebase --skip
Dirty index: cannot apply patches (dirty: Documentation/git-merge.txt)

me> No luck :( Well, let's go the long way, -- edit conflicting
me> Documentation/git-merge.txt (so that it matches upstream),

$ git add Documentation/git-merge.txt
$ git rebase --skip
Nothing to do.

me> Well, I already knew this will work, but why should I edit the file
me> and then git-add it just to skip the patch? Is there better way?
me> Anyway, the "Nothing to do." above is slightly confusing, -- did it
me> actually skip the patch? So let's check the result:

$ gitk

me> The result is as expected, -- the only patch on top of current origin
me> HEAD, -- nice.

-- 
Sergei.

^ permalink raw reply

* Re: remote#branch
From: Erik Warendorph @ 2007-10-31 19:29 UTC (permalink / raw)
  To: Jan Hudec
  Cc: Linus Torvalds, Tom Prince, Theodore Tso, Junio C Hamano,
	Johannes Schindelin, Petr Baudis, Paolo Ciarrocchi, git
In-Reply-To: <20071030193610.GA4442@efreet.light.src>

* Jan Hudec <bulb@ucw.cz> [2007-10-30 20:36:10 +0100]:
>
> On Tue, Oct 30, 2007 at 07:59:45 -0700, Linus Torvalds wrote:
> > > So, how should git deal with
> > >
> > > git://repo.or.cz/linux-2.6/linux acpi-2.6/ibm-acpi-2.6.git
> > > git://repo.or.cz/linux-2.6/linux+acpi-2.6/ibm-acpi-2.6.git
> > > git://repo.or.cz/linux-2.6/linux%20acpi-2.6/ibm-acpi-2.6.git
> >
> > The way it has always cared. Git itself does no quoting what-so-ever
> > (except for the *argument* quoting etc that it needs).
> >
> > Now, the *transport* back-end may end up quoting it, of course, the same
> > way it may end up using some random protocol. The user shouldn't care
> > about the implementation details!
> >
> > In the case of the git transport, there is no quoting even by the
> > transport protocol. In the case of http, libcurl would hopefully quote for
> > us.
>
> So the three addresses will all be different, right?
>
> > > compared to
> > >
> > > http://repo.or.cz/linux-2.6/linux acpi-2.6/ibm-acpi-2.6.git
> > > http://repo.or.cz/linux-2.6/linux+acpi-2.6/ibm-acpi-2.6.git
> > > http://repo.or.cz/linux-2.6/linux%20acpi-2.6/ibm-acpi-2.6.git
> >
> > No difference, what-so-ever, that I can see. Git doesn't quote it.
>
> Yes. But the server will unquote it. ' ' should not have been there, but it's
> just passed through if it was. '+' is quoting for ' ' and '%20' is quoting
> for ' ' as well. Therefore all these three addresses are the *SAME*.
>
> Now the user expectation will be that when these are the same, the git://
> ones above will be as well. But they are not. This is not about following any
> RFC for sake of it, but about being consistent with ourselves.

I don't think the

  '+' is quoting for ' '

part is fully correct, at least not if you're talking about
"real RFC 2396 URLs" (not "Git URLs").  I might misunderstand
you here, but there has also been other postings suggesting
that plus should/could be used instead of space, implying that
people think that pluses are always transformed to spaces in
URLs.  But if I understand RFC 2396 correctly, this is *not*
the case.

RFC 2396 says that pluses are treated as "reserved" in the
*query* part of the URL (ie on the right side of the question
mark) -- here they *are* transformed to spaces, although the
RFC itself doesn't really say specifically what happens to
them.  In the path part, pluses are not "reserved", they are
simply a "pchar" along with "unreserved", "escaped" and a
couple of other characters.  There is nothing in the RFC
implying that pluses in the path part will be transformed into
spaces, and in my experience this does not happen in practice
either.

To recap:

  (In the examples below <...> is used to mean legal URLs,
  while "..." is used to mean "the literal characters in the
  URL" (more or less))

  * In the query part:

      '%20' = '+' = a literal space
      '%2B' =       a literal plus

    For example:

        <http://example.com/somescript?v=x%20y>
      = <http://example.com/somescript?v=x+y>
      = "http://example.com/somescript?v=x y"

        <http://example.com/somescript?v=x%2By>
      = "http://example.com/somescript?v=x+y"

  * In the path part:

      '%20' =       a literal space
      '%2B' = '+' = a literal plus

    For example:

        <http://example.com/x%20y.html>
      = "http://example.com/x y.html"

        <http://example.com/x%2By>
      = <http://example.com/x+y>
      = "http://example.com/x+y"

I'm not advocating that "Git URLs" necessarily should be made
fully RFC 2396 compliant (neither am I nitpicking just for the
sake of nitpicking), I'm just pointing out that if someone
*should* want to make "Git URLs" fully or more RFC 2396
compliant in some way for some reason, having pluses being
automatically transformed to spaces in the path part of the URL
does not follow the RFC (as far as I understand it).

-- 
Erik Warendorph <erik@warendorph.org>

^ permalink raw reply

* Re: cpio command not found
From: Mike Hommey @ 2007-10-31 19:48 UTC (permalink / raw)
  To: Erik Mouw; +Cc: Karl Hasselstr?m, Bill Lear, git
In-Reply-To: <20071031140655.GA8802@gateway.home>

On Wed, Oct 31, 2007 at 03:06:55PM +0100, Erik Mouw wrote:
> On Wed, Oct 31, 2007 at 02:30:39PM +0100, Karl Hasselstr?m wrote:
> > On 2007-10-31 06:51:30 -0600, Bill Lear wrote:
> > 
> > > I don't remember this dependence from earlier versions of git. I
> > > have been running git 1.4.xx on this machine for a while...
> > 
> > When you clone with -l, git uses cpio to hardlink to the original
> > repository. What has changed is that -l is now used by default when
> > cloning a repository that's accessed via the file system (as opposed
> > to over some network protocol).
> 
> Why cpio? What is wrong with ln(1) (every Unix should have one) or
> link(2) ?

Since git-clone is not yet a builtin, and is actually a shell script, it
makes more sense to use cpio than ln.

Mike

^ permalink raw reply

* Re: [PATCH 1/1] Add --first-parent support to interactive rebase.
From: Björn Steinbrink @ 2007-10-31 19:50 UTC (permalink / raw)
  To: Jeff King
  Cc: Dmitry Potapov, Karl Hasselström, Junio C Hamano,
	Johannes.Schindelin, git
In-Reply-To: <20071031180557.GA12211@coredump.intra.peff.net>

On 2007.10.31 14:05:57 -0400, Jeff King wrote:
> On Wed, Oct 31, 2007 at 05:36:41PM +0300, Dmitry Potapov wrote:
> 
> > Hmm... I looked at the mail again and I cannot see where 8859-1 is
> > specified. It seems that context encoding is not specified at all.
> > Of course, it is incorrect to use non ASCII characters in a mail
> > without specifying encoding. Apparently, because I use utf-8 in the
> > terminal, the Sign-off line displays correctly for me, so I did not
> > notice the problem. Sorry for the noise...
> 
> It is our old friend vger adding the iso-8859-1 header, I think, since
> no encoding was specified.
> 
> I think the problem is that git-format-patch only decides whether to
> append a MIME header based on the commit message contents; it does not
> take the Signed-Off-By into account. This may also be the cause of the
> recent complaints from Matti Aarnio.

Yep, that's it. If the Signed-Off-By was added by commit -s, it works,
while format-patch -s causes the header to be missing, although the
Signed-Off-By is utf-8 encoded. Will try to remember that.

Thanks,
Björn

^ permalink raw reply

* Re: Newbie: report of first experience with git-rebase.
From: Björn Steinbrink @ 2007-10-31 19:57 UTC (permalink / raw)
  To: Sergei Organov; +Cc: git
In-Reply-To: <87d4uv3wh1.fsf@osv.gnss.ru>

On 2007.10.31 22:39:06 +0300, Sergei Organov wrote:
> Hello,
> 
> I've made my first attempt at tracking my changes to upstream git
> repository using git-fetch/git-rebase workflow. I did three commits to
> my master branch, and then upstream incorporated two of them in slightly
> modified form, so that some conflicts are to be expected. I did
> git-fetch followed by git-rebase, and finally have got the end result I
> hoped for, but there were some confusion along the way. I think I'd post
> the log of the session here along with my thoughts so that an interested
> person could see how it works for a newbie (my thoughts and non-git
> actions at the time of rebasing are marked with 'me>' prefix):
> 
> $ git fetch
> [...]
> $ git rebase origin
> First, rewinding head to replay your work on top of it...
> HEAD is now at 9c51414... Merge branch 'maint' into HEAD
> 
> Applying Fix a typo.
> 
> Wrote tree f5b2feefc021486eae9d2d84c69e0d6ead027a9d
> Committed: 983e907b1360c17c7ac925d6035d82cc7243f406
> 
> Applying Use new syntax (-m option) for git-merge.
> 
> error: patch failed: Documentation/core-tutorial.txt:878
> error: Documentation/core-tutorial.txt: patch does not apply
> Using index info to reconstruct a base tree...
> Falling back to patching base and 3-way merge...
> Auto-merged Documentation/core-tutorial.txt
> CONFLICT (content): Merge conflict in Documentation/core-tutorial.txt
> Failed to merge in the changes.
> Patch failed at 0002.
> 
> When you have resolved this problem run "git rebase --continue".
> If you would prefer to skip this patch, instead run "git rebase --skip".
> To restore the original branch and stop rebasing run "git rebase --abort".
> 
> me> Nice, this conflict is expected.
> me> Editing Documentation/core-tutorial.txt to resolve the
> me> conflict... Conflict is resolved so that the working file matches
> me> upstream version.
> 
> $ git rebase --continue
> You must edit all merge conflicts and then
> mark them as resolved using git add
> 
> me> Nice helpful message, -- need to do git-add
> 
> $ git add Documentation/core-tutorial.txt
> $ git rebase --continue
> 
> Applying Use new syntax (-m option) for git-merge.
> 
> No changes - did you forget to use 'git add'?
> 
> When you have resolved this problem run "git rebase --continue".
> If you would prefer to skip this patch, instead run "git rebase --skip".
> To restore the original branch and stop rebasing run "git rebase --abort".
> 
> me> What?! I just did the git-add! Moreover, before I did git-add, the
> me> error was different and helpful. Something went wrong? 
> me> Well, it's unlikely, but maybe I made a mistake of not specifying
> me> the 'origin'?
> 
> $ git rebase --continue origin
> 
> Applying Use new syntax (-m option) for git-merge.
> 
> No changes - did you forget to use 'git add'?
> 
> When you have resolved this problem run "git rebase --continue".
> If you would prefer to skip this patch, instead run "git rebase --skip".
> To restore the original branch and stop rebasing run "git rebase --abort".
> 
> me> No luck :( A few seconds of thinking... Hmm... no-op patch, do I
> me> need to skip it? Let's try the --skip:
> 
> $ git rebase --skip
> 
> Applying Fix SYNOPSIS.
> 
> error: patch failed: Documentation/git-merge.txt:10
> error: Documentation/git-merge.txt: patch does not apply
> Using index info to reconstruct a base tree...
> Falling back to patching base and 3-way merge...
> Auto-merged Documentation/git-merge.txt
> CONFLICT (content): Merge conflict in Documentation/git-merge.txt
> Failed to merge in the changes.
> Patch failed at 0003.
> 
> When you have resolved this problem run "git rebase --continue".
> If you would prefer to skip this patch, instead run "git rebase --skip".
> To restore the original branch and stop rebasing run "git rebase --abort".
> 
> me> Aha, that's it! But why git didn't just skip the no-op patch

It wasn't a no-op patch. It had conflicts which you resolved to the
upstream version and _then_ you had a no-op.

> me> automatically? Well, anyway , now I have a new expected conflict,
> me> and I'm sure I just want to skip this patch, so let's try exactly
> me> that:
> 
> $ git rebase --skip
> Dirty index: cannot apply patches (dirty: Documentation/git-merge.txt)
> 
> me> No luck :( Well, let's go the long way, -- edit conflicting
> me> Documentation/git-merge.txt (so that it matches upstream),
> 
> $ git add Documentation/git-merge.txt
> $ git rebase --skip
> Nothing to do.
> 
> me> Well, I already knew this will work, but why should I edit the file
> me> and then git-add it just to skip the patch? Is there better way?
> me> Anyway, the "Nothing to do." above is slightly confusing, -- did it
> me> actually skip the patch? So let's check the result:

There seems to be some bug in rebase that makes it fail in this case.
Someone on #git also reported that --abort failed to reset his branch to
the old head in a similar case, but I didn't manage to reproduce that
yet (well, I didn't try that hard), so I don't know if it's really a bug
or a misuse by that guy.

Björn

^ permalink raw reply

* [PATCH] Don't use cpio in git-clone when not installed
From: Mike Hommey @ 2007-10-31 20:05 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano


Signed-off-by: Mike Hommey <mh@glandium.org>
---
 git-clone.sh |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/git-clone.sh b/git-clone.sh
index 0ea3c24..57e96ae 100755
--- a/git-clone.sh
+++ b/git-clone.sh
@@ -191,7 +191,9 @@ fi
 # it is local
 if base=$(get_repo_base "$repo"); then
 	repo="$base"
-	local=yes
+	if type cpio > /dev/null 2>&1; then
+		local=yes
+	fi
 fi
 
 dir="$2"
-- 
1.5.3.4

^ permalink raw reply related

* Re: [PATCH] Don't use cpio in git-clone when not installed
From: Mike Hommey @ 2007-10-31 20:10 UTC (permalink / raw)
  To: git
In-Reply-To: <1193861145-20357-1-git-send-email-mh@glandium.org>

Damn, and I forgot git-send-email doesn't add the <> to In-Reply-To.

Mike

^ permalink raw reply

* [PATCH] Get rid of cpio in git-clone (was: Re: cpio command not found)
From: Erik Mouw @ 2007-10-31 20:14 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Karl Hasselstr?m, Bill Lear, git
In-Reply-To: <Pine.LNX.4.64.0710311420330.4362@racer.site>

[-- Attachment #1: Type: text/plain, Size: 2046 bytes --]

On Wed, Oct 31, 2007 at 02:20:47PM +0000, Johannes Schindelin wrote:
> On Wed, 31 Oct 2007, Erik Mouw wrote:
> 
> > On Wed, Oct 31, 2007 at 02:30:39PM +0100, Karl Hasselstr?m wrote:
> > > On 2007-10-31 06:51:30 -0600, Bill Lear wrote:
> > > 
> > > > I don't remember this dependence from earlier versions of git. I 
> > > > have been running git 1.4.xx on this machine for a while...
> > > 
> > > When you clone with -l, git uses cpio to hardlink to the original 
> > > repository. What has changed is that -l is now used by default when 
> > > cloning a repository that's accessed via the file system (as opposed 
> > > to over some network protocol).
> > 
> > Why cpio? What is wrong with ln(1) (every Unix should have one) or
> > link(2) ?
> 
> Patch, please?

Here you go.

Remove dependency on cpio for git-clone. Apparently some POSIX systems
out there don't have cpio, just assume cp is there.

Signed-off-by: Erik Mouw <mouw@nl.linux.org>

diff --git a/INSTALL b/INSTALL
index f1eb404..9074563 100644
--- a/INSTALL
+++ b/INSTALL
@@ -79,8 +79,7 @@ Issues of note:
 	- "perl" and POSIX-compliant shells are needed to use most of
 	  the barebone Porcelainish scripts.
 
-	- "cpio" is used by git-merge for saving and restoring the index,
-	  and by git-clone when doing a local (possibly hardlinked) clone.
+	- "cpio" is used by git-merge for saving and restoring the index.
 
  - Some platform specific issues are dealt with Makefile rules,
    but depending on your specific installation, you may not
diff --git a/git-clone.sh b/git-clone.sh
index 0ea3c24..061534c 100755
--- a/git-clone.sh
+++ b/git-clone.sh
@@ -294,7 +294,7 @@ yes)
 			fi
 		fi &&
 		cd "$repo" &&
-		find objects -depth -print | cpio -pumd$l "$GIT_DIR/" || exit 1
+		cp -Rp$l objects/ "$GIT_DIR/" || exit 1
 	fi
 	git-ls-remote "$repo" >"$GIT_DIR/CLONE_HEAD" || exit 1
 	;;



-- 
They're all fools. Don't worry. Darwin may be slow, but he'll
eventually get them. -- Matthew Lammers in alt.sysadmin.recovery

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply related

* Bug in git-show-branch, or in core-tutorial?
From: Sergei Organov @ 2007-10-31 20:17 UTC (permalink / raw)
  To: git

Or is it me who needs a fix?

[Sorry, this is roughly a repeat of my earlier post
<http://permalink.gmane.org/gmane.comp.version-control.git/62493>
I didn't get any answer to, and I'm trying once more to attract
your attention to the issue.]

Please consider the following quote starting at core-tutorial.txt:933
(emphasis is mine):

<quote>
------------------------------------------------
$ git show-branch --topo-order master mybranch
* [master] Merge work in mybranch
 ! [mybranch] Some work.
--
-  [master] Merge work in mybranch
*+ [mybranch] Some work.
------------------------------------------------

The first two lines indicate that it is showing the two branches
and the first line of the commit log message from their
top-of-the-tree commits, you are currently on `master` branch
(notice the asterisk `\*` character), and the first column for
the later output lines is used to show commits contained in the
`master` branch, and the second column for the `mybranch`
branch. *Three* commits are shown along with their log messages.
All of them have non blank characters in the first column (`*`
shows an ordinary commit on the current branch, `-` is a merge commit), which
means they are now part of the `master` branch. Only the "Some
work" commit has the plus `+` character in the second column,
because `mybranch` has not been merged to incorporate these
commits from the master branch.  The string inside brackets
before the commit log message is a short name you can use to
name the commit.  In the above example, 'master' and 'mybranch'
are branch heads.  '*master~1*' is the first parent of 'master'
branch head.
</quote>

You see, there are only *two* commits shown by git-show-branch while
description mentions *three* of them, and there is no 'master~1' commit
in the git-show-branch output while description does mention it.

I've replayed all the tutorial up to this point, and the git-show-branch
output matches those in the tutorial exactly, but then the explanation
text makes little sense? On the other hand, the state of the repo
suggests that there should be 'master~1' commit in the git-show-branch
output in accordance with the explanation, so it's git-show-branch that
is buggy? I'm totally confused :(

Please, help!

-- 
Sergei.

^ permalink raw reply

* Re: [PATCH] Get rid of cpio in git-clone (was: Re: cpio command not found)
From: Jeff King @ 2007-10-31 20:22 UTC (permalink / raw)
  To: Erik Mouw; +Cc: Johannes Schindelin, Karl Hasselstr?m, Bill Lear, git
In-Reply-To: <20071031201425.GA29332@gateway.home>

On Wed, Oct 31, 2007 at 09:14:25PM +0100, Erik Mouw wrote:

> > Patch, please?
> 
> Here you go.

Good, now we have something to critique. :)

> -		find objects -depth -print | cpio -pumd$l "$GIT_DIR/" || exit 1
> +		cp -Rp$l objects/ "$GIT_DIR/" || exit 1

cp -l isn't even close to portable. It's not in POSIX, and doesn't work
on (at least) Solaris.

I think Mike's patch (cpio if available, copy otherwise) is a reasonable
approach. If there are other methods (and I think cp -l is not
unreasonable for systems where it is supported and cpio is unavailable),
then perhaps it is worth trying them one by one and dropping back to
full copy if all fail.

-Peff

^ permalink raw reply

* Re: Newbie: report of first experience with git-rebase.
From: Sergei Organov @ 2007-10-31 20:28 UTC (permalink / raw)
  To: git
In-Reply-To: <20071031195702.GB24332@atjola.homenet>

Björn Steinbrink <B.Steinbrink@gmx.de> writes:
> On 2007.10.31 22:39:06 +0300, Sergei Organov wrote:
>> Hello,
>> 
>> I've made my first attempt at tracking my changes to upstream git
>> repository using git-fetch/git-rebase workflow. I did three commits to
>> my master branch, and then upstream incorporated two of them in slightly
>> modified form, so that some conflicts are to be expected. I did
>> git-fetch followed by git-rebase, and finally have got the end result I
>> hoped for, but there were some confusion along the way. I think I'd post
>> the log of the session here along with my thoughts so that an interested
>> person could see how it works for a newbie (my thoughts and non-git
>> actions at the time of rebasing are marked with 'me>' prefix):
>> 
>> $ git fetch
>> [...]
>> $ git rebase origin
>> First, rewinding head to replay your work on top of it...
>> HEAD is now at 9c51414... Merge branch 'maint' into HEAD
>> 
>> Applying Fix a typo.
>> 
>> Wrote tree f5b2feefc021486eae9d2d84c69e0d6ead027a9d
>> Committed: 983e907b1360c17c7ac925d6035d82cc7243f406
>> 
>> Applying Use new syntax (-m option) for git-merge.
>> 
>> error: patch failed: Documentation/core-tutorial.txt:878
>> error: Documentation/core-tutorial.txt: patch does not apply
>> Using index info to reconstruct a base tree...
>> Falling back to patching base and 3-way merge...
>> Auto-merged Documentation/core-tutorial.txt
>> CONFLICT (content): Merge conflict in Documentation/core-tutorial.txt
>> Failed to merge in the changes.
>> Patch failed at 0002.
>> 
>> When you have resolved this problem run "git rebase --continue".
>> If you would prefer to skip this patch, instead run "git rebase --skip".
>> To restore the original branch and stop rebasing run "git rebase --abort".
>> 
>> me> Nice, this conflict is expected.
>> me> Editing Documentation/core-tutorial.txt to resolve the
>> me> conflict... Conflict is resolved so that the working file matches
>> me> upstream version.
>> 
>> $ git rebase --continue
>> You must edit all merge conflicts and then
>> mark them as resolved using git add
>> 
>> me> Nice helpful message, -- need to do git-add
>> 
>> $ git add Documentation/core-tutorial.txt
>> $ git rebase --continue
>> 
>> Applying Use new syntax (-m option) for git-merge.
>> 
>> No changes - did you forget to use 'git add'?
>> 
>> When you have resolved this problem run "git rebase --continue".
>> If you would prefer to skip this patch, instead run "git rebase --skip".
>> To restore the original branch and stop rebasing run "git rebase --abort".
>> 
>> me> What?! I just did the git-add! Moreover, before I did git-add, the
>> me> error was different and helpful. Something went wrong? 
>> me> Well, it's unlikely, but maybe I made a mistake of not specifying
>> me> the 'origin'?
>> 
>> $ git rebase --continue origin
>> 
>> Applying Use new syntax (-m option) for git-merge.
>> 
>> No changes - did you forget to use 'git add'?
>> 
>> When you have resolved this problem run "git rebase --continue".
>> If you would prefer to skip this patch, instead run "git rebase --skip".
>> To restore the original branch and stop rebasing run "git rebase --abort".
>> 
>> me> No luck :( A few seconds of thinking... Hmm... no-op patch, do I
>> me> need to skip it? Let's try the --skip:
>> 
>> $ git rebase --skip
>> 
>> Applying Fix SYNOPSIS.
>> 
>> error: patch failed: Documentation/git-merge.txt:10
>> error: Documentation/git-merge.txt: patch does not apply
>> Using index info to reconstruct a base tree...
>> Falling back to patching base and 3-way merge...
>> Auto-merged Documentation/git-merge.txt
>> CONFLICT (content): Merge conflict in Documentation/git-merge.txt
>> Failed to merge in the changes.
>> Patch failed at 0003.
>> 
>> When you have resolved this problem run "git rebase --continue".
>> If you would prefer to skip this patch, instead run "git rebase --skip".
>> To restore the original branch and stop rebasing run "git rebase --abort".
>> 
>> me> Aha, that's it! But why git didn't just skip the no-op patch
>
> It wasn't a no-op patch. It had conflicts which you resolved to the
> upstream version and _then_ you had a no-op.

Yes, and that's the problem. Why 'git --continue' didn't just skip this
patch that *already became no-op* after conflict resolution and forced
me to explicitly use 'git --skip' instead?

This forces one to use 'git --skip' if the patch happens to become a
no-op after conflict resolution, and 'git --continue' otherwise. Why
this complication?

-- 
Sergei.

^ permalink raw reply

* [PATCH] cvsexportcommit: fix for commits that do not have parents
From: Brad King @ 2007-10-31 20:16 UTC (permalink / raw)
  To: git

Previously commits without parents would fail to export with a
message indicating that the commits had more than one parent.
Instead we should use the --root option for git-diff-tree in
place of a parent.

Signed-off-by: Brad King <brad.king@kitware.com>
---
 git-cvsexportcommit.perl |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/git-cvsexportcommit.perl b/git-cvsexportcommit.perl
index f284c88..7548cc0 100755
--- a/git-cvsexportcommit.perl
+++ b/git-cvsexportcommit.perl
@@ -82,6 +82,7 @@ foreach my $line (@commit) {
     }
 }

+my $noparent = "0000000000000000000000000000000000000000";
 if ($parent) {
     my $found;
     # double check that it's a valid parent
@@ -95,8 +96,10 @@ if ($parent) {
 } else { # we don't have a parent from the cmdline...
     if (@parents == 1) { # it's safe to get it from the commit
 	$parent = $parents[0];
-    } else { # or perhaps not!
-	die "This commit has more than one parent -- please name the parent you want to use explicitly";
+    } elsif (@parents == 0) { # there is no parent
+        $parent = $noparent;
+    } else { # cannot choose automatically from multiple parents
+        die "This commit has more than one parent -- please name the parent you want to use explicitly";
     }
 }

@@ -116,7 +119,11 @@ if ($opt_a) {
 }
 close MSG;

-`git-diff-tree --binary -p $parent $commit >.cvsexportcommit.diff`;# || die "Cannot diff";
+if ($parent == $noparent) {
+    `git-diff-tree --binary -p --root $commit >.cvsexportcommit.diff`;# || die "Cannot diff";
+} else {
+    `git-diff-tree --binary -p $parent $commit >.cvsexportcommit.diff`;# || die "Cannot diff";
+}

 ## apply non-binary changes

-- 
1.5.3.2

^ permalink raw reply related

* Re: remote#branch
From: Jeff King @ 2007-10-31 20:47 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: David Kastrup, Jakub Narebski, git
In-Reply-To: <alpine.LFD.0.999.0710310816180.30120@woody.linux-foundation.org>

On Wed, Oct 31, 2007 at 08:28:36AM -0700, Linus Torvalds wrote:

> Because we don't care! This is *exactly* why I brought up the whole 
> discussion about "interoperability with a web browser", and pointed out 
> that there is no such thing *anyway*, since a GIT URL is generally not 
> suitable for browsing _regardless_ of any encoding issues!
> 
> So it doesn't matter one whit if a mail client recognizes GIT URL's or 
> not! Because the mail client cannot do the right thing with them anyway, 
> and would generally think that it's something that it should highlight so 
> that you can browse it!

Two points:

 1. Just because _your_ mail client can't do anything useful with git
    URLs^H^H^H^H repo specifications, doesn't mean that others can't.

 2. You are conflating syntax and semantics. Think of the task I
    mentioned as two subtasks: pulling the location specifier from the
    email, and then doing something useful with it (in this case,
    git-cloning it it). The first subtask depends _only_ on a parseable
    syntax. The user can provide the context necessary for accomplishing
    the second subtask.

For example, consider a terminal that, upon pressing some keyboard
combination, will highlight the first URL-ish looking blob on the
screen, prompt you for a command, and then execute '$command $url'.  The
terminal doesn't have to know the semantics of the blob, but it has to
know the syntax. The user provides the semantics.

And yes, such a terminal exists, and I'm using it right now.

> Besides, you generally shouldn't use http for git URL's in the first 
> place, and they are very much a secondary citizen. Yes, some people use 
> them because they have firewall issues, and they *work*, but giving them 
> as examples of GIT URL's and discussing them as it they were a big deal is 
> just *stupid* when no other - more realistic - git url works that way 
> anyway.

The example above is equally applicable to git:// URLs. As it is to
host:path specifiers, although obviously that is a syntax that the
highlighter would have to recognize. But the point is that by following
established syntaxes, you don't have to write a git-repo-specifier
syntax parser; it comes for free (and isn't that, after all, the entire
_point_ of URLs?).

> This was the whole and only point of my "interoperability" thing. The GIT 
> URL's - even when they are perfectly well-formed URL's (which is basically 
> 100% of the time, since no current git server tends to put things like 
> spaces in the path anyway) - are simply in a different "space" than most 
> other URL's.

Sure, you need context to use them correctly. But that doesn't
necessarily mean you should just give up on the syntax part. I would
rather the computer do half of the task and let me finish it than make
me do the whole thing.

> You cannot feed them to a web browser or a file browser anyway, since the 
> URL is actually mal-formed (on purpose) in *another* and more fundamental 
> way: it doesn't say what the "application domain" is, since it basically 
> just assumes that the application domain is git, and the "scheme" part of 
> the URL really talks only about the _protocol_, not about the fact that 
> it's a git thing.
> 
> So if you wanted to be inter-operable, you'd have add the "git" part to 
> the scheme, and do the (insane, in my opinion) cogito thing with 
> "git+http://xyz.hjashja/" thing!

Yes, if you did that, you could automate _both_ parts of the task. But
again, that doesn't mean there isn't value to automating the first part
But that aside, even git+http doesn't solve all of your problems,
because it doesn't say _what_ you want to do with the location. Web
browsers just assume you want to fetch and view a location. But other
tools which accept URLs might perform _other_ actions on a given
location. So URLs really are a "subject" that can be operated on. It's
just that we are most accustomed to seeing them used by the "retrieve
this and display it" tool.

>  - the only way to make git interoperate would be to be user-UNfriendly 
>    with stupid markers that no git program really needs or wants, and by 
>    making the escaping depend on the form of the GIT URL.

Some git specifiers clearly look like URLs. Why not accept URL encoding
for them? And if there are characters that _should_ have been encoded by
URL encoding standards, treat them as if they had been encoded (i.e.,
handing 'http://foo.tld/repo with space' would be treated the same as
'http://foo.tld/repo%20with%20space'). This means that most unencoded
repos will behave exactly the same, but we are more liberal in wht we
accept. The exception is that repos with a '%' in the specifier will
parse differently (i.e., if you actually had a repo with the literal
characters '%20' in it, it will no parse).

Yes, this means that if you have a bizarre repo name, you can't
necessarily switch between host:file syntax and git:// syntax by simple
cut and paste. But you really can't _anyway_, since there is no
guarantee that they are rooted at the same location, or have the same
view of the filesystem.

> Personally, I think it's a much better idea to just be git-specific. 

Then why in the world did you choose a specifier syntax that looks
_exactly_ like a URL?

-Peff

^ permalink raw reply

* [PATCH] cvsexportcommit: fix for commits that do not have parents
From: Brad King @ 2007-10-31 20:55 UTC (permalink / raw)
  To: git

Previously commits without parents would fail to export with a
message indicating that the commits had more than one parent.
Instead we should use the --root option for git-diff-tree in
place of a parent.

Signed-off-by: Brad King <brad.king@kitware.com>
---
This is a corrected version of the patch I previously posted which had a typo.
 git-cvsexportcommit.perl |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/git-cvsexportcommit.perl b/git-cvsexportcommit.perl
index f284c88..26844af 100755
--- a/git-cvsexportcommit.perl
+++ b/git-cvsexportcommit.perl
@@ -82,6 +82,7 @@ foreach my $line (@commit) {
     }
 }

+my $noparent = "0000000000000000000000000000000000000000";
 if ($parent) {
     my $found;
     # double check that it's a valid parent
@@ -95,8 +96,10 @@ if ($parent) {
 } else { # we don't have a parent from the cmdline...
     if (@parents == 1) { # it's safe to get it from the commit
 	$parent = $parents[0];
-    } else { # or perhaps not!
-	die "This commit has more than one parent -- please name the parent you want to use explicitly";
+    } elsif (@parents == 0) { # there is no parent
+        $parent = $noparent;
+    } else { # cannot choose automatically from multiple parents
+        die "This commit has more than one parent -- please name the parent you want to use explicitly";
     }
 }

@@ -116,7 +119,11 @@ if ($opt_a) {
 }
 close MSG;

-`git-diff-tree --binary -p $parent $commit >.cvsexportcommit.diff`;# || die "Cannot diff";
+if ($parent eq $noparent) {
+    `git-diff-tree --binary -p --root $commit >.cvsexportcommit.diff`;# || die "Cannot diff";
+} else {
+    `git-diff-tree --binary -p $parent $commit >.cvsexportcommit.diff`;# || die "Cannot diff";
+}

 ## apply non-binary changes

-- 
1.5.3.2

^ permalink raw reply related

* Re: remote#branch
From: Linus Torvalds @ 2007-10-31 21:01 UTC (permalink / raw)
  To: Jeff King; +Cc: David Kastrup, Jakub Narebski, git
In-Reply-To: <20071031204729.GB13300@coredump.intra.peff.net>



On Wed, 31 Oct 2007, Jeff King wrote:
> 
> Yes, this means that if you have a bizarre repo name, you can't
> necessarily switch between host:file syntax and git:// syntax by simple
> cut and paste. But you really can't _anyway_, since there is no
> guarantee that they are rooted at the same location, or have the same
> view of the filesystem.

.. but in practice it works fine, especially for something like kernel.org 
where it really *is* the same filesystem, just mirrored out.

Also, more importantly, I think the quoting is *stupid*. It adds pointless 
code for absolutely zero gain. Are you going to unquote '/'? Or how about 
'~'?

It's much nicer to just not have the quoting issue at all. Repo names are 
names. Straight up.

> > Personally, I think it's a much better idea to just be git-specific. 
> 
> Then why in the world did you choose a specifier syntax that looks
> _exactly_ like a URL?

.. because it's a simple format, and it *works*. The same way INI config 
files are simple and *work*.

And because I didn't think I'd have to care about people who like f*cking 
around with idiotic details, rather than just get something that is useful 
and works!

If you don't like the fact that git doesn't quote, just don't use the 
magic characters. It's that easy. And if somebody quotes the '/', just 
tell him off for being an ass.

But git can and should do the *sane* thing.

			Linus

^ permalink raw reply

* Re: remote#branch
From: Andreas Ericsson @ 2007-10-31 21:07 UTC (permalink / raw)
  To: Jeff King; +Cc: Linus Torvalds, David Kastrup, Jakub Narebski, git
In-Reply-To: <20071031204729.GB13300@coredump.intra.peff.net>

Jeff King wrote:
> On Wed, Oct 31, 2007 at 08:28:36AM -0700, Linus Torvalds wrote:
> 
>> Because we don't care! This is *exactly* why I brought up the whole 
>> discussion about "interoperability with a web browser", and pointed out 
>> that there is no such thing *anyway*, since a GIT URL is generally not 
>> suitable for browsing _regardless_ of any encoding issues!
>>
>> So it doesn't matter one whit if a mail client recognizes GIT URL's or 
>> not! Because the mail client cannot do the right thing with them anyway, 
>> and would generally think that it's something that it should highlight so 
>> that you can browse it!
> 
> Two points:
> 
>  1. Just because _your_ mail client can't do anything useful with git
>     URLs^H^H^H^H repo specifications, doesn't mean that others can't.
> 
>  2. You are conflating syntax and semantics. Think of the task I
>     mentioned as two subtasks: pulling the location specifier from the
>     email, and then doing something useful with it (in this case,
>     git-cloning it it). The first subtask depends _only_ on a parseable
>     syntax. The user can provide the context necessary for accomplishing
>     the second subtask.
> 
> For example, consider a terminal that, upon pressing some keyboard
> combination, will highlight the first URL-ish looking blob on the
> screen, prompt you for a command, and then execute '$command $url'.  The
> terminal doesn't have to know the semantics of the blob, but it has to
> know the syntax. The user provides the semantics.
> 
> And yes, such a terminal exists, and I'm using it right now.
> 

Great. Now you just need a git-repo with an url that needs quoting, and
this discussion could at least potentially solve a real problem for someone.

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

^ permalink raw reply

* Re: [PATCH 10/10] push: teach push to be quiet if local ref is strict subset of remote ref
From: Steffen Prohaska @ 2007-10-31 21:09 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git
In-Reply-To: <7vve8nglrt.fsf@gitster.siamese.dyndns.org>


On Oct 31, 2007, at 7:51 PM, Junio C Hamano wrote:

> Steffen Prohaska <prohaska@zib.de> writes:
>
>> On Oct 31, 2007, at 9:45 AM, Junio C Hamano wrote:
>>
>>> I would not doubt it would be safer for _your_ workflow, but you
>>> should consider the risk of making things more cumbersome for
>>> workflows of others by enforcing that policy.
>>
>> Together with the '--create' flag it would be safer in all
>> cases, because it would always do _less_ than what git push
>> currently does. The safest choice would be if "git push"
>> refused to do anything until configured appropriately.
>>
>> "safer" is independent of the workflow.
>
> By your definition, a command that does not do anything by
> default is safer regardless of the workflow.
>
> That may be theoretically true --- it cannot do any harm by
> default.  But that is not useful.

If different workflows have contradicting needs, doing nothing
by default might be a good choice. Not theoretically, but in
practice.


>> I'm mainly interested in using git against a shared repo,
>> and make it as simple and as safe as possible to use in
>> such a setup. I suspect that git is more optimized for the
>> workflow used for the Linux kernel and for developing git,
>> which heavily rely on sending patches to mailing lists and
>> pulling from read-only repos.
>>
>
> You forgot a lot more important part.  Pushing into publishing
> repositories.  And the discussion is about git-push command.

Exactly, here are two examples:

If you push only to publishing repositories that are read
only by others, you'll never encounter the problem that
10/10 tried to solve. The publishing repository is never
changed by others. You are the only one who pushes to this
repository. Therefore the remote never advances unexpectedly.

A shared repository behaves differently. Others push to the
repository as well. Hence, branches can advance unexpectedly.


Another difference is the way changes are integrated. In
a workflow without shared repositories, only pull is used
for integration, while push in only used for publishing the
changes. After a push you always need to request someone else
to pull. For example:

- Alice publishes branch foo.
- Bob clones Alice's repository and checks out foo as his
   local branch bar.
- Bob later publishes his branch by pushing bar to his
   public repository and asks Alice to pull.
- Alice pulls bar from Bobs public repository and merges
   with foo. She then publishes the integrated changes
   by pushing foo to her public repository.

My point is: there is no need to push from branch bar to
branch foo. Alice and Bob both push to branches that are named
identical in their private and their public repositories.
Only pull is used to merge changes from the branch named bar
to the branch named foo.

This is different if you work with a shared repository. Bob
checks out the shared branch foo to his local branch bar and
later he needs to push bar back to the shared branch foo. Bob
needs to push changes from his local branch bar to the branch
foo in the remote repository, a branch with a different name.
This need does not emerge when working with two publishing
repositories, as described above.


This was the extended version of what I meant above. The
workflow used for the Linux kernel and for developing git is
focused on pull. Push is normally only used for publishing
branches under identical name. The interesting stuff happens
during the pull.

	Steffen

^ permalink raw reply

* Re: Newbie: report of first experience with git-rebase.
From: Johannes Schindelin @ 2007-10-31 21:12 UTC (permalink / raw)
  To: Sergei Organov; +Cc: git
In-Reply-To: <874pg73u6h.fsf@osv.gnss.ru>

Hi,

On Wed, 31 Oct 2007, Sergei Organov wrote:

> Yes, and that's the problem. Why 'git --continue' didn't just skip this 
> patch that *already became no-op* after conflict resolution and forced 
> me to explicitly use 'git --skip' instead?

Isn't that obvious?  To prevent you from accidentally losing a commit.

Ciao,
Dscho

^ permalink raw reply

* Re: unmerging feature branches
From: Alejandro Martinez Ruiz @ 2007-10-31 21:16 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: martin f krafft, git discussion list
In-Reply-To: <alpine.LFD.0.999.0710231026011.30120@woody.linux-foundation.org>

On Tue 23 Oct 2007, 10:40, Linus Torvalds wrote:
> 
> So a "revert" is fundamentally different from a "undo". Most of the time 
> 
> [cut]
> 
> So sometimes the behaviour of "git revert" will be exactly what people 
> expected and wanted ("good, I'll never get that commit again when I pull, 
> because I told git that I don't want that commit"), and sometimes it will 
> _not_ be what people expected and wanted ("oh, I didn't get that commit, 
> even though I was now ready for it - because I had reverted it back when I 
> was *not* ready for it").
> 
> See? The logic is exactly the same in both cases, but one was good, the 
> other bad, and the only difference was really the mindset of the user.
> 
> A tool can't ever get "mindset of the user" differences right. At least 
> not until we add the "esp option" ;)
> 
> So I really don't want to push this as a problem or deficiency, I think 
> it's a good thing. But it's a good thing only when people are *aware* of 
> what "revert" really means.

So how about an "undo" command or a switch for revert with a special
meaning like "hey, this one is a nice commit, but it ain't ready yet,
I'd like you to ignore I ever committed the thing when merging or
rebasing again, thanks"?

Alex

^ permalink raw reply

* [PATCH] Updated russian translation of git-gui
From: Alex Riesen @ 2007-10-31 21:16 UTC (permalink / raw)
  To: git; +Cc: Shawn O. Pearce

Fixed some spelling mistakes.
---
 po/ru.po |  516 +++++++++++++++++++++++++++++++++++---------------------------
 1 files changed, 292 insertions(+), 224 deletions(-)

diff --git a/po/ru.po b/po/ru.po
index b8e9447..6727a83 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: git-gui\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-10-10 04:04-0400\n"
+"POT-Creation-Date: 2007-10-31 21:23+0100\n"
 "PO-Revision-Date: 2007-10-22 22:30-0200\n"
 "Last-Translator: Alex Riesen <raa.lkml@gmail.com>\n"
 "Language-Team: Russian Translation <git@vger.kernel.org>\n"
@@ -15,33 +15,33 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: git-gui.sh:41 git-gui.sh:634 git-gui.sh:648 git-gui.sh:661 git-gui.sh:744
-#: git-gui.sh:763
+#: git-gui.sh:41 git-gui.sh:597 git-gui.sh:611 git-gui.sh:624 git-gui.sh:707
+#: git-gui.sh:726
 msgid "git-gui: fatal error"
 msgstr "git-gui: критическая ошибка"
 
-#: git-gui.sh:595
+#: git-gui.sh:558
 #, tcl-format
 msgid "Invalid font specified in %s:"
 msgstr "В %s установлен неверный шрифт:"
 
-#: git-gui.sh:620
+#: git-gui.sh:583
 msgid "Main Font"
 msgstr "Шрифт интерфейса"
 
-#: git-gui.sh:621
+#: git-gui.sh:584
 msgid "Diff/Console Font"
 msgstr "Шрифт консоли и изменений (diff)"
 
-#: git-gui.sh:635
+#: git-gui.sh:598
 msgid "Cannot find git in PATH."
 msgstr "git не найден в PATH."
 
-#: git-gui.sh:662
+#: git-gui.sh:625
 msgid "Cannot parse Git version string:"
 msgstr "Невозможно распознать строку версии Git: "
 
-#: git-gui.sh:680
+#: git-gui.sh:643
 #, tcl-format
 msgid ""
 "Git version cannot be determined.\n"
@@ -59,79 +59,79 @@ msgstr ""
 "\n"
 "Принять '%s' как версию 1.5.0?\n"
 
-#: git-gui.sh:853
+#: git-gui.sh:881
 msgid "Git directory not found:"
 msgstr "Каталог Git не найден:"
 
-#: git-gui.sh:860
+#: git-gui.sh:888
 msgid "Cannot move to top of working directory:"
 msgstr "Невозможно перейти к корню рабочего каталога репозитория: "
 
-#: git-gui.sh:867
+#: git-gui.sh:895
 msgid "Cannot use funny .git directory:"
 msgstr "Каталог.git испорчен: "
 
-#: git-gui.sh:872
+#: git-gui.sh:900
 msgid "No working directory"
 msgstr "Отсутствует рабочий каталог"
 
-#: git-gui.sh:1019
+#: git-gui.sh:1047
 msgid "Refreshing file status..."
 msgstr "Обновление информации о состоянии файлов..."
 
-#: git-gui.sh:1084
+#: git-gui.sh:1112
 msgid "Scanning for modified files ..."
 msgstr "Поиск измененных файлов..."
 
-#: git-gui.sh:1259 lib/browser.tcl:245
+#: git-gui.sh:1287 lib/browser.tcl:245
 msgid "Ready."
 msgstr "Готово."
 
-#: git-gui.sh:1525
+#: git-gui.sh:1553
 msgid "Unmodified"
 msgstr "Не изменено"
 
-#: git-gui.sh:1527
+#: git-gui.sh:1555
 msgid "Modified, not staged"
 msgstr "Изменено, не подготовлено"
 
-#: git-gui.sh:1528 git-gui.sh:1533
+#: git-gui.sh:1556 git-gui.sh:1561
 msgid "Staged for commit"
 msgstr "Подготовлено для сохранения"
 
-#: git-gui.sh:1529 git-gui.sh:1534
+#: git-gui.sh:1557 git-gui.sh:1562
 msgid "Portions staged for commit"
 msgstr "Части, подготовленные для сохранения"
 
-#: git-gui.sh:1530 git-gui.sh:1535
+#: git-gui.sh:1558 git-gui.sh:1563
 msgid "Staged for commit, missing"
 msgstr "Подготовлено для сохранения, отсутствует"
 
-#: git-gui.sh:1532
+#: git-gui.sh:1560
 msgid "Untracked, not staged"
 msgstr "Не отслеживается, не подготовлено"
 
-#: git-gui.sh:1537
+#: git-gui.sh:1565
 msgid "Missing"
 msgstr "Отсутствует"
 
-#: git-gui.sh:1538
+#: git-gui.sh:1566
 msgid "Staged for removal"
 msgstr "Подготовлено для удаления"
 
-#: git-gui.sh:1539
+#: git-gui.sh:1567
 msgid "Staged for removal, still present"
 msgstr "Подготовлено для удаления, еще не удалено"
 
-#: git-gui.sh:1541 git-gui.sh:1542 git-gui.sh:1543 git-gui.sh:1544
+#: git-gui.sh:1569 git-gui.sh:1570 git-gui.sh:1571 git-gui.sh:1572
 msgid "Requires merge resolution"
 msgstr "Требуется разрешение конфликта при объединении"
 
-#: git-gui.sh:1579
+#: git-gui.sh:1607
 msgid "Starting gitk... please wait..."
 msgstr "Запускается gitk... пожалуйста, ждите..."
 
-#: git-gui.sh:1588
+#: git-gui.sh:1616
 #, tcl-format
 msgid ""
 "Unable to start gitk:\n"
@@ -142,296 +142,295 @@ msgstr ""
 "\n"
 "%s не существует"
 
-#: git-gui.sh:1788 lib/choose_repository.tcl:32
+#: git-gui.sh:1816 lib/choose_repository.tcl:35
 msgid "Repository"
 msgstr "Репозиторий"
 
-#: git-gui.sh:1789
+#: git-gui.sh:1817
 msgid "Edit"
 msgstr "Редактировать"
 
-#: git-gui.sh:1791 lib/choose_rev.tcl:560
+#: git-gui.sh:1819 lib/choose_rev.tcl:560
 msgid "Branch"
 msgstr "Ветвь"
 
-#: git-gui.sh:1794 lib/choose_rev.tcl:547
+#: git-gui.sh:1822 lib/choose_rev.tcl:547
 msgid "Commit@@noun"
 msgstr "Состояние"
 
-#: git-gui.sh:1797 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
+#: git-gui.sh:1825 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
 msgid "Merge"
 msgstr "Объединить"
 
-#: git-gui.sh:1798 lib/choose_rev.tcl:556
+#: git-gui.sh:1826 lib/choose_rev.tcl:556
 msgid "Remote"
 msgstr "Внешние репозитории"
 
-#: git-gui.sh:1807
+#: git-gui.sh:1835
 msgid "Browse Current Branch's Files"
 msgstr "Просмотреть файлы текущей ветви"
 
-#: git-gui.sh:1811
+#: git-gui.sh:1839
 msgid "Browse Branch Files..."
 msgstr "Показать файлы ветви..."
 
-#: git-gui.sh:1816
+#: git-gui.sh:1844
 msgid "Visualize Current Branch's History"
 msgstr "История текущей ветви наглядно"
 
-#: git-gui.sh:1820
+#: git-gui.sh:1848
 msgid "Visualize All Branch History"
 msgstr "История всех ветвей наглядно"
 
-#: git-gui.sh:1827
+#: git-gui.sh:1855
 #, tcl-format
 msgid "Browse %s's Files"
 msgstr "Показать файлы ветви %s"
 
-#: git-gui.sh:1829
+#: git-gui.sh:1857
 #, tcl-format
 msgid "Visualize %s's History"
 msgstr "История ветви %s наглядно"
 
-#: git-gui.sh:1834 lib/database.tcl:27 lib/database.tcl:67
+#: git-gui.sh:1862 lib/database.tcl:27 lib/database.tcl:67
 msgid "Database Statistics"
 msgstr "Статистика базы данных"
 
-#: git-gui.sh:1837 lib/database.tcl:34
+#: git-gui.sh:1865 lib/database.tcl:34
 msgid "Compress Database"
 msgstr "Сжать базу данных"
 
-#: git-gui.sh:1840
+#: git-gui.sh:1868
 msgid "Verify Database"
 msgstr "Проверить базу данных"
 
-#: git-gui.sh:1847 git-gui.sh:1851 git-gui.sh:1855 lib/shortcut.tcl:9
-#: lib/shortcut.tcl:45 lib/shortcut.tcl:84
+#: git-gui.sh:1875 git-gui.sh:1879 git-gui.sh:1883 lib/shortcut.tcl:7
+#: lib/shortcut.tcl:39 lib/shortcut.tcl:71
 msgid "Create Desktop Icon"
 msgstr "Создать ярлык на рабочем столе"
 
-#: git-gui.sh:1860 lib/choose_repository.tcl:36 lib/choose_repository.tcl:95
+#: git-gui.sh:1888 lib/choose_repository.tcl:176 lib/choose_repository.tcl:184
 msgid "Quit"
 msgstr "Выход"
 
-#: git-gui.sh:1867
+#: git-gui.sh:1895
 msgid "Undo"
 msgstr "Отменить"
 
-#: git-gui.sh:1870
+#: git-gui.sh:1898
 msgid "Redo"
 msgstr "Повторить"
 
-#: git-gui.sh:1874 git-gui.sh:2366
+#: git-gui.sh:1902 git-gui.sh:2395
 msgid "Cut"
 msgstr "Вырезать"
 
-#: git-gui.sh:1877 git-gui.sh:2369 git-gui.sh:2440 git-gui.sh:2512
+#: git-gui.sh:1905 git-gui.sh:2398 git-gui.sh:2469 git-gui.sh:2541
 #: lib/console.tcl:67
 msgid "Copy"
 msgstr "Копировать"
 
-#: git-gui.sh:1880 git-gui.sh:2372
+#: git-gui.sh:1908 git-gui.sh:2401
 msgid "Paste"
 msgstr "Вставить"
 
-#: git-gui.sh:1883 git-gui.sh:2375 lib/branch_delete.tcl:26
+#: git-gui.sh:1911 git-gui.sh:2404 lib/branch_delete.tcl:26
 #: lib/remote_branch_delete.tcl:38
 msgid "Delete"
 msgstr "Удалить"
 
-#: git-gui.sh:1887 git-gui.sh:2379 git-gui.sh:2516 lib/console.tcl:69
+#: git-gui.sh:1915 git-gui.sh:2408 git-gui.sh:2545 lib/console.tcl:69
 msgid "Select All"
 msgstr "Выделить все"
 
-#: git-gui.sh:1896
+#: git-gui.sh:1924
 msgid "Create..."
 msgstr "Создать..."
 
-#: git-gui.sh:1902
+#: git-gui.sh:1930
 msgid "Checkout..."
 msgstr "Перейти..."
 
-#: git-gui.sh:1908
+#: git-gui.sh:1936
 msgid "Rename..."
 msgstr "Переименовать..."
 
-#: git-gui.sh:1913 git-gui.sh:2012
+#: git-gui.sh:1941 git-gui.sh:2040
 msgid "Delete..."
 msgstr "Удалить..."
 
-#: git-gui.sh:1918
+#: git-gui.sh:1946
 msgid "Reset..."
 msgstr "Сбросить..."
 
-#: git-gui.sh:1930 git-gui.sh:2313
+#: git-gui.sh:1958 git-gui.sh:2342
 msgid "New Commit"
 msgstr "Новое состояние"
 
-#: git-gui.sh:1938 git-gui.sh:2320
+#: git-gui.sh:1966 git-gui.sh:2349
 msgid "Amend Last Commit"
 msgstr "Исправить последнее состояние"
 
-#: git-gui.sh:1947 git-gui.sh:2280 lib/remote_branch_delete.tcl:99
+#: git-gui.sh:1975 git-gui.sh:2309 lib/remote_branch_delete.tcl:99
 msgid "Rescan"
 msgstr "Перечитать"
 
-#: git-gui.sh:1953
+#: git-gui.sh:1981
 msgid "Stage To Commit"
 msgstr "Подготовить для сохранения"
 
-#: git-gui.sh:1958
+#: git-gui.sh:1986
 msgid "Stage Changed Files To Commit"
 msgstr "Подготовить измененные файлы для сохранения"
 
-#: git-gui.sh:1964
+#: git-gui.sh:1992
 msgid "Unstage From Commit"
 msgstr "Убрать из подготовленного"
 
-#: git-gui.sh:1969 lib/index.tcl:352
+#: git-gui.sh:1997 lib/index.tcl:393
 msgid "Revert Changes"
 msgstr "Отменить изменения"
 
-#: git-gui.sh:1976 git-gui.sh:2292 git-gui.sh:2390
+#: git-gui.sh:2004 git-gui.sh:2321 git-gui.sh:2419
 msgid "Sign Off"
 msgstr "Подписать"
 
-#: git-gui.sh:1980 git-gui.sh:2296
+#: git-gui.sh:2008 git-gui.sh:2325
 msgid "Commit@@verb"
 msgstr "Сохранить"
 
-#: git-gui.sh:1991
+#: git-gui.sh:2019
 msgid "Local Merge..."
 msgstr "Локальное объединение..."
 
-#: git-gui.sh:1996
+#: git-gui.sh:2024
 msgid "Abort Merge..."
 msgstr "Прервать объединение..."
 
-#: git-gui.sh:2008
+#: git-gui.sh:2036
 msgid "Push..."
 msgstr "Отправить..."
 
-#: git-gui.sh:2019 lib/choose_repository.tcl:41
-#, fuzzy
+#: git-gui.sh:2047 lib/choose_repository.tcl:40
 msgid "Apple"
 msgstr ""
 
-#: git-gui.sh:2022 git-gui.sh:2044 lib/about.tcl:13
-#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:50
+#: git-gui.sh:2050 git-gui.sh:2072 lib/about.tcl:13
+#: lib/choose_repository.tcl:43 lib/choose_repository.tcl:49
 #, tcl-format
 msgid "About %s"
 msgstr "О %s"
 
-#: git-gui.sh:2026
+#: git-gui.sh:2054
 msgid "Preferences..."
 msgstr "Настройки..."
 
-#: git-gui.sh:2034 git-gui.sh:2558
+#: git-gui.sh:2062 git-gui.sh:2587
 msgid "Options..."
 msgstr "Настройки..."
 
-#: git-gui.sh:2040 lib/choose_repository.tcl:47
+#: git-gui.sh:2068 lib/choose_repository.tcl:46
 msgid "Help"
 msgstr "Помощь"
 
-#: git-gui.sh:2081
+#: git-gui.sh:2109
 msgid "Online Documentation"
 msgstr "Документация в интернете"
 
-#: git-gui.sh:2165
+#: git-gui.sh:2193
 #, tcl-format
 msgid "fatal: cannot stat path %s: No such file or directory"
 msgstr "критическая ошибка: %s: нет такого файла или каталога"
 
-#: git-gui.sh:2198
+#: git-gui.sh:2226
 msgid "Current Branch:"
 msgstr "Текущая ветвь:"
 
-#: git-gui.sh:2219
+#: git-gui.sh:2247
 msgid "Staged Changes (Will Commit)"
 msgstr "Подготовлено (будет сохранено)"
 
-#: git-gui.sh:2239
+#: git-gui.sh:2266
 msgid "Unstaged Changes"
 msgstr "Изменено (не будет сохранено)"
 
-#: git-gui.sh:2286
+#: git-gui.sh:2315
 msgid "Stage Changed"
 msgstr "Подготовить все"
 
-#: git-gui.sh:2302 lib/transport.tcl:93 lib/transport.tcl:182
+#: git-gui.sh:2331 lib/transport.tcl:93 lib/transport.tcl:182
 msgid "Push"
 msgstr "Отправить"
 
-#: git-gui.sh:2332
+#: git-gui.sh:2361
 msgid "Initial Commit Message:"
 msgstr "Комментарий к первому состоянию:"
 
-#: git-gui.sh:2333
+#: git-gui.sh:2362
 msgid "Amended Commit Message:"
 msgstr "Комментарий к исправленному состоянию:"
 
-#: git-gui.sh:2334
+#: git-gui.sh:2363
 msgid "Amended Initial Commit Message:"
 msgstr "Комментарий к исправленному первоначальному состоянию:"
 
-#: git-gui.sh:2335
+#: git-gui.sh:2364
 msgid "Amended Merge Commit Message:"
 msgstr "Комментарий к исправленному объединению:"
 
-#: git-gui.sh:2336
+#: git-gui.sh:2365
 msgid "Merge Commit Message:"
 msgstr "Комментарий к объединению:"
 
-#: git-gui.sh:2337
+#: git-gui.sh:2366
 msgid "Commit Message:"
 msgstr "Комментарий к состоянию:"
 
-#: git-gui.sh:2382 git-gui.sh:2520 lib/console.tcl:71
+#: git-gui.sh:2411 git-gui.sh:2549 lib/console.tcl:71
 msgid "Copy All"
 msgstr "Копировать все"
 
-#: git-gui.sh:2406 lib/blame.tcl:104
+#: git-gui.sh:2435 lib/blame.tcl:104
 msgid "File:"
 msgstr "Файл:"
 
-#: git-gui.sh:2508
+#: git-gui.sh:2537
 msgid "Refresh"
 msgstr "Обновить"
 
-#: git-gui.sh:2529
+#: git-gui.sh:2558
 msgid "Apply/Reverse Hunk"
 msgstr "Применить/Убрать изменение"
 
-#: git-gui.sh:2535
+#: git-gui.sh:2564
 msgid "Decrease Font Size"
 msgstr "Уменьшить размер шрифта"
 
-#: git-gui.sh:2539
+#: git-gui.sh:2568
 msgid "Increase Font Size"
 msgstr "Увеличить размер шрифта"
 
-#: git-gui.sh:2544
+#: git-gui.sh:2573
 msgid "Show Less Context"
 msgstr "Меньше контекста"
 
-#: git-gui.sh:2551
+#: git-gui.sh:2580
 msgid "Show More Context"
 msgstr "Больше контекста"
 
-#: git-gui.sh:2565
+#: git-gui.sh:2594
 msgid "Unstage Hunk From Commit"
 msgstr "Не сохранять часть"
 
-#: git-gui.sh:2567
+#: git-gui.sh:2596
 msgid "Stage Hunk For Commit"
 msgstr "Подготовить часть для сохранения"
 
-#: git-gui.sh:2586
+#: git-gui.sh:2615
 msgid "Initializing..."
 msgstr "Инициализация..."
 
-#: git-gui.sh:2677
+#: git-gui.sh:2706
 #, tcl-format
 msgid ""
 "Possible environment issues exist.\n"
@@ -448,7 +447,7 @@ msgstr ""
 "запущенными из %s\n"
 "\n"
 
-#: git-gui.sh:2707
+#: git-gui.sh:2736
 msgid ""
 "\n"
 "This is due to a known issue with the\n"
@@ -458,7 +457,7 @@ msgstr ""
 "Это известная проблема с Tcl,\n"
 "распространяемым Cygwin."
 
-#: git-gui.sh:2712
+#: git-gui.sh:2741
 #, tcl-format
 msgid ""
 "\n"
@@ -579,7 +578,7 @@ msgstr "Создание ветви"
 msgid "Create New Branch"
 msgstr "Создать новую ветвь"
 
-#: lib/branch_create.tcl:31 lib/choose_repository.tcl:199
+#: lib/branch_create.tcl:31 lib/choose_repository.tcl:375
 msgid "Create"
 msgstr "Создать"
 
@@ -732,9 +731,9 @@ msgstr "[На уровень выше]"
 msgid "Browse Branch Files"
 msgstr "Показать файлы ветви"
 
-#: lib/browser.tcl:277 lib/choose_repository.tcl:215
-#: lib/choose_repository.tcl:305 lib/choose_repository.tcl:315
-#: lib/choose_repository.tcl:811
+#: lib/browser.tcl:277 lib/choose_repository.tcl:391
+#: lib/choose_repository.tcl:482 lib/choose_repository.tcl:492
+#: lib/choose_repository.tcl:989
 msgid "Browse"
 msgstr "Показать"
 
@@ -788,7 +787,8 @@ msgstr "Рабочая область заблокирована другим п
 msgid ""
 "Last scanned state does not match repository state.\n"
 "\n"
-"Another Git program has modified this repository since the last scan.  A rescan must be performed before the current branch can be changed.\n"
+"Another Git program has modified this repository since the last scan.  A "
+"rescan must be performed before the current branch can be changed.\n"
 "\n"
 "The rescan will be automatically started now.\n"
 msgstr ""
@@ -822,11 +822,13 @@ msgstr "Ветвь '%s' остается текущей."
 msgid ""
 "You are no longer on a local branch.\n"
 "\n"
-"If you wanted to be on a branch, create one now starting from 'This Detached Checkout'."
+"If you wanted to be on a branch, create one now starting from 'This Detached "
+"Checkout'."
 msgstr ""
 "Вы находитесь не в локальной ветви.\n"
 "\n"
-"Если вы хотите снова вернуться к какой-нибудь ветви, создайте ее сейчас, начиная с 'Текущего отсоединенного состояния'."
+"Если вы хотите снова вернуться к какой-нибудь ветви, создайте ее сейчас, "
+"начиная с 'Текущего отсоединенного состояния'."
 
 #: lib/checkout_op.tcl:446
 #, tcl-format
@@ -856,19 +858,21 @@ msgstr "Наглядно"
 msgid ""
 "Failed to set current branch.\n"
 "\n"
-"This working directory is only partially switched.  We successfully updated your files, but failed to update an internal Git file.\n"
+"This working directory is only partially switched.  We successfully updated "
+"your files, but failed to update an internal Git file.\n"
 "\n"
 "This should not have occurred.  %s will now close and give up."
 msgstr ""
 "Не удалось установить текущую ветвь.\n"
 "\n"
-"Ваш рабочий каталог обновлен только частично. Были обновлены все файлы кроме служебных файлов Git. \n"
+"Ваш рабочий каталог обновлен только частично. Были обновлены все файлы кроме "
+"служебных файлов Git. \n"
 "\n"
 "Этого не должно было произойти. %s завершается."
 
 #: lib/choose_font.tcl:39
 msgid "Select"
-msgstr "Выделить все"
+msgstr "Выбрать"
 
 #: lib/choose_font.tcl:53
 msgid "Font Family"
@@ -890,210 +894,226 @@ msgstr ""
 "Это пример текста.\n"
 "Если Вам нравится этот текст, это может быть Ваш шрифт."
 
-#: lib/choose_repository.tcl:25
+#: lib/choose_repository.tcl:27
 msgid "Git Gui"
 msgstr ""
 
-#: lib/choose_repository.tcl:69 lib/choose_repository.tcl:204
+#: lib/choose_repository.tcl:80 lib/choose_repository.tcl:380
 msgid "Create New Repository"
 msgstr "Создать новый репозиторий"
 
-#: lib/choose_repository.tcl:74 lib/choose_repository.tcl:291
+#: lib/choose_repository.tcl:86
+msgid "New..."
+msgstr "Новый..."
+
+#: lib/choose_repository.tcl:93 lib/choose_repository.tcl:468
 msgid "Clone Existing Repository"
 msgstr "Склонировать существующий репозиторий"
 
-#: lib/choose_repository.tcl:79 lib/choose_repository.tcl:800
+#: lib/choose_repository.tcl:99
+msgid "Clone..."
+msgstr "Склонировать..."
+
+#: lib/choose_repository.tcl:106 lib/choose_repository.tcl:978
 msgid "Open Existing Repository"
 msgstr "Выбрать существующий репозиторий"
 
-#: lib/choose_repository.tcl:91
-msgid "Next >"
-msgstr "Дальше >"
+#: lib/choose_repository.tcl:112
+msgid "Open..."
+msgstr "Открыть..."
 
-#: lib/choose_repository.tcl:152
+#: lib/choose_repository.tcl:125
+msgid "Recent Repositories"
+msgstr "Недавние репозитории"
+
+#: lib/choose_repository.tcl:131
+msgid "Open Recent Repository:"
+msgstr "Открыть последний репозиторий"
+
+#: lib/choose_repository.tcl:294
 #, tcl-format
 msgid "Location %s already exists."
 msgstr "Путь '%s' уже существует."
 
-#: lib/choose_repository.tcl:158 lib/choose_repository.tcl:165
-#: lib/choose_repository.tcl:172
+#: lib/choose_repository.tcl:300 lib/choose_repository.tcl:307
+#: lib/choose_repository.tcl:314
 #, tcl-format
 msgid "Failed to create repository %s:"
 msgstr "Не удалось создать репозиторий %s:"
 
-#: lib/choose_repository.tcl:209 lib/choose_repository.tcl:309
+#: lib/choose_repository.tcl:385 lib/choose_repository.tcl:486
 msgid "Directory:"
 msgstr "Каталог:"
 
-#: lib/choose_repository.tcl:238 lib/choose_repository.tcl:363
-#: lib/choose_repository.tcl:834
+#: lib/choose_repository.tcl:415 lib/choose_repository.tcl:544
+#: lib/choose_repository.tcl:1013
 msgid "Git Repository"
 msgstr "Репозиторий"
 
-#: lib/choose_repository.tcl:253 lib/choose_repository.tcl:260
+#: lib/choose_repository.tcl:430 lib/choose_repository.tcl:437
 #, tcl-format
 msgid "Directory %s already exists."
 msgstr "Каталог '%s' уже существует."
 
-#: lib/choose_repository.tcl:265
+#: lib/choose_repository.tcl:442
 #, tcl-format
 msgid "File %s already exists."
 msgstr "Файл '%s' уже существует."
 
-#: lib/choose_repository.tcl:286
+#: lib/choose_repository.tcl:463
 msgid "Clone"
 msgstr "Склонировать"
 
-#: lib/choose_repository.tcl:299
+#: lib/choose_repository.tcl:476
 msgid "URL:"
 msgstr "Ссылка:"
 
-#: lib/choose_repository.tcl:319
+#: lib/choose_repository.tcl:496
 msgid "Clone Type:"
 msgstr "Тип клона:"
 
-#: lib/choose_repository.tcl:325
+#: lib/choose_repository.tcl:502
 msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
 msgstr "Стандартный (Быстрый, полуизбыточный, \"жесткие\" ссылки)"
 
-#: lib/choose_repository.tcl:331
+#: lib/choose_repository.tcl:508
 msgid "Full Copy (Slower, Redundant Backup)"
 msgstr "Полная копия (Медленный, создает резервную копию)"
 
-#: lib/choose_repository.tcl:337
+#: lib/choose_repository.tcl:514
 msgid "Shared (Fastest, Not Recommended, No Backup)"
 msgstr "Общий (Самый быстрый, не рекомендуется, без резервной копии)"
 
-#: lib/choose_repository.tcl:369 lib/choose_repository.tcl:418
-#: lib/choose_repository.tcl:560 lib/choose_repository.tcl:630
-#: lib/choose_repository.tcl:840 lib/choose_repository.tcl:848
+#: lib/choose_repository.tcl:550 lib/choose_repository.tcl:597
+#: lib/choose_repository.tcl:738 lib/choose_repository.tcl:808
+#: lib/choose_repository.tcl:1019 lib/choose_repository.tcl:1027
 #, tcl-format
 msgid "Not a Git repository: %s"
 msgstr "Каталог не является репозиторием: %s"
 
-#: lib/choose_repository.tcl:405
+#: lib/choose_repository.tcl:586
 msgid "Standard only available for local repository."
 msgstr "Стандартный клон возможен только для локального репозитория."
 
-#: lib/choose_repository.tcl:409
+#: lib/choose_repository.tcl:590
 msgid "Shared only available for local repository."
 msgstr "Общий клон возможен только для локального репозитория."
 
-#: lib/choose_repository.tcl:439
+#: lib/choose_repository.tcl:617
 msgid "Failed to configure origin"
 msgstr "Не могу сконфигурировать исходный репозиторий."
 
-#: lib/choose_repository.tcl:451
+#: lib/choose_repository.tcl:629
 msgid "Counting objects"
 msgstr "Считаю объекты"
 
-#: lib/choose_repository.tcl:452
-#, fuzzy
+#: lib/choose_repository.tcl:630
 msgid "buckets"
 msgstr ""
 
-#: lib/choose_repository.tcl:476
+#: lib/choose_repository.tcl:654
 #, tcl-format
 msgid "Unable to copy objects/info/alternates: %s"
 msgstr "Не могу скопировать objects/info/alternates: %s"
 
-#: lib/choose_repository.tcl:512
+#: lib/choose_repository.tcl:690
 #, tcl-format
 msgid "Nothing to clone from %s."
 msgstr "Нечего клонировать с %s."
 
-#: lib/choose_repository.tcl:514 lib/choose_repository.tcl:728
-#: lib/choose_repository.tcl:740
+#: lib/choose_repository.tcl:692 lib/choose_repository.tcl:906
+#: lib/choose_repository.tcl:918
 msgid "The 'master' branch has not been initialized."
 msgstr "Не инициализирована ветвь 'master'."
 
-#: lib/choose_repository.tcl:527
+#: lib/choose_repository.tcl:705
 msgid "Hardlinks are unavailable.  Falling back to copying."
 msgstr "\"Жесткие ссылки\" не доступны. Буду использовать копирование."
 
-#: lib/choose_repository.tcl:539
+#: lib/choose_repository.tcl:717
 #, tcl-format
 msgid "Cloning from %s"
 msgstr "Клонирование %s"
 
-#: lib/choose_repository.tcl:570
+#: lib/choose_repository.tcl:748
 msgid "Copying objects"
 msgstr "Копирование objects"
 
-#: lib/choose_repository.tcl:571
+#: lib/choose_repository.tcl:749
 msgid "KiB"
 msgstr "КБ"
 
-#: lib/choose_repository.tcl:595
+#: lib/choose_repository.tcl:773
 #, tcl-format
 msgid "Unable to copy object: %s"
 msgstr "Не могу скопировать объект: %s"
 
-#: lib/choose_repository.tcl:605
+#: lib/choose_repository.tcl:783
 msgid "Linking objects"
 msgstr "Создание ссылок на objects"
 
-#: lib/choose_repository.tcl:606
+#: lib/choose_repository.tcl:784
 msgid "objects"
 msgstr "объекты"
 
-#: lib/choose_repository.tcl:614
+#: lib/choose_repository.tcl:792
 #, tcl-format
 msgid "Unable to hardlink object: %s"
 msgstr "Не могу \"жестко связать\" объект: %s"
 
-#: lib/choose_repository.tcl:669
+#: lib/choose_repository.tcl:847
 msgid "Cannot fetch branches and objects.  See console output for details."
-msgstr "Не могу получить ветви и объекты. Дополнительная информация на консоли."
+msgstr ""
+"Не могу получить ветви и объекты. Дополнительная информация на консоли."
 
-#: lib/choose_repository.tcl:680
+#: lib/choose_repository.tcl:858
 msgid "Cannot fetch tags.  See console output for details."
 msgstr "Не могу получить метки. Дополнительная информация на консоли."
 
-#: lib/choose_repository.tcl:704
+#: lib/choose_repository.tcl:882
 msgid "Cannot determine HEAD.  See console output for details."
 msgstr "Не могу определить HEAD. Дополнительная информация на консоли."
 
-#: lib/choose_repository.tcl:713
+#: lib/choose_repository.tcl:891
 #, tcl-format
 msgid "Unable to cleanup %s"
 msgstr "Не могу очистить %s"
 
-#: lib/choose_repository.tcl:719
+#: lib/choose_repository.tcl:897
 msgid "Clone failed."
 msgstr "Клонирование не удалось."
 
-#: lib/choose_repository.tcl:726
+#: lib/choose_repository.tcl:904
 msgid "No default branch obtained."
 msgstr "Не было получено ветви по умолчанию."
 
-#: lib/choose_repository.tcl:737
+#: lib/choose_repository.tcl:915
 #, tcl-format
 msgid "Cannot resolve %s as a commit."
 msgstr "Не могу распознать %s как состояние."
 
-#: lib/choose_repository.tcl:749
+#: lib/choose_repository.tcl:927
 msgid "Creating working directory"
 msgstr "Создаю рабочий каталог"
 
-#: lib/choose_repository.tcl:750 lib/index.tcl:15 lib/index.tcl:80
-#: lib/index.tcl:149
+#: lib/choose_repository.tcl:928 lib/index.tcl:65 lib/index.tcl:127
+#: lib/index.tcl:193
 msgid "files"
 msgstr "файлов"
 
-#: lib/choose_repository.tcl:779
+#: lib/choose_repository.tcl:957
 msgid "Initial file checkout failed."
 msgstr "Не удалось получить начальное состояние файлов репозитория."
 
-#: lib/choose_repository.tcl:795
+#: lib/choose_repository.tcl:973
 msgid "Open"
 msgstr "Открыть"
 
-#: lib/choose_repository.tcl:805
+#: lib/choose_repository.tcl:983
 msgid "Repository:"
 msgstr "Репозиторий:"
 
-#: lib/choose_repository.tcl:854
+#: lib/choose_repository.tcl:1033
 #, tcl-format
 msgid "Failed to open repository %s:"
 msgstr "Не удалось открыть репозиторий %s:"
@@ -1116,7 +1136,7 @@ msgstr "Ветвь слежения"
 
 #: lib/choose_rev.tcl:84 lib/choose_rev.tcl:537
 msgid "Tag"
-msgstr "Метка"
+msgstr "Таг"
 
 #: lib/choose_rev.tcl:317
 #, tcl-format
@@ -1143,7 +1163,8 @@ msgstr "Ссылка"
 msgid ""
 "There is nothing to amend.\n"
 "\n"
-"You are about to create the initial commit.  There is no commit before this to amend.\n"
+"You are about to create the initial commit.  There is no commit before this "
+"to amend.\n"
 msgstr ""
 "Отсутствует состояние для исправления.\n"
 "\n"
@@ -1153,11 +1174,14 @@ msgstr ""
 msgid ""
 "Cannot amend while merging.\n"
 "\n"
-"You are currently in the middle of a merge that has not been fully completed.  You cannot amend the prior commit unless you first abort the current merge activity.\n"
+"You are currently in the middle of a merge that has not been fully "
+"completed.  You cannot amend the prior commit unless you first abort the "
+"current merge activity.\n"
 msgstr ""
 "Невозможно исправить состояние во время объединения.\n"
 "\n"
-"Текущее объединение не завершено. Невозможно исправить предыдущее сохраненное состояние не прерывая текущее объединение.\n"
+"Текущее объединение не завершено. Невозможно исправить предыдущее "
+"сохраненное состояние не прерывая текущее объединение.\n"
 
 #: lib/commit.tcl:49
 msgid "Error loading commit data for amend:"
@@ -1169,19 +1193,21 @@ msgstr "Невозможно получить информацию об авто
 
 #: lib/commit.tcl:81
 msgid "Invalid GIT_COMMITTER_IDENT:"
-msgstr "Неверная GIT_COMMITTER_IDENT:"
+msgstr "Неверный GIT_COMMITTER_IDENT:"
 
 #: lib/commit.tcl:133
 msgid ""
 "Last scanned state does not match repository state.\n"
 "\n"
-"Another Git program has modified this repository since the last scan.  A rescan must be performed before another commit can be created.\n"
+"Another Git program has modified this repository since the last scan.  A "
+"rescan must be performed before another commit can be created.\n"
 "\n"
 "The rescan will be automatically started now.\n"
 msgstr ""
 "Последнее прочитанное состояние репозитория не соответствует текущему.\n"
 "\n"
-"С момента последней проверки репозиторий был изменен другой программой Git. Необходимо перечитать репозиторий, прежде чем изменять текущую ветвь. \n"
+"С момента последней проверки репозиторий был изменен другой программой Git. "
+"Необходимо перечитать репозиторий, прежде чем изменять текущую ветвь. \n"
 "\n"
 "Это будет сделано сейчас автоматически.\n"
 
@@ -1190,11 +1216,13 @@ msgstr ""
 msgid ""
 "Unmerged files cannot be committed.\n"
 "\n"
-"File %s has merge conflicts.  You must resolve them and stage the file before committing.\n"
+"File %s has merge conflicts.  You must resolve them and stage the file "
+"before committing.\n"
 msgstr ""
 "Нельзя сохранить необъединенные файлы.\n"
 "\n"
-"Для файла %s возник конфликт объединения. Разрешите конфликт и добавьте к подготовленным файлам перед сохранением.\n"
+"Для файла %s возник конфликт объединения. Разрешите конфликт и добавьте к "
+"подготовленным файлам перед сохранением.\n"
 
 #: lib/commit.tcl:162
 #, tcl-format
@@ -1333,13 +1361,15 @@ msgstr "Проверка базы объектов при помощи fsck"
 msgid ""
 "This repository currently has approximately %i loose objects.\n"
 "\n"
-"To maintain optimal performance it is strongly recommended that you compress the database when more than %i loose objects exist.\n"
+"To maintain optimal performance it is strongly recommended that you compress "
+"the database when more than %i loose objects exist.\n"
 "\n"
 "Compress the database now?"
 msgstr ""
 "Этот репозиторий сейчас содержит примерно %i свободных объектов\n"
 "\n"
-"Для лучшей производительности рекомендуется сжать базу данных, когда есть более %i несвязанных объектов.\n"
+"Для лучшей производительности рекомендуется сжать базу данных, когда есть "
+"более %i несвязанных объектов.\n"
 "\n"
 "Сжать базу данных сейчас?"
 
@@ -1355,15 +1385,18 @@ msgid ""
 "\n"
 "%s has no changes.\n"
 "\n"
-"The modification date of this file was updated by another application, but the content within the file was not changed.\n"
+"The modification date of this file was updated by another application, but "
+"the content within the file was not changed.\n"
 "\n"
-"A rescan will be automatically started to find other files which may have the same state."
+"A rescan will be automatically started to find other files which may have "
+"the same state."
 msgstr ""
 "Изменений не обнаружено.\n"
 "\n"
 "в %s отутствуют изменения.\n"
 "\n"
-"Дата изменения файла была обновлена другой программой, но содержимое файла осталось прежним.\n"
+"Дата изменения файла была обновлена другой программой, но содержимое файла "
+"осталось прежним.\n"
 "\n"
 "Сейчас будет запущено перечитывание репозитория, чтобы найти подобные файлы."
 
@@ -1413,32 +1446,57 @@ msgstr "предупреждение"
 msgid "You must correct the above errors before committing."
 msgstr "Прежде чем сохранить, исправьте вышеуказанные ошибки."
 
-#: lib/index.tcl:241
+#: lib/index.tcl:6
+msgid "Unable to unlock the index."
+msgstr "Не удалось разблокировать индекс"
+
+#: lib/index.tcl:15
+msgid "Index Error"
+msgstr "Ошибка индекса"
+
+#: lib/index.tcl:21
+msgid ""
+"Updating the Git index failed.  A rescan will be automatically started to "
+"resynchronize git-gui."
+msgstr ""
+"Не удалось обновить индекс Git. Состояние репозитория будет"
+"перечитано автоматически."
+
+#: lib/index.tcl:27
+msgid "Continue"
+msgstr "Продолжить"
+
+#: lib/index.tcl:31
+msgid "Unlock Index"
+msgstr "Разблокировать индекс"
+
+#: lib/index.tcl:282
 #, tcl-format
 msgid "Unstaging %s from commit"
 msgstr "Удаление %s из подготовленного"
 
-#: lib/index.tcl:285
+#: lib/index.tcl:326
 #, tcl-format
 msgid "Adding %s"
 msgstr "Добавление %s..."
 
-#: lib/index.tcl:340
+#: lib/index.tcl:381
 #, tcl-format
 msgid "Revert changes in file %s?"
 msgstr "Отменить изменения в файле %s?"
 
-#: lib/index.tcl:342
+#: lib/index.tcl:383
 #, tcl-format
 msgid "Revert changes in these %i files?"
 msgstr "Отменить изменения в %i файле(-ах)?"
 
-#: lib/index.tcl:348
+#: lib/index.tcl:389
 msgid "Any unstaged changes will be permanently lost by the revert."
 msgstr ""
-"Любые изменения, не подготовленные к сохранению, будут потеряны при данной операции."
+"Любые изменения, не подготовленные к сохранению, будут потеряны при данной "
+"операции."
 
-#: lib/index.tcl:351
+#: lib/index.tcl:392
 msgid "Do Nothing"
 msgstr "Ничего не делать"
 
@@ -1450,19 +1508,22 @@ msgid ""
 msgstr ""
 "Невозможно выполнить объединение во время исправления.\n"
 "\n"
-"Завершите исправление данного состояния перед выполнением операции объединения.\n"
+"Завершите исправление данного состояния перед выполнением операции "
+"объединения.\n"
 
 #: lib/merge.tcl:27
 msgid ""
 "Last scanned state does not match repository state.\n"
 "\n"
-"Another Git program has modified this repository since the last scan.  A rescan must be performed before a merge can be performed.\n"
+"Another Git program has modified this repository since the last scan.  A "
+"rescan must be performed before a merge can be performed.\n"
 "\n"
 "The rescan will be automatically started now.\n"
 msgstr ""
 "Последнее прочитанное состояние репозитория не соответствует текущему.\n"
 "\n"
-"С момента последней проверки репозиторий был изменен другой программой Git. Необходимо перечитать репозиторий, прежде чем изменять текущую ветвь.\n"
+"С момента последней проверки репозиторий был изменен другой программой Git. "
+"Необходимо перечитать репозиторий, прежде чем изменять текущую ветвь.\n"
 "\n"
 "Это будет сделано сейчас автоматически.\n"
 
@@ -1473,12 +1534,15 @@ msgid ""
 "\n"
 "File %s has merge conflicts.\n"
 "\n"
-"You must resolve them, stage the file, and commit to complete the current merge.  Only then can you begin another merge.\n"
+"You must resolve them, stage the file, and commit to complete the current "
+"merge.  Only then can you begin another merge.\n"
 msgstr ""
 "Предыдущее объединение не завершено из-за конфликта.\n"
 "\n"
 "Для файла %s возник конфликт объединения.\n"
-"Разрешите конфликт, подготовьте файл и сохраните. Только после этого можно начать следующее объединение.\n"
+"\n"
+"Разрешите конфликт, подготовьте файл и сохраните. Только после этого можно "
+"начать следующее объединение.\n"
 
 #: lib/merge.tcl:54
 #, tcl-format
@@ -1487,13 +1551,15 @@ msgid ""
 "\n"
 "File %s is modified.\n"
 "\n"
-"You should complete the current commit before starting a merge.  Doing so will help you abort a failed merge, should the need arise.\n"
+"You should complete the current commit before starting a merge.  Doing so "
+"will help you abort a failed merge, should the need arise.\n"
 msgstr ""
 "Изменения не сохранены.\n"
 "\n"
-"Файл  %s изменен.\n"
+"Файл %s изменен.\n"
 "\n"
-"Подготовьте и сохраните измения перед началом объединения. В случае необходимости это позволит прервать операцию объединения.\n"
+"Подготовьте и сохраните измения перед началом объединения. В случае "
+"необходимости это позволит прервать операцию объединения.\n"
 
 #: lib/merge.tcl:106
 #, tcl-format
@@ -1631,7 +1697,7 @@ msgstr "Шаблон для имени новой ветви"
 
 #: lib/option.tcl:176
 msgid "Change Font"
-msgstr "Шрифт интерфейса"
+msgstr "Изменить шрифт"
 
 #: lib/option.tcl:180
 #, tcl-format
@@ -1640,7 +1706,6 @@ msgstr "Выберите %s"
 
 # carbon copy
 #: lib/option.tcl:186
-#, fuzzy
 msgid "pt."
 msgstr ""
 
@@ -1652,18 +1717,6 @@ msgstr "Настройки"
 msgid "Failed to completely save options:"
 msgstr "Не удалось полностью сохранить настройки:"
 
-#: lib/remote.tcl:165
-msgid "Prune from"
-msgstr "Чистка"
-
-#: lib/remote.tcl:170
-msgid "Fetch from"
-msgstr "Получение из"
-
-#: lib/remote.tcl:213
-msgid "Push to"
-msgstr "Отправить"
-
 #: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34
 msgid "Delete Remote Branch"
 msgstr "Удалить внешнюю ветвь"
@@ -1707,16 +1760,17 @@ msgid ""
 "\n"
 " - %s"
 msgstr ""
-"Следующие ветви объединены с %s не полностью:"
-"\n"
+"Следующие ветви объединены с %s не полностью:\n"
 " - %s"
 
 #: lib/remote_branch_delete.tcl:189
 #, tcl-format
-msgid "One or more of the merge tests failed because you have not fetched the necessary commits.  Try fetching from %s first."
+msgid ""
+"One or more of the merge tests failed because you have not fetched the "
+"necessary commits.  Try fetching from %s first."
 msgstr ""
-"Один или несколько тестов на объединение не прошли, потому что "
-"Вы не получили необходимые состояния. Попробуйте сначала получить их из %s."
+"Один или несколько тестов на объединение не прошли, потому что Вы не "
+"получили необходимые состояния. Попытайтесь получить их из %s."
 
 #: lib/remote_branch_delete.tcl:207
 msgid "Please select one or more branches to delete."
@@ -1746,11 +1800,23 @@ msgstr "Не указан репозиторий."
 msgid "Scanning %s..."
 msgstr "Перечитывание %s... "
 
-#: lib/shortcut.tcl:26 lib/shortcut.tcl:74
-msgid "Cannot write script:"
-msgstr "Невозможно записать скрипт:"
+#: lib/remote.tcl:165
+msgid "Prune from"
+msgstr "Чистка"
+
+#: lib/remote.tcl:170
+msgid "Fetch from"
+msgstr "Получение из"
+
+#: lib/remote.tcl:213
+msgid "Push to"
+msgstr "Отправить"
+
+#: lib/shortcut.tcl:20 lib/shortcut.tcl:61
+msgid "Cannot write shortcut:"
+msgstr "Невозможно записать ссылку:"
 
-#: lib/shortcut.tcl:149
+#: lib/shortcut.tcl:136
 msgid "Cannot write icon:"
 msgstr "Невозможно записать значок:"
 
@@ -1821,5 +1887,7 @@ msgstr "Использовать thin pack (для медленных сетев
 
 #: lib/transport.tcl:168
 msgid "Include tags"
-msgstr "Включить метки"
+msgstr "Передать таги"
 
+#~ msgid "Next >"
+#~ msgstr "Дальше >"
-- 
1.5.3.4.500.g3a531f

^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox