git:如何将外部目录添加到存储库?

时间:2010-03-05 00:30:59

标签: git add

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

外部目录: /家庭/一些/目录

工作目录: /htdocs/.git

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

  

git add / home / some / directory

我收到错误: 致命:'/ home / some / directory'在存储库外

9 个答案:

答案 0 :(得分:51)

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

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

当我为应用程序开发一个插件时,我想使用这种技术,我希望将其保留在版本控制之下但必须存储在特定位置。

答案 1 :(得分:15)

我有同样的错误......用谷歌搜索死了......没多大出来。

克里斯蒂安的回答有效:

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

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

我用过

git config --global core.worktree /

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

答案 2 :(得分:13)

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

答案 3 :(得分:8)

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

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

解决方案:

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

  2. 使用:ln -s source_file_or_directory virtual_file_or_directory

    然后,只需以正常方式使用git add将移动的文件或目录添加到Git。您的Git源代码控制现在正在跟踪所需的文件/文件夹,外部目录中的sym-link确保文件/文件夹可以被其他任何内容访问!

答案 4 :(得分:1)

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

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

#!/usr/bin/env bash

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

这让我开始思考,因为我非常希望使用符号链接的文件/目录的解决方案,但是它被卡在Windows计算机上。据我所知,Windows中的符号链接实际上并没有以相同的方式工作。因此,另一个解决方案是编写两个脚本/ bash函数来“导入”和“导出”所涉及的文件,例如:

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

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

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

答案 7 :(得分:0)

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

比如通常zeppelin只支持notebook文件的版本控制,但是我在父目录下添加了conf文件的硬链接如下:

.
├── 2A94M5J1Z
│   └── note.json
├── 2G2U2ZR1T
│   └── note.json
├── conf
│   ├── shiro.ini
│   ├── zeppelin-env.sh
│   └── zeppelin-site.xml
└── README.md

答案 8 :(得分:-2)

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

ln -s /home/some/directory/
git add directory