如何使用git同步现有代码现有存储库

时间:2016-05-20 20:04:44

标签: git

这是我的情况:

  1. 我有一个现有的git存储库
  2. 我在活动登台服务器上有代码,该服务器已手动与存储库中的内容保持同步,但目前尚未受版本控制。
  3. 我想把这些代码放在版本控制下,不要把它吹掉并做一个git克隆,因为需要进行大量的重新配置。我想开始能够从那一刻起开始更新它。
  4. 我知道在本地(git initgit remote add origin)对此进行测试后,它会将该文件夹中的所有文件视为未跟踪。如果我要添加并提交它们,那么合并origin / master会导致与所有这些冲突。

    有没有办法无缝地插入"现有存储库与现有安装一起将其置于版本控制之下?请注意,任何上传文件夹和配置都不受版本控制,因此不必担心与这些文件冲突。

2 个答案:

答案 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 checkouthttps://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 .调用)