天道酬勤,学无止境

version-control

为什么将带有尾随空格的行提交到源代码管理中是不好的?(Why is it bad to commit lines with trailing whitespace into source control?)

问题 为什么将带有尾随空格的行检查到源代码管理中会很糟糕? 这会导致什么样的问题? 回答1 基本上是错误的差异。 如果差异只显示“真实”的变化,这会很有帮助。 一些 diff 程序会忽略空格,但最好首先避免虚拟更改。 当然,如果它使线缠绕在同事的机器上也无济于事。 回答2 这就像粉刷墙壁,但没有正确地完成边缘,然后直接进入踢脚板。 回答3 因为很多人删除了它们,如果您不使用所有选项(比如一个普通的旧 cvs diff),您将在 diff 工具中将它们显示为修改后的行,这意味着人们无缘无故地看到您的行。 从理论上讲,您也可以使用字符串来包装行,其中空格确实很糟糕,但是……可能不是您的问题。 回答4 有些编辑器会自动删除尾随空格,有些则不会。 这会产生差异噪声并可能导致合并冲突。 回答5 是的,我有点同意其他帖子,但我想补充一点,它本身并不坏。 这不是一个很好的练习,但那是发生的事情,你只是叹了口气,继续做事情。 回答6 现代 diff 实用程序不会被空白所困扰。

2021-09-20 17:53:03    分类:技术分享    version-control

为什么将带有尾随空格的行提交到源代码管理中是不好的?(Why is it bad to commit lines with trailing whitespace into source control?)

问题 为什么将带有尾随空格的行检查到源代码管理中会很糟糕? 这会导致什么样的问题? 回答1 基本上是错误的差异。 如果差异只显示“真实”的变化,这会很有帮助。 一些 diff 程序会忽略空格,但最好首先避免虚拟更改。 当然,如果它使线缠绕在同事的机器上也无济于事。 回答2 这就像粉刷墙壁,但没有正确地完成边缘,然后直接进入踢脚板。 回答3 因为很多人删除了它们,如果您不使用所有选项(比如一个普通的旧 cvs diff),您将在 diff 工具中将它们显示为修改后的行,这意味着人们无缘无故地看到您的行。 从理论上讲,您也可以使用字符串来包装行,其中空格确实很糟糕,但是……可能不是您的问题。 回答4 有些编辑器会自动删除尾随空格,有些则不会。 这会产生差异噪声并可能导致合并冲突。 回答5 是的,我有点同意其他帖子,但我想补充一点,它本身并不坏。 这不是一个很好的练习,但那是发生的事情,你只是叹了口气,继续做事情。 回答6 现代 diff 实用程序不会被空白所困扰。

2021-09-20 17:51:55    分类:技术分享    version-control

在源代码管理中存储二进制依赖项是一种好习惯吗?(Is it good practice to store binary dependencies in source control?)

问题 多年来,我一直将二进制依赖项存储在\lib文件夹中,并将其与项目的其余部分一起检查到源代码管理中。 我发现现在我们有 NuGet 和 NuGet 包还原,我这样做的次数减少了。 我听说有些公司强制执行一项规则,不得将二进制文件签入源代码管理。 列举的原因包括: 大多数 VCS 不能很好地处理二进制文件 - 差异和合并没有得到很好的支持磁盘使用量增加提交和更新较慢存储库管理器开箱即用的额外功能、控制和易用性将丢失它鼓励进一步的不良做法; 理想情况下,项目应该寻求完全自动化他们的构建,检查版本控制通常是一个手动步骤 对于绝大多数使用源代码控制的项目,是否存在支持或反对这种做法的客观论据? 回答1 我强烈建议您不要使用您描述的做法(在源代码控制中禁止二进制文件的做法)。 实际上,我将其称为组织反模式。 唯一最重要的规则是: 你应该能够在一台新机器上签出一个项目,它必须开箱即用。 如果这可以通过 NuGet 完成,那么很好。 如果没有,请检查二进制文件。 如果存在任何法律/许可问题,那么您的存储库中至少应该有一个包含所有必需信息的文本文件(名为how_to_compile.txt或类似文件)。 这样做的另一个非常重要的原因是避免版本问题 - 或者你知道吗 几年前运行的某个库的确切版本以及如果它真的是项目中使用的实际版本并且可能最重要的是:你知道如何获得那个确切的版本吗?

2021-09-20 04:06:26    分类:技术分享    git   svn   version-control

本地分支出现在 GitHub 的“网络”视图上(Local branches show-up on GitHub's “Network” view)

问题 我们正在使用 Git,我们的工作流程由位于 GitHub 和每个开发人员的本地存储库上的“dev”和“master”分支组成。 没有直接在“master”或“dev”上执行工作,而是在本地分支中执行,并且只在“dev”上进行合并,然后再与“master”合并。 我们不会将本地分支推送到 GitHub。 出于某种原因,开发人员的本地分支出现在 GitHub 上的“网络”视图中,这使网络图变得混乱(我应该指出分支本身并不存在于 GitHub 上的分支列表下)。 我的问题是这是否是正常行为并且自动发生作为显示对“dev”和“master”的更改来自何处的一种方式,还是因为有人错误地推送了本地分支并稍后将其删除? 如果是后者,有没有办法清理杂乱? 回答1 您在“网络”视图中看到的工件可能是基于合并的工作流程的痕迹。 当合并操作导致合并提交* (即它不是“快进”)时,存储库历史的 DAG 模型将包括代表两个分支的部分。 当非本地分支被推送时,其祖先将包括最初在本地分支上进行的提交。 *通过使用git merge --no-ff或者因为两个分支都超出了它们的合并基础。 考虑一系列假设的事件以及中央存储库中产生的历史 DAG+refs: A$ git fetch && git checkout -b foo central/dev # A works and commits to her

2021-09-20 00:56:25    分类:技术分享    git   version-control   workflow   github   dvcs

如何使用 git 隔离属于大型项目的项目/文件夹?(How to isolate projects/folders with git that are part of a large project?)

问题 托管在 Bitbucket 上的 git 是否可以将 git 存储库中的目录作为具有自己访问权限的子存储库? 我目前正在使用 subversion,在这种情况下,我想切换到 GitHub。 我如何在庞大的代码库中隔离小项目,以便与只查看和处理位于该项目目录中的特定代码的自由职业者合作? 回答1 最好使用子模块:您的主项目将对您的其他存储库具有“引用”(称为gitlink ,索引中的特殊条目)。 这些存储库将在您的主项目中声明为子模块,但可以由其他开发人员独立使用。 使用 git submodule add,您可以引用位于您想要的任何 Git 存储库托管服务中的存储库:BitBucket 主存储库可以引用由 GitHub 管理的存储库。 这意味着您的主项目在 BitBucket 上可以是私有的,而依赖项(子模块)是 GitHub 上的公共存储库。

2021-09-19 16:08:58    分类:技术分享    git   svn   version-control   project-management

尝试将化石仓库导出到 git 时出现“无法打开数据库文件”("Unable to open database file" when trying to export a fossil repo to git)

问题 我得到了一个fossil.exe: [<repo path>]: unable to open database file当我试图将一个fossil repo 导出到Windows 上的git 时fossil.exe: [<repo path>]: unable to open database file 。 这是我做的步骤: git init 新仓库 cd 新仓库化石.exe 导出--git "fossil_repo_path" | git 快速导入 回答1 我没有弄清楚是什么导致了问题,但我找到了一个解决方法: git init git-repo cd fossil-repo fossil export --git > git.txt 将git.txt移动到git-repo type/cat git.txt | git fast-import git checkout trunk 瞧

2021-09-19 09:39:22    分类:技术分享    git   version-control   fossil

从标签分支(Branching from a Tag)

问题 我在这里征求意见。 以下可能被视为特定于 SVN 的问题,或更一般的版本控制问题。 如果项目的源代码要在与发布相对应的点进行分支,也许是为了维护工作,是否最好: (a) 从标签分支,或 (b) 从标签复制的节点(例如在主干上)分支? 这两种方法的优缺点是什么? 这有关系吗? 谢谢。 回答1 我建议 (b) 因为这将允许您使用 svn 的合并跟踪轻松地将合并交回主干(假设您在服务器和客户端有 svn 1.5+)。 如果您使用了技术 (a),则您必须自己管理合并 - 假设您不从同一分支进行多次合并,这还不错。 鉴于您正在考虑从标签创建一个分支,这通常用于修补,您可能最终需要多次合并到您的主干线以将这些补丁重新放入主干中。 标签是及时拍摄“快照”或标记特定代码行(无论是主干还是分支)的里程碑的首选方式,只是为了从已标记为里程碑的源快速构建特定里程碑或轻松里程碑之间的差异。 除此之外,所有工作都在主干和分支之间完成。 如前所述,您可以使用svn log轻松找到标记复制的修订版/源代码。 例如svn log --stop-on-copy -v tags/yourtag会将最新复制的修订版放在输出的尾部。 这允许您从修订版创建一个分支,即创建标记的活动代码行。 回答2 在我看来,如果我打算在以后添加和修补主要项目,我会走 (a) 路线,如果我打算开发平行的东西,我会走 (b) 路线。

2021-09-19 05:01:05    分类:技术分享    svn   tags   branch   version-control

从标签分支(Branching from a Tag)

问题 我在这里征求意见。 以下可能被视为特定于 SVN 的问题,或更一般的版本控制问题。 如果项目的源代码要在与发布相对应的点进行分支,也许是为了维护工作,是否最好: (a) 从标签分支,或 (b) 从标签复制的节点(例如在主干上)分支? 这两种方法的优缺点是什么? 这有关系吗? 谢谢。 回答1 我建议 (b) 因为这将允许您使用 svn 的合并跟踪轻松地将合并交回主干(假设您在服务器和客户端有 svn 1.5+)。 如果您使用了技术 (a),则您必须自己管理合并 - 假设您不从同一分支进行多次合并,这还不错。 鉴于您正在考虑从标签创建一个分支,这通常用于修补,您可能最终需要多次合并到您的主干线以将这些补丁重新放入主干中。 标签是及时拍摄“快照”或标记特定代码行(无论是主干还是分支)的里程碑的首选方式,只是为了从已标记为里程碑的源快速构建特定里程碑或轻松里程碑之间的差异。 除此之外,所有工作都在主干和分支之间完成。 如前所述,您可以使用svn log轻松找到标记复制的修订版/源代码。 例如svn log --stop-on-copy -v tags/yourtag会将最新复制的修订版放在输出的尾部。 这允许您从修订版创建一个分支,即创建标记的活动代码行。 回答2 在我看来,如果我打算在以后添加和修补主要项目,我会走 (a) 路线,如果我打算开发平行的东西,我会走 (b) 路线。

2021-09-19 04:59:07    分类:技术分享    svn   tags   branch   version-control

在“问题”出现之前,Sourcesafe DB 可以有多大?(How big can a Sourcesafe DB be before “problems” arise?)

问题 我们使用 SourceSafe 6.0d 并且有一个大约 1.6GB 的数据库。 我们还没有遇到任何问题,现在也没有更改源代码控制程序的计划,但是在它成为问题之前,SourceSafe 数据库可以有多大? 谢谢 回答1 您是否运行内置的 ssarchive 实用程序来进行备份? 如果是这样,2GB 是可以恢复的最大大小。 (http://social.msdn.microsoft.com/Forums/en-US/vssourcecontrol/thread/6e01e116-06fe-4621-abd9-ceb8e349f884/) 注意:ssarchive 程序不会告诉你这个; 只是如果您尝试恢复超过 2GB 的数据库,它将失败。 谨防! 所有这些告诉你他们在更大的数据库上运行良好的人要么使用另一个存档程序,要么他们没有测试恢复功能。 回答2 我的 VSS 问题开始时低至 1.5-2.0 演出。 元答案是,不要使用它。 VSS 远不如您触手可及的六种替代品。 源代码控制的一部分应该是确保存储库的完整性。 如果您的源代码控制工具的基本假设之一是您永远不知道它何时会开始降低数据完整性,那么您的工具就无法实现其目的。 我已经有近十年没有见过使用 VSS 的专业软件公司了。 回答3 1 字节! :-) 对不起,伙计,你设置了我。 回答4 我实际上运行了一个大约 40 演出的

2021-09-18 19:48:42    分类:技术分享    performance   version-control   visual-sourcesafe   limits

GIT 上的 SSIS 解决方案?(SSIS solution on GIT?)

问题 我找不到很多关于 SSIS 解决方案使用什么版本控制的资源。 将 SSIS 解决方案放在 GIT 存储库上是否“正确”,或者对于此类项目还有其他(更好的)解决方案。 我对 git 很熟悉,但我不确定它如何与 SSIS 一起工作,因为它主要是 UI 的事情我不知道穿上 git 是否会搞砸任何事情,有什么需要小心的地方等等。 回答1 相反,SSIS 的接口通常是通过 UI 实现的,但本质上它是大量不敬虔的 XML。 所以是的,您可以并且应该对 SSIS 解决方案进行版本控制,就像您应该对开发的任何内容进行版本控制一样。 合并XML是冒险的,充其量,它的“直” XML或我们所得到的与SSIS是否:描述流程XML,并嵌入到XML是一个描述GUI元素的布局更多的XML。 在合并 SSIS 包时,布局和工作的混合会导致很多冲突。 有像 BIDS Helper 这样的工具试图提供“智能差异”。 我发现识别“此数据流已更改”对我很有帮助,但除此之外,我将 SSIS 包视为源代码管理中的二进制对象。 无论您使用 git、mercurial、svn、csv、rcs、perforce、tfs、sourcesafe 还是任何其他工具,都 100% 与版本化的内容类型无关。 回答2 我不喜欢将 SSIS(和 SSRS)文件放在 git 中,因为它们不能合并。 在TFS 中

2021-09-18 18:46:31    分类:技术分享    git   version-control   ssis   solution