threads / discuss / 26119

FIX/COMMENT: git remote manual page

Subject: FIX/COMMENT: git remote manual page

## tl;dr

4 messages between Dec 22, 2010 and Dec 25, 2010.

replies: 3people: 2as markdown or json

Michel Briand· Dec 22, 2010, 01:15 UTC · lore
Hello,

I tried the example given at the bottom if the manual page of git remote.

·   Imitate git clone but track only selected branches

$ mkdir project.git $ cd project.git $ git init $ git remote add -f -t master -m master origin git://example.com/git.git/ $ git merge origin

It works like it is written.
But it seems this does not work with my special setup:
- I use GIT_DIR and GIT_WORK_TREE to specify another location for my
  repository, and to work from another directory,
- I name my remote with a custom name (not origin).
It fails at the last command :
    fatal: <my name> - not something we can merge
But if I try the command :
    git merge <my name>/master
the error message is different :
    fatal: This operation must be run in a work tree
    fatal: read-tree failed

I cd to the work tree and issue the same last command. Then it works.

I suspect the first error message is related to the remote name. And the second to the work tree not being the current directory.

Cheers, Michel

Nguyen Thai Ngoc Duy· Dec 25, 2010, 10:48 UTC · re: Michel Briand · lore

Re: FIX/COMMENT: git remote manual page

On Wed, Dec 22, 2010 at 8:15 AM, Michel Briand <michelbriand@free.fr> wrote:
Show 19 quoted lines
> Hello,
>
> I tried the example given at the bottom if the manual page of git
> remote.
>
> ·   Imitate git clone but track only selected branches
>
> $ mkdir project.git
> $ cd project.git
> $ git init
> $ git remote add -f -t master -m master origin git://example.com/git.git/
> $ git merge origin
>
> It works like it is written.
>
> But it seems this does not work with my special setup:
> - I use GIT_DIR and GIT_WORK_TREE to specify another location for my
>  repository, and to work from another directory,
> - I name my remote with a custom name (not origin).
So you set GIT_DIR and GIT_WORK_TREE before running "git remote add"?
> It fails at the last command :
>
>    fatal: <my name> - not something we can merge

It fails to see "<my name>" points to a commit. Maybe it fails to read remote information from config..

Show 11 quoted lines
> But if I try the command :
>
>    git merge <my name>/master
>
> the error message is different :
>
>    fatal: This operation must be run in a work tree
>    fatal: read-tree failed
>
> I cd to the work tree and issue the same last command.
> Then it works.
What git version are use using? I did
GIT_DIR=git/.git GIT_WORK_TREE=git git/git merge origin # or a specific branch

and it worked fine here (recent master). That message means work-tree settings are not propagated to git-read-tree (run by git-merge).

-- 
Duy
Michel Briand· Dec 25, 2010, 11:41 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: FIX/COMMENT: git remote manual page

Nguyen Thai Ngoc Duy <pclouds@gmail.com> - Sat, 25 Dec 2010 17:48:58 +0700

Show 23 quoted lines
>On Wed, Dec 22, 2010 at 8:15 AM, Michel Briand <michelbriand@free.fr> wrote:
>> Hello,
>>
>> I tried the example given at the bottom if the manual page of git
>> remote.
>>
>> ·   Imitate git clone but track only selected branches
>>
>> $ mkdir project.git
>> $ cd project.git
>> $ git init
>> $ git remote add -f -t master -m master origin git://example.com/git.git/
>> $ git merge origin
>>
>> It works like it is written.
>>
>> But it seems this does not work with my special setup:
>> - I use GIT_DIR and GIT_WORK_TREE to specify another location for my
>>  repository, and to work from another directory,
>> - I name my remote with a custom name (not origin).
>
>So you set GIT_DIR and GIT_WORK_TREE before running "git remote add"?
>
Yes.
Show 7 quoted lines
>> It fails at the last command :
>>
>>    fatal: <my name> - not something we can merge
>
>It fails to see "<my name>" points to a commit. Maybe it fails to read
>remote information from config..
>
Huh, I don't know.
Show 18 quoted lines
>> But if I try the command :
>>
>>    git merge <my name>/master
>>
>> the error message is different :
>>
>>    fatal: This operation must be run in a work tree
>>    fatal: read-tree failed
>>
>> I cd to the work tree and issue the same last command.
>> Then it works.
>
>What git version are use using? I did
>
>GIT_DIR=git/.git GIT_WORK_TREE=git git/git merge origin # or a specific branch
>
>and it worked fine here (recent master). That message means work-tree
>settings are not propagated to git-read-tree (run by git-merge).
Hi,
I'm running Debian squeeze. Git is version 1.7.2.3.
Here is the complete command sequence I used:
~/tmp/git $ mkdir toto toto_wk
~/tmp/git $ GIT_DIR=toto GIT_WORK_TREE=toto_wk git init
Initialized empty Git repository in xxxxxxxxxxxxxxxx/tmp/git/toto/
~/tmp/git $ GIT_DIR=toto GIT_WORK_TREE=toto_wk git remote add -f -t master -m master TOTO xxxxxx/shlib 
Updating TOTO
remote: Counting objects: 36, done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 36 (delta 9), reused 0 (delta 0)
Unpacking objects: 100% (36/36), done.
From xxxxxxxxxxxxxxxxx/shlib
 * [new branch]      master     -> TOTO/master
From xxxxxxxxxxxxxxxxx/shlib
 * [new tag]         1.0        -> 1.0
 * [new tag]         1.0.1      -> 1.0.1
~/tmp/git $ GIT_DIR=toto GIT_WORK_TREE=toto_wk git merge TOTO
fatal: This operation must be run in a work tree
fatal: read-tree failed
~/tmp/git $ ls toto_wk/
<NOTHING>
I re-issue the latest command :

~/tmp/git $ GIT_DIR=toto GIT_WORK_TREE=toto_wk git merge TOTO Already up-to-date.

Strange isn't it ?

But directory is still empty ~/tmp/git $ ls toto_wk/ <NOTHING>

Trying to recover :
~/tmp/git $ GIT_DIR=toto GIT_WORK_TREE=toto_wk git reset --hard
The directory is correct (in sync with my master branch).
If I do :

...git init ...git remote add... cd toto_wk GIT_DIR=../toto GIT_WORK_TREE=. git merge TOTO

It works !

Adding /master after remote name doesn't make any difference. Please forget this idea.

The problem seems to reside in the work tree parameter (. or not).

Cheers, Michel

Nguyen Thai Ngoc Duy· Dec 25, 2010, 13:00 UTC · re: Michel Briand · lore

Re: FIX/COMMENT: git remote manual page

On Sat, Dec 25, 2010 at 6:41 PM, Michel Briand <michelbriand@free.fr> wrote:
Show 8 quoted lines
> Hi,
>
> I'm running Debian squeeze. Git is version 1.7.2.3.
>
> Here is the complete command sequence I used:
>
> ~/tmp/git $ mkdir toto toto_wk
> ~/tmp/git $ GIT_DIR=toto GIT_WORK_TREE=toto_wk git init

Note that this also sets core.worktree=`cwd`/toto_wk so you only need to set GIT_DIR in the following commands. But I wouldn't recommend it, just set GIT_WORK_TREE the way you are doing, until maybe 1.7.4. core.worktree is buggy.

> ~/tmp/git $ GIT_DIR=toto GIT_WORK_TREE=toto_wk git merge TOTO
> fatal: This operation must be run in a work tree
> fatal: read-tree failed

Thanks for the instructions. We've got a problem with $GIT_WORK_TREE vs cwd here. I'll send a patch later.

Show 9 quoted lines
> ~/tmp/git $ ls toto_wk/
> <NOTHING>
>
> I re-issue the latest command :
>
> ~/tmp/git $ GIT_DIR=toto GIT_WORK_TREE=toto_wk git merge TOTO
> Already up-to-date.
>
> Strange isn't it ?

Actually no. 'git-merge' is successful and its last step is to call 'git read-tree --reset -u SHA-1' to update worktree. Unfortunately, git's internal cwd has been moved to ~/tmp/git/toto_wk while $GIT_WORK_TREE is still "toto_wk". When git-read-tree is run, it tries to find a worktree at ~/tmp/git/toto_wk/toto_wk.

> But directory is still empty
> ~/tmp/git $ ls toto_wk/
> <NOTHING>
Because git-read-tree fails to run.
> Trying to recover :
>
> ~/tmp/git $ GIT_DIR=toto GIT_WORK_TREE=toto_wk git reset --hard
Or you can try this until new git release:
GIT_DIR=toto GIT_WORK_TREE=$HOME/tmp/toto_wk git merge TOTO
or
GIT_DIR=toto git merge TOTO

In other words, making worktree absolute should work (core.worktree is always set absolute by git-init).

-- 
Duy

← back to recent threads