Browse Source
The combination of GIT_DIR and GIT_WORK_TREE can be used to manage files in one directory hierarchy while keeping the repository that keeps track of them outside the directory hierarchy. For example: git init --bare /path/to/there alias dotfiles="GIT_DIR=/path/to/there GIT_WORK_TREE=/path/to/here git" cd /path/to/here dotfiles add file dotfiles commit -a -m "add /path/to/here/file" ... lets you manage files under /path/to/here/ in the repository located at /path/to/there. git-submodule however fails to add submodules, as it is confused by GIT_DIR and GIT_WORK_TREE environment variables when it tries to work in the submodule, like so: dotfiles submodule add http://path.to/submodule fatal: working tree '/path/to/here' already exists. Simply unsetting the environment where the command works on the submodule is sufficient to fix this, as it has set things up so that GIT_DIR and GIT_WORK_TREE do not even have to point at the repository and the working tree of the submodule. Signed-off-by: Daniel Graña <dangra@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
Daniel Graña
13 years ago
committed by
Junio C Hamano
2 changed files with 66 additions and 2 deletions
@ -0,0 +1,61 @@
@@ -0,0 +1,61 @@
|
||||
#!/bin/sh |
||||
# |
||||
# Copyright (c) 2012 Daniel Graña |
||||
# |
||||
|
||||
test_description='Test submodules on detached working tree |
||||
|
||||
This test verifies that "git submodule" initialization, update and addition works |
||||
on detahced working trees |
||||
' |
||||
|
||||
TEST_NO_CREATE_REPO=1 |
||||
. ./test-lib.sh |
||||
|
||||
test_expect_success 'submodule on detached working tree' ' |
||||
git init --bare remote && |
||||
test_create_repo bundle1 && |
||||
(cd bundle1 && test_commit "shoot") && |
||||
mkdir home && |
||||
( |
||||
cd home && |
||||
export GIT_WORK_TREE="$(pwd)" GIT_DIR="$(pwd)/.dotfiles" && |
||||
git clone --bare ../remote .dotfiles && |
||||
git submodule add ../bundle1 .vim/bundle/sogood && |
||||
test_commit "sogood" && |
||||
git push origin master |
||||
) && |
||||
mkdir home2 && |
||||
( |
||||
cd home2 && |
||||
export GIT_WORK_TREE="$(pwd)" GIT_DIR="$(pwd)/.dotfiles" && |
||||
git clone --bare ../remote .dotfiles && |
||||
git submodule update --init |
||||
) |
||||
' |
||||
|
||||
test_expect_success 'submodule on detached working pointed by core.worktree' ' |
||||
mkdir home3 && |
||||
( |
||||
cd home3 && |
||||
export GIT_DIR="$(pwd)/.dotfiles" && |
||||
git clone --bare ../remote "$GIT_DIR" && |
||||
git config core.bare false && |
||||
git config core.worktree .. && |
||||
git submodule add ../bundle1 .vim/bundle/dupe && |
||||
test_commit "dupe" && |
||||
git push origin master |
||||
) && |
||||
( |
||||
cd home && |
||||
export GIT_DIR="$(pwd)/.dotfiles" && |
||||
git config core.bare false && |
||||
git config core.worktree .. && |
||||
git pull && |
||||
git submodule update && |
||||
git submodule status && |
||||
test -d .vim/bundle/dupe |
||||
) |
||||
' |
||||
|
||||
test_done |
Loading…
Reference in new issue