Как мне установить каталог хранения исходного каталога при создании git init --bare? - PullRequest
1 голос
/ 12 июня 2019

Я использовал git init --bare, чтобы создать пустой репозиторий в linux, но я хочу одновременно указать его местоположение в исходном каталоге, так что, хотя пустой репозиторий сохраняет только записи git commit, я могу сделать это непосредственно налинукс.Найдите исходный код.

1 Ответ

0 голосов
/ 12 июня 2019

Пустое репо не имеет рабочего дерева по умолчанию, но вы можете добавить одно или столько, сколько захотите.

Если вы создаете пустое репо с нуля, у него еще нет коммитов.Вам нужно либо выдвинуть коммиты из другого репозитория, либо создать хотя бы один в голом репо.

# 1. push from another repository "bar"
cd /path/to/bar
git push /path/to/foo master

# add a worktree for "master"
cd /path/to/foo
git worktree add /path/to/worktree master

# ------------------------------------------------

# 2. create commit from the bare repository "foo"
cd /path/to/foo

# create the empty tree
tree=$(git hash-object -w -t tree --stdin < /dev/null)

# create a commit from the tree
commit=$(git commit-tree -m "initial commit" $tree)

# create "master" from the commit
git update-ref refs/heads/master $commit

# add a worktree for "master"
git worktree add /path/to/worktree master

Но теперь, если вы клонируете /path/to/foo и делаете коммиты, а затем толкаете master обратно к /path/to/fooстатус в рабочем дереве /path/to/worktree будет немного странным.Вам нужно запустить git reset --hard в /path/to/worktree, чтобы обновить его статус и код.

Помимо рабочего дерева, вы также можете сделать клон из /path/to/foo.

git clone /path/to/foo worktree
cd worktree
# checkout branch "master", which should be already checked out by default
git checkout master
# update "master"
git pull origin master
# update other branches
git fetch
# checkout a new branch "dev" which has been pushed to /path/to/foo
git checkout dev
...