为了澄清以下两个选项之间的区别,您可以告诉git仓库跟踪其他地方的文件(
core.worktree
),或者在主工作树中放置一个指向其他地方的git仓库文件夹的面包屑(
--separate-git-dir
)。
core.worktree
选项不需要面包屑文件,并且自第一个版本以来就是git的一个特性。第二个选项是较新的选项,需要一个面包屑文件,但不需要更改存储库配置文件。
选项1:core.worktree
在要跟踪的路径之外初始化非裸仓库,并将core.worktree
设置为要跟踪的路径。您可以使用终端命令设置此值,也可以直接编辑存储库配置文件以添加:
worktree = <path to files to backup>
不要将存储库文件夹设为此路径的子文件夹;这将是递归的。您可能可以尝试这样做,并简单地忽略存储库文件夹,但我认为git不会允许这种情况。
在您的情况下,您将转到backup/git_repos/
以运行init
命令,并可以使用--git-dir=./myfiles
选项来覆盖默认存储库文件夹名称。命令将如下所示:
cd backup/git_repos
git init --git-dir=./myfiles
git config core.worktree backup/myfiles
注意1: 这与git的较新版本ADDITIONAL工作树功能不同。这是您的主要工作树,所有非裸仓库都使用它。那些额外的工作树使用面包屑导航到git仓库文件夹下的子文件夹中,就像下面的选项2。
注意2: 我最近测试了许多用于Windows的git GUI,只有Git Extensions支持使用core.worktree移动主工作树。
不支持core.worktree的GUI
SourceTree、Fork、Tower、GitKraken、GitHub Desktop、GitAhead、SmartGit*和Git-Cola。当使用core.worktree时,您将希望坚持使用终端。
* SmartGit将此功能与Option 2混淆,并要求一个.git
文件。但对于core.worktree并不需要此文件。
选项2:--separate-git-dir
使用--separate-git-dir=<用于保存存储库数据的路径>
在要备份的路径处初始化存储库。这将使用指定的路径来保存存储库数据,并在初始化位置创建一个.git
文件,其中包含以下行:
gitdir:<用于保存存储库数据的路径>
对于您而言,命令应如下所示:
cd backup/myfiles
git init --separate-git-dir=backup/git_repos/myfiles/
在backup/myfiles/
目录下,您的.git
文件将包含gitdir: backup/git_repos/myfiles/
现在,您可以将.git
文件的位置视为存储库位置,以此操作git。