2014-12-24 3 views
19

(Все сделано в poshgit на Windows 8):Как создать главную ветку в голом хранилище Git?

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 

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

git branch master 

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

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

ответ

31

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

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

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

# clone it and cd to the clone's 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 
6

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

$ 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 
+2

«Ветвь - это просто ссылка на фиксацию». Спасибо, это действительно помогает объяснить вещи! – David

+0

использовать git add -A *, чтобы добавить туда материал, если у вас уже есть файлы. – codeslapper

1

Не нужно использовать второй репозиторий. Мы можем предоставить каталог фиктивных данных, используя --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 

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

+0

Флаг «сирота» был тем, что мне нужно. Благодаря! – SwankyLegg

Смежные вопросы