2014-12-24 12 views
19

(Wszystko odbywa się w poshgit na Windows 8):Jak utworzyć gałąź główną w otwartym repozytorium Git?

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

(folder jest tworzony z plikami i folderami git-owski wewnątrz)

git status 

śmiertelne: Ta operacja musi być prowadzone w pracy drzewo (Ok, więc nie mogę użyć git status z nagim repo; sens chyba)

git branch 

(Nic, wydaje się, że nagie repozytorium nie zawiera żadnych oddziałów. Czy muszę dodać je ze sklonowanego repo?)

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

(dostaję ostrzeżenie o klonowanie pusty repozytorium)

cd test-repo 

(Znak zachęty zmieni się wskazać Jestem na gałęzi master)

git branch 

(nie wykazuje żadnych wyników - eh?)

git branch master 

fatal: Nieprawidłowa nazwa obiektu: 'master'

Um. Jak utworzyć gałąź główną w moim nagim repo?

Odpowiedz

31

Nieosłonięte repozytorium jest czymś, do czego wystarczy tylko popchnąć i pobrać. Nie możesz zrobić wiele bezpośrednio "w tym": nie możesz sprawdzić rzeczy, utworzyć odniesienia (gałęzie, znaczniki), uruchomić git status, itp.

Jeśli chcesz utworzyć nową gałąź w otwartym repozytorium Git, możesz nacisnąć gałąź od klona do twojego nagiego repo:

# 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

Oddział jest tylko referencją do zatwierdzenia. Dopóki niczego nie powiesz do repozytorium, nie będziesz miał żadnych oddziałów. Możesz to również zobaczyć w nieobsługiwanym repozytorium.

$ 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

"Oddział jest tylko referencją do zatwierdzenia." Dzięki, to naprawdę pomaga wyjaśnić rzeczy! – David

+0

użyj git add -A *, aby dodać rzeczy tam, jeśli masz już pliki. – codeslapper

1

Nie trzeba mieć drugiego repozytorium. Możemy dostarczyć fałszywy katalog przy użyciu opcji --work-tree, a polecenia takie jak checkout i commit zaczynają działać nawet w przypadku repozytorium gołego. Przygotować katalog manekina:

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

I proszę:

$ 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 

Testowane na waniliowym git 1.9.1. Nie zweryfikowałem, czy posh-git obsługuje --allow-empty, aby dokonać zatwierdzenia bez żadnych zmian w pliku (zatwierdzanie tylko do wiadomości).

+0

Potrzebowałem flagi "sierota". Dzięki! – SwankyLegg

Powiązane problemy