git - 如何将现有目录链接到现有的 git repo

标签 git

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

/foo
    file1.txt
    file2.txt

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

https://my-fake-repo

我想将 foo 链接到 https://my-fake-repo 的 master , 这样如果我然后运行 ​​'git diff', 我会看到/foo 和 https://my-fake-repo 之间的区别的主人。

我想要相当于 checkout 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还不存在,所以不能用...

最佳答案

I want the equivalent of checking out https://my-fake-repo, deleting the contents, and pasting the files from /foo into it.

实现这一点的一个简单方法是假装好像/foo 是存储库的工作树,方法是在my-fake-repo 的本地克隆:

GIT_WORK_TREE=/foo git diff

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

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

但我想知道这是否真的是您使用 /foo 和 Git 存储库的最终方式。 您还提到了“链接”到 Git 存储库。 在存储库之间进行交互的正确方法是使用 Remote 。 您可以将 /foo 转换为 Git 存储库, 将 my-fake-repo 注册为 Remote , 然后在两个 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

关于git - 如何将现有目录链接到现有的 git repo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45577675/

相关文章:

git - 为什么我有时会看到 "Entry ' 文件名不是最新的。无法 merge ."after a ' git reset --hard' 和 'git pull' 吗?

git subtree push --squash 不压缩

git - 接受主分支名称和主分支名称的 git 别名?

Git:自动备份创建时的所有提交

git - 我无法让 Git 在 DOS SHELL 中使用 Vim——它说 "cannot run sh"

git - 忽略 zsh git autocomplete 中的 ORIG_HEAD

linux - 权限被拒绝(公钥)Git 和 AWS EC2

git - 存储库中已存在锁定文件,阻止此操作完成

git - 考虑到供应商被忽略,如何克隆我自己的 Laravel 项目

git - Git 树对象的内部格式是什么?