我有一个文件夹 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 还不存在,所以它不起作用...
我想要等价于签出 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
不确定你是如何进入这个用例的。但另一种方法是简单地将遥控器克隆到一个新文件夹 /foo2,然后将 /foo 复制到 /foo2。然后您可以看到更改(如果有),并正常进行以丢弃/提交差异。
另一种方法是将存储库克隆到文件夹
folderB
中,然后将folderB/.git
复制到folderA
中。
最后
git status
里面folderA
应该列出所需的更改。