我可以将.git文件夹存储在我想要跟踪的文件之外吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我有一个不寻常的想法,用git作为备份系统。因此,假设我有一个目录./backup/myfiles,我想使用git支持这个目录。为了保持整洁,我不想在myfiles文件夹中有一个.git目录,所以我想我可以创建./backup/git_回复/我的文件。从Git文档来看,我尝试过这样做:

$ cd backup/myfiles
$ mkdir ../git_repos/myfiles
$ git --git-dir=../git_repos/myfiles init
Initialized empty Git repository in backup/git_repos/myfiles/
$ git --git-dir="../git_repos/myfiles/" add foo
fatal: pathspec 'foo' did not match any files

你可以看到我收到的错误信息。我做错什么了?

提问于
用户回答回答于
git --git-dir=../repo --work-tree=. add foo

这会做你想做的事情,但是当你必须用你使用的每一个git命令来指定它时,显然会很糟糕。

你可以出口GIT_WORK_TREE=.GIT_DIR=../backup git会在每个命令下把他们抓起来。不过,这只会轻松地在每个shell中使用一个存储库。

我建议将.git目录与其他地方相链接,或者从主备份目录创建到.git目录的符号链接。

用户回答回答于

只需要确保存储库知道工作树的位置,反之亦然。

要让存储库知道工作树的位置,请设置配置值。core.worktree...。要让工作树知道它的git目录在哪里,请添加一个名为.git的文件(不是文件夹!),并添加如下所示的行

gitdir: /path/to/repo.git

因为git 1.7.5,init命令学习了一个额外的选项。

可以用以下方法初始化一个新的单独的存储库

git init --separate-git-dir /path/to/repo.git

这将初始化单独目录中的git存储库,并在当前目录中添加.git文件,这是新存储库的工作目录。

原至1.7.5您必须使用稍微不同的参数并自己添加.git文件。

要初始化单独的存储库,以下命令将工作树与存储库链接起来:

git --git-dir=/path/to/repo.git --work-tree=. init && echo "gitdir: /path/to/repo.git" > .git

当前目录将是工作树,git将在/path/to/repo.git...。init命令将自动设置core.worktree属性指定的--git-dir参数。

甚至可以为此添加一个别名:

[alias]
    initexternal = !"f() { git --work-tree=. --git-dir=\"$1\" init && echo \"gitdir: $1\" >> .git; }; f"

在只读工作目录上使用git版本控制。

有了上述知识,您甚至可以为工作目录设置git版本控制,而无需编写权限。如果你不是用--git-dir在每个git命令或从存储库中执行每个命令(而不是工作目录)上,可以省略.git文件,因此不需要在工作目录中创建任何文件。

扫码关注云+社区