事后,将现有的Git存储库连接到现有的Github fork

时间:2016-07-24 21:03:25

标签: git visual-studio github

我是Git和Github的新手,我认为我没有正确地做事。这是我到目前为止按时间顺序完成的事情:

1)我想开发一个存在于Github上的开源项目。我当时对Git了解不多,所以我只是将源代码的副本(不使用Git)下载到笔记本电脑上的文件夹中。

2)我对源代码做了一些更改(使用Visual Studio)。我在Visual Studio中将项目添加到源代码控制中,默认情况下使用Git,因此它创建了一个本地Git存储库。

3)我去了Github网站上的原始主项目并创建了我自己的分支。所以现在,我在Github上的个人分支是原始源代码的副本,没有我的更改。

现在,我想将我的本地代码更改推送到Github fork,但我不确定如何让所有内容同步。

我非常确定我应该做的事情(在我的代码更改之前)应该是我的Github fork的本地克隆,并在Visual Studio中打开THAT存储库以使我的代码更改,但是那不是我做的。我担心,如果我现在制作我的Github分支的本地克隆,我将覆盖我的代码更改,或者我将有两个单独的本地存储库没有连接。

有没有办法让我当前的本地Git存储库(由Visual Studio创建)" be"事实上我的Github叉的本地克隆?

我有Visual Studio Github插件,但除了登录之外还没有做任何事情。我拥有的其他选项是" Clone"和" Fork"。我不确定我是否应该做其中任何一件事。我不想"克隆"因为我已经有了源代码(并对其进行了更改)。我不想" Fork",因为我已经将主项目分配到Github网站上我自己的分支。

我想设置Visual Studio,以便我的现有项目/存储库连接到我的Github fork,这样当我在Visual Studio中提交代码更改时,它们会被提交到我的Github fork。

解决所有问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我假设你做了以下事情:

  1. 将存储库的内容下载到本地文件夹。
  2. 在本地文件夹中初始化新的git存储库。
  3. 将所有内容提交为初始提交。
  4. 做一些更改并提交它们。
  5. 这种情况很容易解决。您必须将提交提取为补丁文件,然后将其应用于克隆的fork。这样,您就可以直接在分离的git存储库之间传输提交。

    # create the copy
    wget https://github.com/mhoff/pelican-global-rst-include/archive/master.zip
    unzip master.zip && rm master.zip && mv pelican-global-rst-include-master rep_copy
    
    # create git repositroy
    cd rep_copy
    git init
    git add -A
    git commit -m "Initial commit."
    
    # do some commited changes
    echo "ABC" > README.rst
    git add README.rst
    git commit -m "Overwrite README."
    
    git rm wrapper.py
    git commit -m "Remove wrapper."
    
    # extract the commits as patches
    git format-patch `git rev-list HEAD | tail -n 1`
    mv *.patch ..
    
    # clone the fork
    cd ..
    git clone https://github.com/mhoff/pelican-global-rst-include rep_clone
    
    # apply the patches as single commits
    cd rep_clone
    git am ../*.patch
    

    我不确定git am ../*.patch是否会以正确的顺序应用提交。对我而言,就是这样。

    如果您只创建了一个提交,您也可以简单地同步文件并手动重新创建提交。以下示例使用rsync,但是每个程序都可以使用,它能够反映所有修改,添加和删除(例如文件权限更改)。

    # create the copy
    wget https://github.com/mhoff/pelican-global-rst-include/archive/master.zip
    unzip master.zip && rm master.zip && mv pelican-global-rst-include-master rep_copy
    
    # create git repository
    cd rep_copy
    git init
    git add -A
    git commit -m "Initial commit."
    
    # do some commited changes
    echo "ABC" > README.rst
    git add README.rst
    git rm wrapper.py
    git commit -m "Some changes."
    
    # clone the fork
    cd ..
    git clone https://github.com/mhoff/pelican-global-rst-include rep_clone
    
    # transfer changes, e.g. via rsync
    rsync -avz --delete --cvs-exclude rep_copy/ rep_clone/
    
    # recreate commit from copied changes
    cd rep_clone
    git add README.rst
    git rm wrapper.py
    git commit -m "Some changes"