Getting a working copy of a bare repository

2019-01-17 11:04发布

I have a server on which I have a bare repository for pushing. However, my server needs to have a working copy of the master branch.

How do I get a working copy and that only from a bare repository?

6条回答
劳资没心,怎么记你
2楼-- · 2019-01-17 11:26

You can use 'git show' for this.

http://www.kernel.org/pub/software/scm/git/docs/git-show.html

Basically:

git --no-pager --git-dir /path/to/bar/repo.git show branch:path/to/file.txt
查看更多
兄弟一词,经得起流年.
3楼-- · 2019-01-17 11:32

This is how it works:

$ git init --separate-git-dir /path/to/existing-bare-repository /path/to/workdir
$ cd /path/to/workdir
$ git checkout .

Voilà!

For info: git init will report: Reinitialized existing Git repository in /path/to/existing-bare-repository. But be confident. man git-init says: Running git init in an existing repository is safe. It will not overwrite things that are already there.

The magic is that git init alone does not make your files appear in the working directory. You have to checkout the root directory.

查看更多
forever°为你锁心
4楼-- · 2019-01-17 11:34

This is a riff off the other 2 answers but it fills the gap for my use case -- it works for updating the repo from the origin and checking out branches and any git operation because you end up with a normal complete git repo.

git clone /path/to/bare/repo /new/path/to/full/repo
cd /new/path/to/full/repo
git remote set-url origin git@github.com:swift/swift.git

After executing these 3 lines of code you can then git pull and git branch and git checkout some_branch and so on because you now have a normal complete git repo connected to your remote repo.

查看更多
趁早两清
5楼-- · 2019-01-17 11:36

A bare repository is just the .git directory of a working directory, and an entry in the local config file. What I did to convert a bare repository into a full one is:

  • Create a new subdirectory .git and move all files from the bare repository in there
  • Edit the .git/config file to change bare = true to bare = false
  • Check out the branch you want. This extracts all files from the repository into the working directory.

You could set the Hidden attribute on the .git directory on Windows, but not on the files inside the directory.

查看更多
Rolldiameter
6楼-- · 2019-01-17 11:43

You can simply clone the repository to another directory on the same machine:

git clone /bare/repo/dir.git

The current directory will become a non-bare clone of your repo, and you'll get a checkout of the master branch automatically. Then use the usual commands like git pull to update it as needed.

As a side benefit, this operation is very efficient — if you specify a local directory to git clone, git will try to share objects between those two repos using hard links.

查看更多
唯我独甜
7楼-- · 2019-01-17 11:47

I was looking for the "detached working tree" approach (as seen here):

git init --bare

git config core.bare false
git config core.worktree /somewhere/else/

git checkout -f
查看更多
登录 后发表回答