Подтвердить что ты не робот

Как создать главную ветвь в голом репозитории Git?

(Все сделано в poshgit в Windows 8):

git init --bare test-repo.git
cd test-repo.git

(Папка создана с git -иши файлами и папками внутри)

git status

фатальный: эта операция должна выполняться в дереве (Хорошо, поэтому я не могу использовать статус git с открытым репо, я думаю, что смысл)

git branch

(Ничего, похоже, что у открытого репо нет ветвей. Нужно ли добавлять их из клонированного репо?)

cd ..
mkdir test-clone
cd test-clone
git clone ../test-repo.git

(я получаю предупреждение о клонировании пустого хранилища)

cd test-repo

(Приглашение меняется, указывая, что я на главной ветке)

git branch

(Показывает никаких результатов - eh?)

git branch master

fatal: Недействительное имя объекта: 'master'

Um. Итак, как мне создать главную ветвь в моем основном репо?

4b9b3361

Ответ 1

Голый репозиторий - это почти то, что вы только нажимаете и выбираете. Вы не можете делать прямо "в нем": вы не можете проверять содержимое, создавать ссылки (ветки, теги), запускать git status и т.д.

Если вы хотите создать новую ветку в голом репозитории Git, вы можете нажать ветку от клона до вашего голого репо:

# initialize your bare repo
$ git init --bare test-repo.git

# clone it and cd to the clone root directory
$ git clone test-repo.git/ test-clone
Cloning into 'test-clone'...
warning: You appear to have cloned an empty repository.
done.
$ cd test-clone

# make an initial commit in the clone
$ touch README.md
$ git add . 
$ git commit -m "add README"
[master (root-commit) 65aab0e] add README
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md

# push to origin (i.e. your bare repo)
$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 219 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /Users/jubobs/test-repo.git/
 * [new branch]      master -> master

Ответ 2

Ветвь - это просто ссылка на фиксацию. Пока вы ничего не передадите в репозиторий, у вас нет веток. Вы также можете увидеть это в не-голом репозитории.

$ mkdir repo
$ cd repo
$ git init
Initialized empty Git repository in /home/me/repo/.git/
$ git branch
$ touch foo
$ git add foo
$ git commit -m "new file"
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 foo
$ git branch
* master

Ответ 3

Не нужно использовать второй репозиторий. Мы можем предоставить фиктивный каталог с помощью опции --work-tree, а команды, такие как checkout и commit, начнут работать даже в голом репозитории. Подготовьте фиктивный каталог:

$ rm -rf /tmp/empty_directory
$ mkdir  /tmp/empty_directory

И вот вы:

$ cd test-repo.git             # your fresh bare repository

$ git --work-tree=/tmp/empty_directory checkout --orphan master
Switched to a new branch 'master'                  <--- abort if "master" already exists

$ git --work-tree=/tmp/empty_directory   commit --allow-empty -m "empty repo" 

$ git branch
* master

$ rmdir  /tmp/empty_directory

Протестировано на ваниле git 1.9.1. Я не проверял, поддерживает ли posh- git --allow-empty совершить фиксацию без каких-либо изменений файла (сообщение только для совершения).