59

我想将外部目录添加到现有存储库。

外部目录:/home/some/directory

工作目录:/htdocs/.git

如果我从 /htdocs 目录尝试以下命令:

git add /home/一些/目录

我收到一个错误:致命:“/home/some/directory”在存储库之外

4

10 回答 10

63

如果我需要做类似的事情,我通常会将该外部文件或目录移动到我的 git 存储库中,并将其原始位置符号链接到新位置。

mv /home/some/directory /htdocs/directory
ln -s /htdocs/directory /home/some/
git add ./directory

当我为要保持在版本控制下但必须存储在特定位置的应用程序开发插件时,我会使用这种技术。

于 2010-03-08T03:23:47.180 回答
23

我有同样的错误......谷歌搜索到死......没有多少出来。

克里斯蒂安的回答有效:

git --work-tree=/ add /home/some/directory

但后来“工作树”让我走了。我 grep 了所有 Git 文档并想出了core.worktree.

我用了

git config --global core.worktree /

瞧!我现在可以从系统中的任何目录添加。我不知道它是否会在任何其他地方引起问题,但我会尝试更新。

于 2011-12-24T21:33:57.733 回答
14
git --work-tree=/ add /home/some/directory
于 2011-11-07T18:22:31.873 回答
9

有一个非常简单的解决方案。

假设您的 Git-repo 在 /var/data/my-app 中,并且您想将 /var/data/public/ 添加到该 repo。你不能使用'add',因为 Git 不会在 repo 的根目录之外添加资源。所以..

解决方案:

  1. 将 /var/data/public/ 目录移动到 Git-repo 根目录 (/var/data/my-app)。

  2. 在 /var/data/public 中创建到 /var/data/my-app/public 文件夹的符号链接(符号链接),使用: ln -s source_file_or_directory virtual_file_or_directory

git add然后,只需以正常方式将移动的文件或目录添加到 Git 。您的 Git 源代码控制现在正在跟踪所需的文件/文件夹,并且您在外部目录中的符号链接确保文件/文件夹可供其他任何人访问!

于 2011-05-01T11:43:56.663 回答
2

如果您要添加到您的仓库的代码不是太大,您也可以在每次推送之前将其自动复制到您的仓库中。

在我的例子中,我需要一个 R 文件,我经常修改它,在几个 repos 中,我写了一个小 shell 脚本:

#!/usr/bin/env bash

cp -r /some/directory/file.R .
git add .
git commit -m "add"
git push

...我运行此脚本以推送所有更改,包括 /some/directory 中的更改。

于 2017-05-06T07:21:22.327 回答
1

我会对外部目录中的每个文件进行硬链接。由于硬链接不会对原始文​​件产生额外的开销,因此它可能是完美的同步。唯一的问题是无法链接目录(只能由超级用户链接),因此必须创建它来存储文件。

例如,通常 zeppelin 仅支持 notebook 文件的版本控制,但我在父目录中添加了 conf 文件的硬链接,如下所示:

.
├── 2A94M5J1Z
│   └── note.json
├── 2G2U2ZR1T
│   └── note.json
├── conf
│   ├── shiro.ini
│   ├── zeppelin-env.sh
│   └── zeppelin-site.xml
└── README.md
于 2021-03-14T09:18:32.423 回答
1

这让我开始思考,因为我非常想要使用符号链接文件/目录的解决方案,但我被困在 Windows 计算机上。据我所知,Windows 中的符号链接并没有真正以同样的方式工作。因此,另一种解决方案可能是编写两个脚本/bash 函数来“导入”和“导出”有问题的文件,例如:

import() {
    cp -fr /home/some/directory /htdocs/
}

export() {
    cp -fr /htdocs/directory /home/some/
}

然后,您将在存储库中拥有该文件的副本,您可以git add.

于 2018-08-03T10:55:34.110 回答
0

或者,如果您想跨不同的 git repos 工作,您可以使用子模块(ln 不能以这种方式工作)。尝试'man git-submodule'。

于 2012-09-07T02:13:49.643 回答
0

如果您使用 Windows git bash 终端并创建指向源的符号链接,请使用此代码移动目录

git mv <source_directory> <destination_directory>
git ln -s <source_directory>
于 2021-11-17T13:50:21.930 回答
-3

将符号链接添加到存储库中的目录。然后,添加相同的内容。

ln -s /home/some/directory/
git add directory
于 2010-03-05T02:11:11.203 回答