如何确保我的 git 存储库代码是安全的?

2023-11-24

如果我们的组织要从像 subversion 这样的中央服务器 VCS 切换到像 git 这样的分布式 VCS,我如何确保我的所有代码都不会出现硬件故障?

使用中央服务器 VCS,我只需要每天备份存储库。如果我们使用 DVCS,那么所有开发人员计算机上都会有大量代码分支,如果该硬件发生故障(或者开发人员丢失笔记本电脑或被盗),那么我们将没有任何备份。

请注意,我不认为“让开发人员将分支推送到服务器”是一个好的选择——那就是tedious开发商最终不会这样做。

有解决这个问题的通用方法吗?

一些澄清:

使用本机中央服务器 VCS一切除了开发人员最近的更改之外,必须位于中央服务器上。因此,例如,如果开发人员决定分支进行错误修复,则该分支位于中央服务器上并可立即进行备份。

如果我们使用 DVCS,那么开发人员可以创建本地分支(实际上是许多本地分支)。这些分支都不在中央服务器上并且可用于备份,直到开发人员认为“哦,是的,我应该将其推送到中央服务器”。

所以我看到的差异(如果我错了,请纠正我!):如果我们使用 DVCS,但使用普通的 VCS,则半实现的功能和错误修复可能无法在中央服务器上备份。我如何保证该代码的安全?


我认为您会发现,在实践中,开发人员更喜欢使用中央存储库,而不是在彼此的本地存储库之间进行推送和拉取。一旦克隆了中央存储库,在处理任何跟踪分支时,获取和推送都是很简单的命令。将六个遥控器添加到所有同事的本地存储库是一件痛苦的事情,而且这些存储库可能并不总是可访问(关闭、在带回家的笔记本电脑上等)。

在某些时候,如果你们都在同一个项目上工作,那么所有工作都需要集成。这意味着您需要一个集成分支,将所有更改汇集在一起​​。这自然需要位于所有开发人员都可以访问的地方,例如,它不属于首席开发人员的笔记本电脑上。

设置中央存储库后,您可以使用 cvs/svn 样式工作流程来签入和更新。如果您有本地更改,cvs update 会变成 git fetch 和 rebase,如果没有,则只是 git pull。 cvs 提交变成 git 提交和 git 推送。

通过此设置,您将处于与完全集中式 VCS 系统类似的位置。一旦开发人员提交了他们的更改(git推送),他们需要这样做才能对团队的其他成员可见,他们就会在中央服务器上并且将被备份。

在这两种情况下,需要遵守的规则是防止开发人员将长时间运行的更改保留在中央存储库之外。我们大多数人可能都遇到过这样的情况:一名开发人员正在开发功能“x”,该功能需要对某些核心代码进行根本性的更改。这一更改将导致其他人需要完全重建,但该功能尚未准备好进入主流,因此他只是将其检查到合适的时间点。

尽管存在一些实际差异,但这两种情况的情况非常相似。使用 git,因为您可以执行本地提交并可以管理本地历史记录,所以个人开发人员可能不会像使用 cvs 那样感受到推送到中央存储库的需要。

另一方面,使用本地提交可以作为一个优势。将所有本地提交推送到中央存储库上的安全位置应该不是很困难。本地分支可以存储在开发人员特定的标签命名空间中。

例如,对于 Joe Bloggs,可以在他的本地存储库中创建一个别名,以执行类似以下的操作来响应(例如)git mybackup.

git push origin +refs/heads/*:refs/jbloggs/*

这是一个可以在任何时候(例如一天结束时)使用的单个命令,以确保所有本地更改都得到安全备份。

这有助于应对各种灾难。乔的机器崩溃了,他可以使用另一台机器并获取保存的提交并从他停止的地方继续。乔病了? Fred 可以获取 Joe 的分支来获取他昨天所做的“必须有”的修复,但没有机会与 master 进行测试。

回到原来的问题。 dVCS 和集中式 VCS 之间是否需要有区别?您说,在 dVCS 案例中,半实现的功能和错误修复不会最终出现在中央存储库中,但我认为这不需要有什么区别。

我见过很多这样的情况:在使用集中式 VCS 时,一个开发人员的工作箱中保留了半实现的功能。它要么采用允许将一半写入的功能签入主流的策略,要么必须做出创建中央分支的决定。

在 dVCS 中,同样的事情也可能发生,但应该做出同样的决定。如果有重要但未完成的工作,需要集中保存。 git 的优点是创建这个中央分支几乎是微不足道的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确保我的 git 存储库代码是安全的? 的相关文章

  • 致命:不是 git 存储库(或任何父目录):.git [重复]

    这个问题在这里已经有答案了 当我尝试推送 github com 上的现有存储库时 当我输入命令时 网站提示我将其输入终端 我收到了以下致命错误消息 Not a git repository or any of the parent dire
  • 在centos上设置jenkins:ssh密钥和git的问题

    经历了很多问题 但似乎没有什么能解决我的问题 或者更准确地说 我不确定我是否正确地完成了整个事情 所以这里是 已安装centos 6 3操作系统 然后我按照以下指南安装詹金斯 https wiki jenkins ci org displa
  • 未能将一些参考推送至 [email protected]

    当我尝试推送到 Heroku 存储库时收到此错误 我已经设置了autocrlf false在gitconfig中 但这个问题仍然存在 我也尝试过这个解决方案here https stackoverflow com questions 566
  • 我在哪里? *(无分支)

    我已经熟悉了创建 合并和删除分支 我想知道我在哪里 这样我就不会将工作提交到错误的分支 我用git branch a看看我有哪些分支 我认为星号 显示我当前所在的分支 当我得到以下信息时 这意味着什么 no branch master or
  • Git post-receive - 如何检查推送的分支是否与主分支合并

    在我们的团队中 我们通常将所有任务推送到单独的分支中 然后发布经理审查这些分支并将它们合并到 主 分支中 有时团队成员忘记将他们的分支与主分支合并 在推送之前 所以我想做的是 在用户推送后输出一条消息 请与主分支合并 我想我需要检查一些内容
  • 无法使用 git 推送或获取 [重复]

    这个问题在这里已经有答案了 我可以拉 但无法使用 git 版本 1 9 5 推送或获取 它突然开始给我以下错误 关于如何修复它有什么想法吗 git fetch fatal unable to access https email prote
  • 从自己的 gitlab 服务器安装节点模块

    我想从我们的 gitlab 服务器安装节点模块 这是存储库的链接 http ABCD GITLAB myGroup myNodeModule git http ABCD GITLAB myGroup myNodeModule git 根据n
  • git 如何查找分支源自的提交哈希

    假设我从主分支分支到主题分支 然后在主题分支上进行了一些提交 是否有命令告诉我主题分支源自的主分支上的提交哈希 理想情况下 我不必知道我做了多少次提交 试图避免 HEAD 5 我已经用谷歌搜索过 但似乎无法找到答案 谢谢 use git m
  • 如何关闭分支而不将其从 git 的历史记录中删除?

    我想提交并关闭其分支 而不将其从历史中删除 有了水银我会commit close branch then update转到上一个 然后继续工作 有了 git 我很困惑 没有与 Git 中关闭分支完全相同的方法 因为 Git 分支比 Merc
  • 为什么 git-svn 应该积极搜索旧历史?

    当我运行 git svn clone s 时发生了一些奇怪的事情 尽管以下信息告诉我们不要惊慌 但我想知道为什么会出现这种 svn 错误 为什么这个路径不存在 是被别人删除了吗 如果是 为什么 git svn 应该积极搜索旧历史记录 Ini
  • TortoiseGit - 更改默认合并消息

    系统描述 Windows 7的 git版本2 10 1 windows 1 乌龟Git 2 3 0 0 I want 合并提交消息在不同的情况下有所不同fully自动方式 no manual amend Summary 在windows上
  • 如何使用 git --word-diff 显示空格差异?

    为了说明问题 参见diff https github com nim lang Nim commit 47c7fd037ed28b7de3d120b003d059d30e18f128 diff split diff 8af935b2312d
  • GIT 和 Ruby:如何从 ruby​​ 脚本内部取消设置 GIT_DIR 变量?

    我编写了一个非常简单的 部署 脚本作为我的post update挂钩到我的裸 git 存储库中 变量如下 live domain mydomain com staging domain stage mydomain com git repo
  • Git 中的数据完整性?

    我现在已经多次听到提到 Git 提供数据完整性 但是 这是什么意思 据我所知 git 中的所有对象都是使用 SHA 1 校验和来访问的 并且该校验和是根据文件的内容计算的 这意味着如果文件发生更改 您将得到不同的校验和 但这如何提供数据完整
  • Heroku 应用程序上的 Nodejs Express EACCES 0.0.0.0:80

    我正在尝试在他们的网站上新创建的 Heroku 应用程序上运行 Node 应用程序 我按照他们的步骤操作 但在显示应用程序状态时仍然遇到错误 我跟着Node js 入门 https devcenter heroku com articles
  • 为什么 Git Bash 无法运行我的可执行文件?

    I am on git for windows https github com git for windows 吉特 巴什 我无法在命令行上运行可执行文件 Pedr Abc 07 MINGW64 c dev ls sqlite3 exe
  • 有什么方法可以从提交的消息中获取提交的 SHA 值吗?

    当做一个git tag 我并不总是擅长记住 HEAD 6 例如 是包含的还是排他的 鉴于我的大多数提交都以问题号为前缀 我想知道是否有一些神奇的命令可以从其消息的一部分中搜索提交 SHA 我知道这很容易做到git log并从那里开始工作 但
  • 如何使用 git 找到一个分支中但不在另一个分支中的所有提交?

    我有两个分行master and live Master是发展 分支并包含尚未准备好进入的提交live 如果在master需要进入的分支live树枝然后他们被樱桃采摘master to live 有时会做出承诺live分支然后是 樱桃摘入m
  • git rebase 吃了我的提交!为我翻译“git reflog”输出?

    我已经完成了五次提交 我想在推送它们之前将它们全部合并为一次提交 出于某种原因 我决定尝试通过与通常使用的不同的方式来做到这一点 FWIW 我试图按照此处的说明进行操作http gitready com advanced 2009 02 1
  • Git 实验分支还是单独的实验存储库?

    我正在开发一个 Android 应用程序 并且在整个开发周期中一直使用 Git 现在 我想构建并发布实验性功能 供人们尝试和安装 同时仍将原始的 稳定的应用程序安装在他们的设备上 现在 这意味着我需要使用不同的包名称 这会更改开发项目中的一

随机推荐

  • 如何在 ASP.NET 网站项目中使用最新的 VB.NET 语言级别?

    我的任务是对 2009 年开发的 Web 应用程序进行现代化改造 它是用 VB NET 编写的 并使用 ASP NET WebForms 我想使用 VB NET 中最新的语言结构 我得到有用的指示 说 Visual Basic 10 0 不
  • 未捕获的类型错误:对象 [object DOMWindow] 的属性“$”不是函数

    我得到一个 未捕获的类型错误 对象 object DOMWindow 的属性 不是函数我的脚本在 Chrome 中出错
  • “this”关键字如何工作以及何时使用?

    我正在寻找关于 this 关键字的作用以及如何正确使用它的清晰解释 它的行为似乎很奇怪 我不完全明白为什么 如何this工作以及什么时候应该使用它 this是 JavaScript 中的关键字 是执行上下文的属性 它的主要用途是在函数和构造
  • Zend 动作助手

    我正在学习如何使用 Zend 框架 并意识到操作助手是有用的 我已经在我的机器上设置了 Zend 的默认安装 但我不知道帮助程序文件需要放在哪里 我需要在引导程序文件中放入什么以及如何使用它 谁能给我指出正确的方向吗 ZF 用户指南对我来说
  • C# 字符串到十六进制、十六进制到字节的转换

    我有一个方法 它采用十六进制值并将其分配为纯文本 但字节类型是这样的 byte plainText 0xd7 我想从文本框中获取这个值 例如用户将在文本框中键入 d7 我将像这样分配它 byte plaintText 0xd7 我无法做到这
  • 我应该使用我的应用程序重新分发 msvcrt.dll 吗?

    如果应用程序的某些库动态依赖于 msvcrt dll 我是否应该将 msvcrt dll 与我的应用程序一起重新分发并使用私有 dll IE 系统的msvcrt dll dll hell 是否可能存在不兼容问题 应用程序针对 Windows
  • 如何实现顶层异常处理?

    最近 我必须为同事开发的现有服务开发一个附加模块 他在主工作函数中放置了一个 try catch 块 用于捕获所有冒泡到此级别的未处理异常 并将它们与堆栈跟踪信息等记录在一起 try do main work catch Exception
  • PyCUDA:设备代码中的 Pow 尝试使用 std::pow,失败

    问题或多或少说明了一切 calling a host function std pow
  • ValueError:找到具有 0 个样本的数组(形状= (0, 1),而 MinMaxScaler 要求最小值为 1

    我是机器学习的初学者 我正在帮助我的数学专业朋友基于 TensorFlow 创建一个股票预测器 csv他提供的文件 我有一些问题 第一个是他的 csv文件 该文件只有日期和结束值 它们没有分开 因此我必须手动分隔日期和值 我已经成功做到了这
  • ArrayList 的不安全或未经检查的操作

    我被指派编写一个程序 获取 100 个 0 25 之间的随机整数并将它们存储在一个数组中 然后我必须调用两种方法来分割偶数和赔率 非常典型 所以我尝试了 ArrayList 的东西 我刚刚学会它 它看起来很好 我正在关注教程和在线的东西 直
  • hibernate oracle 标识符太长 ORA-00972

    我被这个问题困扰了 数据库架构是由其他人提供的 因此我不能简单地更改名称 我尝试在各处添加正确的注释 也许我遗漏了一些东西 明显的 这是我的完整映射 相当多的类 我将提交 getter setter 问题是当休眠试图获取所有List
  • Android Service.startForeground 不尊重通知 ID 的唯一性

    Service startForeground vs 通知管理器 notify 给出不同的行为 使用时notify使用两个不同的通知 ID 创建 2 个通知 Good 当做同样的事情时启动前台 一个通知会覆盖另一个通知 Bad 测试设备 N
  • 用于纯 Firebase JavaScript API 的 orderby 对象过滤器

    I found angularFire当与纯 Firebase JavaScript API 结合使用时 总是让我感到困惑 假设我不知道如何调用 Firebase datasapshot APIss name ss hasChild ss
  • 在python中获取函数调用者的信息

    我想获取有关 python 中特定函数的调用者的信息 例如 class SomeClass def init self x self x x def caller self return special func self x def sp
  • 内存泄漏单元测试C++

    我刚刚解决了应用程序中的内存泄漏问题 现在我想编写一个单元测试以确保这种情况不会再次发生 我正在寻找一种方法来检测当前应用程序 工作集 在某些功能之前和之后的内存使用情况 例如 long mem used GetMemUsed Do som
  • Java ObjectInputStream 挂起

    我现在感觉真的很愚蠢 伙计们 基本上我是通过本地计算机上的 TCP 连接的 当我尝试在客户端创建输入 输出流时 它不会通过创建对象输入流 是什么赋予了 这在打印 2 后停止 没有异常或任何东西 这不是我第一次使用这个类 这部分是我感到困惑的
  • XSLT 将同名兄弟节点的值合并/连接到单个节点

    输入XML
  • 实体管理器是否创建与数据库的连接?

    在我的项目中 我忘记关闭每个操作的实体管理器 一段时间后 由于与 mysql 服务器的连接过多 我遇到了异常 这是否意味着每个实体管理器都建立连接 当我们忘记关闭连接时会发生什么 我只使用了一个实体管理器工厂 假设您正在使用应用程序管理的实
  • 根据“grid_location”方法,按钮有自己的坐标系吗?

    我正在尝试使用grid location方法 从网格几何管理器 在 Tkinter 中 但似乎我做错了什么 这是我的代码 from tkinter import root Tk b Button root text 00 b grid ro
  • 如何确保我的 git 存储库代码是安全的?

    如果我们的组织要从像 subversion 这样的中央服务器 VCS 切换到像 git 这样的分布式 VCS 我如何确保我的所有代码都不会出现硬件故障 使用中央服务器 VCS 我只需要每天备份存储库 如果我们使用 DVCS 那么所有开发人员