如何将现有目录链接到现有 git 仓库

问题描述 投票:0回答:3

我有一个文件夹 foo,没有任何 git 集成

/foo
    file1.txt
    file2.txt

和我自己的 repo,它已经有几个分支,包括 master

https://my-fake-repo

我想将 foo 链接到 https://my-fake-repo 的 master,这样如果我然后运行“git diff”,我会看到 /foo 和 https://my- fake-repo 的 master.

我想要相当于签出 https://my-fake-repo,删除内容,并将文件从 /foo 粘贴到其中。我希望只用一些 Git 命令就可以做到这一点,但我对 Git 不够熟悉,而且我的研究失败了。我试图做类似的事情:

cd /foo
git init
git remote add origin https://my-fake-repo
git branch master --set-upstream-to origin/master

但是 master 还不存在,所以它不起作用...

git
3个回答
15
投票

我想要等价于签出 https://my-fake-repo,删除内容,然后将 /foo 中的文件粘贴到其中。

实现这一点的一个简单方法是假装好像

/foo
是存储库的工作树,通过在
my-fake-repo
的本地克隆中执行此操作:

GIT_WORK_TREE=/foo git diff

这将有效地将

/foo
的内容与存储库的内容进行比较。
/foo
中但不在 repo 中的内容将显示为已添加, 不在
/foo
中但存在于 repo 中的内容将显示为已删除。等等。

这个技巧也适用于所有其他 Git 命令。 所以要小心, 因为如果您运行修改工作树的命令(例如

checkout
reset
), 他们会修改
/foo
.

的内容

但我想知道这是否真的是您使用

/foo
和 Git 存储库的最终方式。 您还提到了“链接”到 Git 存储库。 在存储库之间进行交互的正确方法是使用遥控器。 你可以将
/foo
转换为 Git 存储库, 将
my-fake-repo
注册为遥控器, 然后在两个 repos 之间使用正常的 Git 操作, 不会导致像这篇文章顶部那样的诡计。

cd /foo
git init
git add --all
git commit -m 'Add files'
git remote add origin https://my-fake-repo
git fetch origin
git diff origin/master

1
投票

不确定你是如何进入这个用例的。但另一种方法是简单地将遥控器克隆到一个新文件夹 /foo2,然后将 /foo 复制到 /foo2。然后您可以看到更改(如果有),并正常进行以丢弃/提交差异。


0
投票

另一种方法是将存储库克隆到文件夹

folderB
中,然后将
folderB/.git
复制到
folderA
中。

最后

git status
里面
folderA
应该列出所需的更改。

© www.soinside.com 2019 - 2024. All rights reserved.