gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:20:30 26 4
gpt4 key购买 nike

我有一个不同寻常的想法,那就是使用 git 作为备份系统。假设我有一个目录 ./backup/myfiles,我想使用 git 备份它。为了保持整洁,我不想在 myfiles 文件夹中有一个 .git 目录,所以我想我可以创建 ./backup/git_repos/myfiles。通过查看 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

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

最佳答案

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

要让存储库知道工作树在哪里,请设置配置值 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 命令将根据 --git-dir 参数自动设置 core.worktree 值。

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

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

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

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

关于git - 我可以将 .git 文件夹存储在我想要跟踪的文件之外吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/505467/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com