Я использовал git init --bare для создания голого репозитория в Linux, но я хочу одновременно установить его местоположение в исходном каталоге, чтобы, хотя голый репозиторий сохранял только записи коммитов git, я мог сделать это непосредственно в Linux. Найдите исходный код.
да. Но я хочу настроить исходный каталог в голом репозитории. Я также просмотрел много информации и ничего не нашел о настройке исходного каталога в голом репозитории. Но я думаю, что должна быть такая необходимость, чтобы я мог видеть голый склад в Linux или напрямую видеть исходный каталог.
В голом репо нет рабочего дерева по умолчанию, но вы можете добавить одно или столько, сколько хотите.
Если вы создаете голое репо с нуля, у него еще нет коммита. Вам нужно либо отправить коммиты из другого репозитория, либо создать хотя бы один в голом репо.
# 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
Когда вы пишете «исходный каталог», вы имеете в виду рабочее дерево? (Если так, то в голом репозитории нет рабочего дерева, в этом и смысл
--bare
.)