我是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。
解决所有问题的最佳方法是什么?
答案 0 :(得分:0)
我假设你做了以下事情:
这种情况很容易解决。您必须将提交提取为补丁文件,然后将其应用于克隆的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"