How do I create a master branch in a bare Git repository?

隐身守侯 提交于 2019-12-03 04:12:13

问题


(All done in poshgit on Windows 8):

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

(Folder is created with git-ish files and folders inside)

git status

fatal: This operation must be run in a work tree (Okay, so I can't use git status with a bare repo; makes sense I guess)

git branch

(Nothing, it seems the bare repo doesn't contain any branches. Do I have to add them from a cloned repo?)

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

(I get a warning about cloning an empty repository)

cd test-repo

(The prompt changes to indicate I am on the master branch)

git branch

(Shows no results - eh?)

git branch master

fatal: Not a valid object name: 'master'

Um. So how do I create the master branch in my bare repo?


回答1:


A bare repository is pretty much something you only push to and fetch from. You cannot do much directly "in it": you cannot check stuff out, create references (branches, tags), run git status, etc.

If you want to create a new branch in a bare Git repository, you can push a branch from a clone to your bare 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



回答2:


A branch is just a reference to a commit. Until you commit anything to the repository, you don't have any branches. You can see this in a non-bare repository as well.

$ 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:


No need for a second repository. We can supply a dummy directory using --work-tree option and commands like checkout and commit start to work even on a bare repository. Prepare a dummy directory:

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

And there you go:

$ 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

Tested on vanilla git 1.9.1. I didn't verify if posh-git supports --allow-empty to make a commit without any file changes (a message-only commit).




回答4:


By default there will be no branches listed and pops up only after some file is placed. You don't have to worry much about it. Just run all your commands like creating folder structures, adding/deleting files, commiting files, pushing it to server or creating branches. It works seamlessly without any issue.

https://git-scm.com/docs



来源:https://stackoverflow.com/questions/27635955/how-do-i-create-a-master-branch-in-a-bare-git-repository

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!