这是我的情况:
我知道在本地(git init
,git remote add origin
)对此进行测试后,它会将该文件夹中的所有文件视为未跟踪。如果我要添加并提交它们,那么合并origin / master会导致与所有这些冲突。
有没有办法无缝地插入"现有存储库与现有安装一起将其置于版本控制之下?请注意,任何上传文件夹和配置都不受版本控制,因此不必担心与这些文件冲突。
答案 0 :(得分:6)
我就是这样做的:
$ git init .
$ git remote add origin [url of the repo]
$ git fetch origin
$ git push --set-upstream origin master
$ git branch -f master origin/master
(关于最后一个命令,另请参阅描述该想法的Git: move branch pointer to different commit without checkout和https://www.kernel.org/pub/software/scm/git/docs/git-branch.html。)
这很有效,因为git正在比较工作目录中文件的SHA1值,该值基于文件名和内容。为了证明它有效,你可以运行git diff
,它不会显示任何差异(假设你真的保持目录与repo同步)。我们也可以证明这一点:
$ git hash-object testfile.txt
77356c31404cfbc88ab78de4025ebd609c022927
$ ls -a .git/objects/77/*
.git/objects/77/356c31404cfbc88ab78de4025ebd609c022927
请注意,我们现在有
但是,暂存区域仍然不同步。这就是为什么另一个
$ git add -A
是必需的(请记住,如果您有许多或大型文件,此操作可能会变得昂贵,因为所有文件都将添加到存储库索引)。这也将同步您的暂存区域。然后git status
会产生:
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
答案 1 :(得分:2)
我在node_modules
中有一个子模块,在npm i
之后将其附加到仓库的方法略有不同:
git init .
git remote add origin [url of the repo]
git fetch origin
git branch -f master origin/master
git reset .
(无需执行push
步骤,因为它会导致error: failed to push some refs
错误并最终导致git reset .
调用)