如何使用git跟踪另一个目录中的更改?

时间:2016-04-19 21:10:23

标签: git

我正在开发一个项目,我可以访问代码,但无法将版本控制添加到源目录本身。 (主要开发人员有自己的源代码控制,但由于这里不相关的原因,它不可访问/可理解/等。)

为了保持理智,并跟踪其他开发人员所做的任何更改,我希望设置某种版本控制系统。 (Git是我自VSS黑暗时代以来唯一使用的版本控制系统,所以我可能会使用它。)

我目前的计划是镜像现有的代码库并在本地初始化git。但是,当其他开发人员进行更改时,我需要能够将本地副本与实际源进行比较。

我的问题:

  1. 这是一个合理的策略吗?
  2. 如果是,我应该使用git init --bare还是git init
  3. 进行设置
  4. 我应该如何将本地副本与实际来源进行比较? diff -qNr source/ local-source/git diff --no-index source/ local-source/?还有别的吗?

2 个答案:

答案 0 :(得分:3)

首先,有点背景知识。

在Git中,这些概念是完全分开的:

  • Git存储库:包含Git的数据
  • 工作树:文件系统中实际工作的目录树

当您使用git init /some/path创建本地Git存储库时,它会在/some/path/.git创建一个Git存储库,当您在/some/path及更低版本中运行Git命令时,Git会找到存储库,并且假设工作树位于/some/path

现在谈谈你的情况:

  

我正在开展一个项目,我可以访问该代码,但无法将版本控制添加到源目录本身。

您可以在源目录本身之外创建一个Git存储库,并相应地设置GIT_DIR(repo)和GIT_WORK_TREE(工作树)变量。 例如,如果源目录位于/srv/project,则可以执行以下操作:

git init --bare /my/projects/repo.git
export GIT_TREE=/my/projects/repo.git
export GIT_WORK_TREE=/srv/project

然后你可以cd /srv/project并运行Git命令,就好像你在/srv/project中有一个常规的Git项目(在/srv/project/.git中有一个Git存储库)。您可以像往常一样使用Git命令,所有存储库操作都将完成/my/projects/repo.git

在真正的Git存储库中,您可以将此其他repo用作远程,并使用Gi​​t操作与您自己的分支进行比较。

我希望这会有所帮助。

答案 1 :(得分:2)

此问题的标准解决方案是将传入代码视为“供应商分支”。只需创建供应商分支(作为孤立的,无关的分支,其中没有代码,或在单独的存储库中),添加初始版本和提交。获得更新后,将其放入供应商分支(或供应商存储库)并照常提交。

要将供应商版本视为单独的存储库,您可以使用子模块(据我所知,这实际上是它们的预期用例)。