2016-07-24 15 views
0

た後、私はGitリポジトリとのGithubで非常に新しいです、と私は私が正しく物事をしなかったと思います。ここまで私はこれまでに時系列的に何をしてきたのですか:は、Connectは、既存のGithubフォークにGitリポジトリを既存の事実

1)私はGithubにあったオープンソースプロジェクトに取り組みたいと思っていました。当時私はGitについてよく知らなかったので、私はノートパソコンのフォルダにソースコードのコピーを(Gitを使用せずに)ダウンロードしました。

2)私は()のVisual Studioを使用して、ソースコードにいくつかの変更を行いました。 Visual Studioのソース管理にプロジェクトを追加しました。これはデフォルトでGitを使用していますので、ローカルのGitリポジトリを作成しました。

3)私はGithubのウェブサイト上でオリジナルのマスタープロジェクトに行って、それを自分のフォークを作成しました。だから今、Githubの私の個人的なフォークは、私の変更なしに元のソースコードのコピーです。

ローカルコードの変更をGithubフォークにプッシュしたいが、すべてを同期させる方法がわからない。

私はコード変更を行う前に自分のGithubフォークのローカルクローンを作成し、Visual Studioでリポジトリを開いてコードを変更する必要がありましたが、私がしたことではありません。現在私のGithubフォークのローカルクローンを作成するとコード変更を上書きするか、接続されていない2つの別々のローカルリポジトリがあることに気付きます。

私の現在のローカルGitリポジトリ(Visual Studioによって作成されたもの)を、実際に自分のGithubフォークのローカルクローンにする方法はありますか?

私はVisual Studio Githubプラグインを持っていますが、まだログインしていません。他のオプションは「クローン」と「フォーク」です。私はそれらの事のいずれかをすべきことを確信していません。私は既にソースコードを持っているので(そしてそれを変更したので)、私は「クローン」したくないです。私はすでにGithubのウェブサイトの自分のフォークにマスタープロジェクトをフォークしているので、 "フォーク"したくありません。

私は既存のプロジェクト/リポジトリが私のGithubフォークに接続されるようにVisual Studioをセットアップしたいので、Visual Studioでコード変更をコミットするとGithubフォークにコミットします。

このすべてを修正するための最良の方法は何ですか?

+0

フォークをクローンします。変更をクローンにコピーします。あなたが導入したすべての変更がそこにあることを 'git diff'で確認してください。今、コミットして、あなたは完了です。これにより、すべてのローカルコミットを1つにマージします。 – mhoff

+0

すべてのコミットを保存するには、変更をgitパッチとして抽出することができます。 – mhoff

+0

@MichaelHoff、ありがとう。私は保つ必要があった複数のコミットがなかったので、私はあなたの最初の提案に従って、それは素晴らしい仕事をしました。 – JoeMjr2

答えて

0

私はあなたが以下のなかったと仮定します。リポジトリの

  1. ダウンロードコンテンツをローカルフォルダに。
  2. 新しいgitリポジトリをローカルフォルダで初期化します。
  3. すべてを初期コミットとしてコミットします。
  4. 変更を加えてコミットします。

この状況は簡単に解決できます。コミットをパッチ・ファイルとして抽出してから、クローン・フォークに適用する必要があります。そうすれば、別々の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が正しい順序でコミットを適用するかどうかわかりませんよ。私のために、それはそのように働いた。


あなたは1を作成した場合は、単にファイルを同期して手動でコミット再作成することができる唯一のコミット。次の例では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" 
関連する問題