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

后端 未结 4 815
夕颜
夕颜 2020-12-13 00: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

相关标签:
4条回答
  • 2020-12-13 00:20

    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
    
    0 讨论(0)
  • 2020-12-13 00:20

    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

    0 讨论(0)
  • 2020-12-13 00:26

    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
    
    0 讨论(0)
  • 2020-12-13 00:46

    You don't need to use a second repository - you can do commands like git checkout and git commit on a bare repository, if only you supply a dummy work directory using the --work-tree option.

    Prepare a dummy directory:

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

    Create a master branch without a parent (this way it works even when a repo is completely empty):

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

    Create at least one commit (it can be a message-only, without adding any file):

    $ git commit -m "Initial commit" --allow-empty --work-tree=/tmp/empty_directory 
    
    $ git branch
    * master
    

    Clean up a directory, it is still empty.

    $ rmdir  /tmp/empty_directory
    

    Tested on git 1.9.1. (For a specific OP's question, posh-git is just a Windows/PowerShell wrapper for normal git.)

    0 讨论(0)
提交回复
热议问题