标签: git-workflow

我应该如何组织我的Git存储库和分支来创建网站的多个版本?

我是SVN用户希望转移到Git.我一整天都在阅读文档和教程,但我仍然没有答案.我不知道这个工作流程是否有意义,但这是我的情况,以及我希望从我的工作流程中得到什么:

  • 多个开发人员,都在他们的工作站本地开发
  • 该网站的3个版本:Dev,Staging,Production

这是我的梦想:

开发人员在他自己的分支上本地工作,比如说"developer1",在他的本地机器上进行测试,并提交他的更改.

另一位开发人员可以将这些更改下载到他自己的分支中 合并developer1 - > developer2.

当工作准备好被公众看到时,我希望能够"推动"到Dev,Staging或Production.

git push origin staging 
Run Code Online (Sandbox Code Playgroud)

或者可能

git merge developer1 staging
Run Code Online (Sandbox Code Playgroud)

我不确定.就像我说的,我还是Git的新手.

以下是我的主要问题:

  • 我的网站(Dev,Staging,Production)是否必须是存储库?为了成为新变化的接受者,他们必须"裸露"吗?

  • 我想要一个或多个存储库,有多个分支?

  • 这甚至是有意义的,还是我走错了路?

我已经阅读了很多教程,所以我真的希望有人可以帮助我解决我的具体情况.非常感谢!

git dvcs git-workflow git-branch

5
推荐指数
1
解决办法
2916
查看次数

用于人类可读的sneakernet"拉/推"的Git格式补丁/包

我有两个房间,我使用git维护一些源代码,大多数开发发生的"开发"房间和我们实际使用软件的"部署"房间.部署室中也不可避免地发生了一些变化.我希望两个房间在git中分享相同的历史.

限制:

  1. 出于安全原因,这两个房间没有网络连接.
  2. 只有文本文件(人类可读)才能离开部署室.

将更改移动到部署室是很简单的git bundle,并跟踪我们移动到部署室的最后一次提交.由于纯文本限制,将更改移出房间更加困难.

目标:在两个未连接的房间之间来回移动,就像发生git pull了一样,两个房间中的SHA1哈希相同.

至今:

  • 我已尝试git format-patch将更改从部署移回dev,但这不记录合并,因此需要为每个连续的更改集生成不同的补丁集以及如何重现精确合并提交的一些记录发生在两者之间.有一些关于为合并提交制作差异的讨论,但这似乎并没有捕获实际的祖先,只捕获了变化.似乎补丁可能不是足够丰富的格式来提供必要的信息.

  • 可以使用一些bundle-to-text脚本将bundle转换为非压缩和人类可读(ish)格式(然后在下载后再返回)但我没有发现存在这样的脚本的证据.

  • 也许可以编写一个脚本来将历史记录从一些共同的祖先转到最新的提交,并且a)制作补丁或b)重新创建一些众所周知的引用的合并.

回退: 我总是可以将从部署室出来的提交压缩成一个原始补丁并打破历史记录,但是从dev-> deploy进一步下载会破坏任何现有的工作副本.不理想.

更新: 我相信git fast-export可能会做我需要的东西,虽然大多数例子都有它在整个存储库上工作,而不是像部分历史git bundle.我有一个工作的玩具示例,我可以将部分历史记录导出到一个过时的克隆,但它需要我手动编辑快速导出输出,以便我添加from <sha1>到第一个提交.如果没有这个修改,导入会创建不同的sha1,然后抱怨Not updating refs/heads/master (new tip <hash> does not contain <master's hash>).

Update2: 我的git fast-export解决方案确实有效,但它有带宽问题,因为它通过提供全新文件而不是以前文件的差异来工作.这是不可接受的,因为我实际上必须阅读所有这些额外的行.

git git-workflow git-bundle git-am

5
推荐指数
1
解决办法
533
查看次数

"樱桃选择合并"的最简单方法

我知道标题有点毛茸茸 - 因此引用!

假设我有一个分支,b_feature分支并合并到主开发分支b_master.还有另一个分支,b_release我希望将这些更改添加到(作为点发布).b_master并且b_release已经分歧,永远不会再合并.

---------Bm----k1-----Mm-----> b_master (k1 isn't to be included in b_release)
 \        \          /
  \        c1--c2--c3  (b_feature)
   \
    \----Br---------Mr-----> b_release
          \        / 
           cA-cB-cC
Run Code Online (Sandbox Code Playgroud)

我知道我可以把整个东西作为一个单一的差异来挑选git cherry-pick -m Mm,给予

     ----Br--Squashed----> b_release
Run Code Online (Sandbox Code Playgroud)

其中Squashed是包含该功能的所有更改的提交,以及合并消息Mm.

但是,如果我想保留更改历史记录和单个提交消息,该怎么办?我总是可以手动挑选这个近似的工作流程:

git checkout b_release
git checkout -b b_release_feature
git cherry-pick c1^..c3
git checkout b_release
git merge b_release_feature
git commit --amend --reedit-message=Mm
git branch -d b_release_feature
Run Code Online (Sandbox Code Playgroud)

但这似乎是一个笨重的解决方案,我不知道更优雅的解决方案!

rebase --onto b_release Bm Mm 也似乎没有产生我正在寻找的结果. …

git merge git-rebase git-workflow

5
推荐指数
1
解决办法
3793
查看次数

Github 工作流操作和 EC2:错误加载密钥无效格式

我正在尝试为我的 nodejs 服务器设置 CI。我想使用 github 操作 ssh 到我的 ec2 实例,然后我可以在那里 git clone/pull 我更新的 repo。

我可以在我的本地机器上通过 ssh 进入我的 ec2 实例,没有问题。我只是做一些类似的事情:“ssh -i keypar.pem username@some-ip.region.compute.amazonaws.com”并连接。但是,我似乎无法在 worflow/actions 脚本上建立连接。这是我的工作流 yml 文件中的内容:

名称:CI

在:[推]

工作:构建:

runs-on: ubuntu-latest

steps:
- name: Connect
  env:
    DEPLOY_KEY: ${{ secrets.EC2 }}
  run: |
    eval `ssh-agent`
    ssh-add - <<< "${DEPLOY_KEY}"
    ssh ec2-user@ec2-instance-ip-here.us-east-2.compute.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

这个脚本让我得到错误"Error loading key "(stdin)": invalid format"。此外,当我查看 repo 设置下的部署密钥部分时,它说该密钥从未被使用过。

(显然,除了上面列出的步骤之外,我还需要安装、克隆和执行其他步骤。)

总之:

1 如何修复无效格式错误?

2 如何加载和引用密钥对?

continuous-integration github amazon-ec2 git-workflow

5
推荐指数
1
解决办法
999
查看次数

构建工件 zip 文件的动态命名

在我的存储库中,我有 yml 文件,其代码如下 /.github/workflows/filename.yml

 -  name: Create Artifact
     uses: actions/upload-artifiact@v2
     with:
       name: Report.22.9.zip
       path: |
         project
         !project/Reports/*
         !project/Logs/*
         !project/Snapshots/*
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试使“名称:Report.22.9.zip”更加动态。像这样的东西

<repo_name>.<branch_name>.<git_build_id>.zip
Run Code Online (Sandbox Code Playgroud)

github git-workflow github-actions

5
推荐指数
1
解决办法
1605
查看次数

在本地使用Git然后合并并检查StarTeam

我的客户目前要求我们使用StarTeam来检查我们的代码更改.我想拉下来的所有代码从StarTeam和设置本地Git仓库,这样我可能采取的优势分支对一些JQuery的模块的一些升级工作.有没有人对使用本地Git存储库然后签入对StarTeam服务器的更改有任何建议或建议?

git git-workflow

4
推荐指数
1
解决办法
801
查看次数

防止 Master Branch 领先于 dev

我们有一个非常标准的 git 工作流程,但我对一件事感到恼火:master 领先于开发,因为每次部署我们都会创建一个从 dev 到 master 的合并提交。

首先我们的工作流程:

  • master branch - 始终干净且可用于部署
  • development branch - 如果经过审查和批准,收集新功能/错误修复
  • feature branch- 一个只需要更改一个功能的新分支(它被分支了development branch

每个成功的拉取请求(功能 > 开发)都会创建一个合并提交,这很好。

但是每个部署(development > master)也会创建一个仅存在于 master 中的合并提交。因此,在 20 次部署之后,主分支比开发分支提前 20 次提交。

你如何处理这种行为?您是否不时合并 master > dev (实际上除了创建无用的合并提交之外什么都不做)?

rebase development-branch 似乎不是一种选择,因为那样每个开发人员都会丢失跟踪的远程分支。

git merge branch rebase git-workflow

4
推荐指数
2
解决办法
2308
查看次数

是否可以 git stash 正在进行的交互式变基?

我目前正在将 origin/master 重新定位到不久前从 origin/master 创建的分支上,而在该分支上工作的开发人员现在不可用。

我已经解决了功能分支第一次提交时的一些冲突,但到了我必须等待开发人员知道如何完成变基的地步。

有没有办法保留我已经解决的冲突(约 30 分钟),以便我可以继续执行另一项任务?

git interactive git-stash git-rebase git-workflow

3
推荐指数
1
解决办法
2603
查看次数

git reset --HARD 在公开共享的分支上的后果?

我在这里阅读 git 教程,其中提到:

\n\n
\n

不要\xe2\x80\x99t 在其他开发人员从中拉取的公开可见分支上使用 git Reset,因为这会强制其他开发人员进行不必要的合并来清理历史记录

\n
\n\n

我不明白问题是什么。如果我有一个公共分支,有 4 个提交,A->B->C->D。D 是最新提交。如果我硬重置回 B。然后,对于已经获取此分支的其他开发人员,当他们再次执行 git fetch 时,他们会看到它们比远程提前了 2 个提交,因此他们重置回B和都好对吧?或者我错过了什么?

\n

git git-reset git-workflow

3
推荐指数
1
解决办法
232
查看次数

git merge:强制执行线性历史记录和合并提交

在我们的项目中,我们希望合并的功能分支在 中可见git log --graph,但仍然具有线性历史记录,以便在功能分支的持续时间内主分支上没有提交。这意味着,确保功能分支在合并到主分支之前重新基于主分支。

目前,我们已经使用别名merge = merge --no-ff并尝试记住git rebase合并之前所做的事情,但有时我们会忘记。

即如果合并之前的情况是这样的:

A--B--C--D
    \
     E--F
Run Code Online (Sandbox Code Playgroud)

我们想要强制执行这个结果 (0)

A--B--C--D------m--
          \    /
           E--F
Run Code Online (Sandbox Code Playgroud)

并阻止这种行为 (1)

A--B--C--D--m--
    \      /
     E----F
Run Code Online (Sandbox Code Playgroud)

或这个(2)

A--B--C--D--E--F--
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不知道如何使用 git 别名来实现这一点。

  • git merge --no-ff创建合并提交,但允许结果 (1)
  • git merge --ff-only确保主分支上没有提交,但创建结果 (2)
  • git merge --ff愉快地创建(1)或(2),但没有创建(0)
  • git merge --ff-only --no-ff表现得像--no-ff

我们都需要独立于其他人提交到主分支,因此基于限制对主分支的访问或代码审查的解决方案并没有真正的帮助。

git merge git-workflow

3
推荐指数
1
解决办法
909
查看次数