使用GitHub repo作为初始代码库进行开发时的设置和工作流

时间:2018-01-22 18:02:10

标签: git github

我是git的新手。所以请像新手一样对待我。

我的情况是我的团队必须以GitHub repo作为初始代码库进行开发。我们没有为这个原始回购做出贡献,但希望不断获取原始GitHub回购中可用的任何更新到我们的回购中。如此有效,我需要在GitHub上有一个回购:

  1. 最初是从GitHub repo
  2. 克隆或分叉的
  3. 由我的团队用于推动他们的更改(常规开发活动 - DVCS)
  4. 不时从原始GitHub仓库获取更新。
  5. 请指导初始设置和每日命令/工作流程。

    到目前为止,我已尝试过以下内容:

    初始工作流程:

    1. 创建了原始GitHub仓库的分支。
    2. 将fork克隆到本地计算机(local-repo)

      git clone https://github.com/fork/devfiles.git project
      
    3. 将原始GitHub存储库添加为远程

      cd project
      git remote add upstream https://github.com/original/devfiles.git
      
    4. 在bitbucket上创建了一个空的repo,用作我的开发团队的DVCS,并将其添加为第二个遥控器。

      git remote add devrepo git@bitbucket.org:mycomp/devfiles.git
      
    5. 从我的本地机器,将分叉的仓库推到bitbucket

      git push devrepo master
      
    6. 我的开发团队在他们的本地机器上克隆了bitbucket repo

      git clone git@bitbucket.org:mycomp/devfiles.git
      
    7. 每日工作流程

      1. 开发团队使用bitbucket repo,将其更改推送到它。

      2. 要从devrepo获取更新到local-repo,我运行:

        git fetch devrepo (did not do what I wanted)
        git pull devrepo master (this works) 
        
      3. 从原始GitHub仓库获取更新到本地仓库。我做了以下事情:

        git fetch upstream
        git rebase upstream/master
        
      4. 这将获得原始GitHub仓库的最新提交,并将我的团队提交给他们。

        到目前为止,一切似乎都很好。

        1. 现在我终于需要将这些更新的文件推送到devrepo

          git push devrepo master
          
          To git@bitbucket.org:mycomp/devfiles.git
           ! [rejected]        master -> master (non-fast-forward)
          error: failed to push some refs to 'git@bitbucket.org:mycomp/devfiles.git'
          hint: Updates were rejected because the tip of your current branch is behind
          hint: its remote counterpart. Integrate the remote changes (e.g.
          hint: 'git pull ...') before pushing again.
          hint: See the 'Note about fast-forwards' in 'git push --help' for details.
          

1 个答案:

答案 0 :(得分:0)

作为一个自我描述的git新手,我觉得我必须教育你几点。

  

git fetch devrepo (this does not work)

我将在此假设您希望上述命令将工作文件夹中的文件更改为表示当前状态为devrepo并且工作文件夹当前处于何种状态的内容,因为在下一个声明中你说:

  

git pull devrepo master (this works)

了解git fetchgit mergegit pull之间的区别非常重要。 git pull是一种方便的方法,可以执行非常常见的git fetch,后跟git merge。说git fetch不起作用(说得太直白)完全错了,这样说会更准确:

  

git fetch(没做我想做的事)

如果不这样做,我们可以尝试解决您的问题。

根据您的命令历史记录,有几点值得称赞:

  • 您从git pull向本地分支机构运行devrepo/master合并提交。这会更新您的主分支指针,如果您已对<{1}}上不存在的本地master分支进行任何提交,则会为您创建合并提交。您的本地devrepo分支有master作为父级,因此这不会导致您的devrepo/master失败。
  • 合并后,您运行push。我个人从未试图将合并提交重新绑定到另一个分支,但我猜这个问题就在这里。我的猜测(基于我如何看待git处理合并提交与其他不相关的命令)是rebase跳过上面运行rebase时创建的提交。这肯定会使您的git pull分支进入master告诉您的非快进状态。

要修复工作流程,您可以执行以下操作。 (注意:这不是唯一可行的解​​决方案,只是我认为最直接的解决方案)

  1. 从两个回购中获取所有新提交:
    git pull
    git fetch devrepo

  2. 在devrepo / master检查一个临时分支:
    git fetch upstream

  3. 引入上游更改(这可能会创建合并提交):
    git checkout -b tmp_master devrepo/master

  4. 切换回git pull upstream master分行
    master
  5. 重新登上tmp_master
    git checkout master
  6. 删除临时分支 git rebase tmp_master
  7. 您现在应该能够git branch -D tmp_master而不会收到该错误消息。