如何将git存储库与未版本控制的文件夹同步

时间:2017-10-02 15:33:48

标签: git

我有一个使用Git进行版本控制的项目。

它基于一个开源项目,不是用Git管理的。

我从正式版本(比如版本1.0)开始,我从项目网站下载(作为zip文件)。

在我的存储库中,我添加了一些文件,修改了其他文件,删除了一些文件。

然后,开源项目发布了一个新版本(比如2.0)。我下载了zip文件,我想将它与我的开发同步。

在这个简单的例子中,我的软件开发版包含3个文件:

  • new_dev.txt(我的开发版本中存在的新文件,但不在2.0版本中)

内容:

toto 1
toto 2
toto 3
  • unmodified.txt(尚未修改的文件)
  • modified.txt(在我的开发版本和2.0版本中已修改的文件)

内容:

line 1
line 2
line 30

版本2.0还包含三个文件:

  • unmodified.txt(与开发版本相同)
  • new_release.txt(一个不在我开发中但存在于新版本中的文件)

内容:

line 1
line 2
line 3
  • modified.txt(已修改的文件)

内容:

line 1
line 20
line 3

要将我的开发版本与新版本合并,我会执行以下操作:

  • 我创建了一个新分支:git checkout -b v2.0
  • 我删除了其中的所有内容
  • 我复制/粘贴版本2.0文件
  • git add -A .
  • git commit -m "v2.0"
  • git checkout master
  • git merge v2.0

控制台输出如下:

Updating 54cf5a5..14725f2
Fast-forward
 modified.txt    | 4 ++--
 new_dev.txt     | 3 ---
 new_release.txt | 3 +++
 3 files changed, 5 insertions(+), 5 deletions(-)
 delete mode 100644 new_dev.txt
 create mode 100644 new_release.txt

问题是:

  • 文件new_dev.txt已被删除
  • 对于文件modified.txt,它保留了版本2.0并且没有合并我的更改

我做错了什么?

有没有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:2)

我会按照这个工作流程来处理没有被Git版本化的远程项目:

  • 为项目创建一个新的本地文件夹并执行git init
  • 将整个项目下载到此位置
  • git add所有项目文件,提交,然后git push origin master
  • git checkout -b yourBranch从原始项目创建新分支

您现在可以在yourBranch中完成所有工作,就像在任何其他功能分支中一样。您无法通过Git回馈远程项目,因此您可能不会合并回master。在更新分支时,您可以尝试以下

  • git checkout master切换到master分支
  • 现在从远程位置复制最新的项目文件
  • 对每个已更改的文件执行git add,然后git commit
  • 现在通过git checkout yourBranch
  • 切换到您的分行
  • 使用git merge master
  • 合并最新更改

这个策略应该有效,但有一点需要注意。随着时间的推移,您将面临远程项目的进一步分歧的风险,远程项目不知道您的更改。它可以达到将master的最新变化引入的点,然后合并可能会引发一些丑陋的合并冲突。最好的长期解决方案可能是找到一种方法,使用Git或其他版本控制工具在两个方向上为远程项目做出贡献。