【问题标题】:How do I keep track of the changes I make to my working copy of the source codes each day?如何跟踪每天对源代码工作副本所做的更改?
【发布时间】:2013-12-11 02:08:32
【问题描述】:

我知道 svn diff,但它只给出了我的工作副本和我上次从存储库中检出的当前版本之间的差异。

我想要今天的工作副本和昨天的工作副本之间的差异。 (可能就像 MS Word 中的“跟踪更改”。)

我正在处理大型代码库、数千个文件和文件夹、每个文件数千行。我目前在 Ubuntu VM 上进行代码编译,并通过 Windows 文件夹中的多个不同副本跟踪每个文件的不同版本。然后我还有另一个用于 SVN 提交的 Windows 文件夹工作副本。如果我想从 Linux 提交,我还有另一个用于 SVN 提交的 Ubuntu 目录工作副本。这变得相当混乱。希望有好的解决方案。

更新 1:

我最近在我的 Ubuntu VM 上创建了一个本地 SVN 服务器,它可以处理我所做的更改。但是我遇到了如何将更新的公司服务器源代码传输到我的本地服务器的问题,反之亦然。

所以这行不通。

更新 2:

我设法从公司服务器上存储库的主干创建了一个分支。 (感谢 Robert Levy 的建议。)

我在 Ubuntu 上使用 diff 和 patch 命令将所有更改转移到此分支。

此时我已经对源代码进行了很多更改,仅用于测试,所以我不会将这些更改合并到主干。

但是,我会进行后续更改,希望合并到主干中。

我预计会发生一些冲突,因为新更改(我想要合并)将是前一个更改(我不想合并)之前的一行,因此差异不会是干净的。

为了合并而创建另一个分支是个好主意吗?有哪些步骤或潜在的冲突解决方案?

更新 3:

希望我已经习惯了用 Tortoise SVN 合并树干和树枝。

(我应该在分支“to_test”还是分支“to_merge”或主干上编译?)一次一步。

更新 4:

我现在在 Ubuntu 的分支“to_test”上编辑和交叉编译工具链。时不时地,我将主干合并到分支“to_merge”,并将主干合并到分支“to_test”(解决任何冲突)。当我的功能完成后,我会将分支“to_test”中的选定更改合并到分支“to_merge”,然后将分支“to_merge”中的所有更改合并到主干。所有的合并都是在 Windows 上的 TortoiseSVN 和 KDiff3 中完成的,非常方便。

与手动制作单个文件的多个备份副本相比,这无疑是一个巨大的飞跃。

谢谢,堆栈交换。

更新 5:

我现在有两个分支:“理解”和“发展”。在“理解”分支中,我可以用大量 printk 调试语句乱扔它。在“开发”分支中,我只对所需功能进行必要的更改。功能完成后,我会将“开发”分支中的所有内容合并到主干。我的公司使用“稳定的主干”政策。 “主干”应该可以投入生产了。

在“理解”分支中,我在使用差异补丁后一次性提交了所有过去的手动更改。因此,不可能选择单独的更改进行合并。因此,我的“理解”分支和“发展”分支是相互独立的。

【问题讨论】:

    标签: svn version-control commit working-directory


    【解决方案1】:

    为自己创建一个分支。这将是您自己的私有分支,您可以随意定期提交更改,而不必担心影响其他人。通过频繁提交,您可以轻松地调出差异,显示在给定日期发生的变化。准备好后,将您的私有分支合并回主分支,以便其他人可以从您所做的出色工作中受益。

    【讨论】:

    【解决方案2】:

    另一种工作方式是在本地拥有一个 git 或 mercurial 存储库来隐藏 svn 存储库,您可以对本地存储库进行频繁提交,并且您可以使用 pull、rebase、merge、commit、push 循环来提交您的更改 svn 存储库。

    唯一需要注意的是,提交到本地存储库的更改只存在于那里,直到您完成推送。但是,您可以拥有另一个目录,该目录是本地网络上另一台机器上或可移动驱动器上的 hg/git 存储库的克隆,如果您 cd 到它然后拉它,它将非常快速地完整备份您的更改.

    要使用 mercurial 进行设置,过程类似于:

    hg clone svn+https://Path/To/Your/SVN/Repo ~/HG_Working
    cd /media/me/removable/drive 
    hg clone ~/HG_Working
    

    在 ~/HG_Working 中进行一些更改后:

    ~/HG_Working> hg commit -m "Tuesdays Work"
    cd /media/me/removable/drive 
    hg pull
    hg up
    

    【讨论】:

    • 谢谢,我以前不知道 Mercurial。我更喜欢鼠标而不是键盘,所以我仍然会使用 Tortoise SVN 而不是 Hg 或 Git。
    • thg 或 TortoiseGit 都很好——在某些方面比 TortoiseSvn 更好。就我个人而言,我发现 Mercurial 是一个比 git 更简单的工具 - 我发现考虑提交更改然后将其推出比添加更改(可能重复)、提交一组更改、(重复)、推送更改更容易。根据您的 IDE,您会发现很多都集成了 hg 或 git 之一或两者。
    • 谢谢,我阅读了分布式 VCS,我觉得我不需要它,因为我总是连接到主 SVN 服务器。如果公司使用 Git/Hg,我也很乐意使用它。
    【解决方案3】:

    您可以在 githubbitbucket 上创建一个 git 存储库

    免费使用。您可以在本地系统中创建 git 分支。然后可以将本地的所有更新表单推送到远程。如果您不想将代码保留在远程,那么您可以在本地初始化 git,然后只需将 .git 文件夹从一个位置复制到另一个位置以确保安全。

    可能有类型的命令可用于跟踪您的代码或状态。

    【讨论】:

      猜你喜欢
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 2017-02-26
      • 1970-01-01
      • 2018-04-25
      相关资源
      最近更新 更多