【问题标题】:How to git a folder outside the repository?如何在存储库之外 git 一个文件夹?
【发布时间】:2015-01-13 03:42:47
【问题描述】:

我有一个 git 存储库,名称为 ~/a

同时,我有一些来自~/b/content/data/ 的东西,将由另一个应用程序更新。

出于备份目的,我想将 ~/b/content/data/ 的东西添加到 git ~/a无需移动文件夹。而且,当然,没有手动复制。

我可以这样做吗?是通过ln吗?

【问题讨论】:

  • This question 关于让 git 跟随符号链接有一些不错的答案/选项

标签: git ln


【解决方案1】:

更多方法

git --work-tree=~/b/content/data add .

一次性使用(您指定的路径名​​是相对于给定工作树的)

检查您指定的工作树中是否有任何嵌套的存储库 (find that/path -name .git),这些也称为子模块,将添加到您自己的存储库的只是那里当前签出的提交 ID。

请注意,像 add 这样的结帐总是针对当前工作树,所以如果您执行上述命令,然后提交,然后在没有覆盖的情况下结帐,您将在~/a 下签出~/b/content/data 的内脏。

如果要为存储库设置持久工作树,

git config core.worktree ~/b/content/data

或作为相对路径(相对于 .git 目录)

git config core.worktree ../../b/content/data  # ~/a/.git/.. is ~/a

【讨论】:

    【解决方案2】:

    如果您将~/b/content/data 链接到~/a/b,git 将只存储对路径名的引用,而不是实际内容。另一方面,如果您将~/b/content/data 移动到~/a/b 并将其链接回~/b/content/data,git 将提交文件。

    【讨论】:

      【解决方案3】:

      在 git 1.6.1 之前,添加符号链接目录一直有效。现在你有其他选择了。

      • 您可以为要存储的单个文件创建硬链接,如果您知道它们或者它们很少。
      • 您可以将实际数据放入存储库并将~/b/content/data/ 设为符号链接。
      • 您可以使用sudo mount --bind SOURCEDIRECTORY TARGETDIRECTORY 代替链接。

      【讨论】:

      • 同意,第三个选项:sudo mount --bind SOURCEDIRECTORY TARGETDIRECTORY 确实有效
      • 如何撤消这个挂载?
      • sudo umount SOURCEDIRECTORYsudo umount TARGETDIRECTORY 应该可以工作。
      猜你喜欢
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      相关资源
      最近更新 更多