2012-02-18 4 views
0

Gitに関する質問があります。私が働く場所には2人の開発者がいます:自分自身と別の人。 Visual Studio 2008を使用してVB.NETプロジェクトを開発しており、すべてのコードと会社のドキュメントはすべて中央のローカルサーバーに保存されています。私の場合、GITを稼働させるには?

私たちが同じプロジェクトで作業しなければならない現時点では、Server1:/Codeに保存されたコードをローカルのドキュメントフォルダにコピーし、使用しているファイルを互いに伝えて、同じファイル。終わりに私たちのビットをサーバーにコピーします(私のファイルを上書きしないようにします)。

私はGitを調べましたが、これは "私が使っているのでFileAのコードを変更しないでください"という問題を解決し、同時に同じプロジェクトで作業することができるようです。つまり、私たちはServer1からコードのコピーを取得して開発し、その日の終わりに両方をサーバーに戻します(または私は間違っていますか?)。

私はProGitの書籍の一部を読んでいます。ファイルを追加してコミットする場所が少しありますが、私たちが両方の方法を同時に使用できるかどうかは分かりません。

ここにいくつかの質問:

  1. 私はGitのリポジトリを作成しますか?コードはServer1/Codeに保存され、Codeにはさまざまなプロジェクトがあるので、Server1/Codeにリポジトリを作成する必要がありますか?
  2. 私がリポジトリを作成した後は、Server1/Code/ProjectAに格納されているプロジェクトAのコピーをどのように取得すればよいでしょうか?フォルダを貼り付けてコピーするか、Gitを使うだけですか?
  3. 私たちはそれぞれMy Documentsに独自のコピーを持ち、そのコピーを1日中使用しますので、最後にファイルをマージして何も失われないようにしますか?たとえば、ボタンとその背後にあるコードを使ってVS2008で新しいフォームを作成し、他の人が別のコードを別の場所に変更したとします。たとえば、FormAにコードを追加し、FormAにコードを追加しますか?最後にどのようにマージするのですか?

私は自宅で私のPC上のgitとGitの拡張をインストールし、それをプレイしていたとのgit bashの(コマンドライン)やGitのGUIのいずれかを使用して気にしないいる言ったように。

ご協力いただければ幸いです。

答えて

2

Gitの分散性を考えると、文字通り何百もの異なるワークフローが存在するため、これは一例に過ぎません。

人気ワークフローの別の例は、私はGITリポジトリを作成しますhere

に記載されていますか?コードは Server1/Codeに格納されており、コードには様々なプロジェクトがありますので、 Server1/Codeにリポジトリを作成する必要がありますか?あなたはサーバ1 /コードのリポジトリ作成します

:上記

git init && 
git add . && 
git commit -am "Initial commit" 

は、リポジトリにすべてを追加します(あなたはおそらくいくつかのファイルを除外したいので、あなたがリポジトリから除外したいものを入れて最初のプロジェクトのルートに.gitignoreファイル内)

私はリポジトリを作成した後、どのように我々の両方がのコピーを入手できますか、サーバ1 /コード/ PROJECTAに保存されている プロジェクトAと言いますか? フォルダを貼り付けてコピーするかGITを使用しますか?共有を使用する場合は

はgitのファイルモードで複製することができます。私たちのそれぞれが終日コピー にマイドキュメント、作業中に私たち自身のコピーを持っていますので

git clone file:////<host>/<share>/<path> 

、最後にファイルをマージする方法は何ですか? たとえば、ボタンとコードの後ろに VS2008の新しいフォームを作成し、もう1人のユーザーが にコードを変更したとしましょう。たとえば、 FormAにコードを追加し、FormAにコードを追加しますか? 最後にどのようにマージするのですか?

あなたは通常、ローカルブランチで作業:

git checkout -b local_feature_branch 

作業が完了したら、あなたはgitの原点をフェッチ使用して「サーバー」に変更するかを見ることができます。これは、サーバ上で起こったことのあなたの見解だけを更新し、変更をプルダウンしません。あなたがサーバに変更をプッシュする準備ができている

git checkout master && git pull origin master 

1)コミットは、ローカルブランチにサーバー上の

git commit -am "My changes" 

2)プルダウンして変更内容を変更します

3)機能ブランチをマスターのローカルコピーにマージまたはリベースする

マージ:

git merge local_feature_branch 

リベース:

git checkout local_feature_branch && 
git rebase master && 
git checkout master && 
git merge local_feature_branch 

がマージの違いをよく読んで、以下の回答でリベース:たとえば、あなたの場合、両方の編集のための競合が(存在する場合

Git workflow and rebase vs merge questions

同じフォームなど)、gitはマージの競合とマージするファイルがあることを伝えます。マージを行った後、あなたがマージされたファイルを追加します:

git add merged_file 

をコミット:

git commit -am "Merged with master" 

最後にあなたが戻って、「サーバー」への変更をプッシュ:

git push origin master 
+0

あなたの返事をありがとう。それは1つの大きなプロジェクトであるため、ただ1つのフォルダに収めています。私はあなたの返事に枝を挙げたことを知っています。私はいくつの枝を作り、どうしてそれらを必要とするのでしょうか?もしそれが愚かな質問であれば申し訳ありません。ありがとう –

+0

ブランチを作成する必要はありませんが、私はマスターブランチをサーバー上で起こっていることと同期させておくことができます。ブランチはgitオブジェクトデータベース(ツリー)へのポインタに過ぎないので、gitでは安価です。このビデオを見て、gitの内部を知ることを強くお勧めします。http://vimeo.com/14629850 – ebaxt

+0

返信いただきありがとうございます。私はビデオを見ます。興味があれば、プロジェクト1をサーバーからマイドキュメントにコピーする場合は、まずマイドキュメントにリポジトリを作成する必要がありますか?また、gitクローンファイルを使用してProject1フォルダ全体をコピーすることはできますか?またはファイルを1つずつコピーする必要がありますか? –

0

ソース管理から始める場合は、まずSVNをお勧めします。それだけで簡単です。

http://www.visualsvn.com/server/ - これにより、数分でリポジトリを作成できます。

  1. 好きな場所にリポジトリを作成できます。次に、リポジトリにすでにあるコードを置きます。
  2. その後、Tortoise SVNやSVNMonitorをインストールして/ pushからリポジトリに更新します。初めてリポジトリからコードをチェックアウトします。あなたが指定したディレクトリにすべてのコードをダウンロードします。
  3. SVNを使用すると、ファイルを編集用にロックすることもできます。そうすれば、他の人が同時に編集することはできません。しかし、これは提案の仕方ではありません。一般的に、マージは問題ではありません。なぜなら、ほとんどの場合、あなたは同僚の他のものに取り組むことになるからです。しかし、同じファイルを編集した場合、最初の人はチェックインで成功し、他の人は誰かがそのファイルを変更したというメッセージを受け取ります。その後、リポジトリからバージョンのファイルを自分のバージョンに更新し、マージとチェックインをしなければなりません。しかし、しばしばマージは自動です。
+2

それは本当に失礼です"代わりにSVNを使う"というGitに関する質問に答えてください。 「Javaを代わりに使用する」というC++に関する質問には答えません。代わりに「HTML5を使用する」というFlashの質問には答えません。 –

+0

ナンセンス!人はソース管理について多くのことを知らない。そして、あなたは彼が自分のGITリポジトリをホストすることを期待していますか?そして、誰かがTFSを提案したように見える。 –

+2

それを指摘してくれてありがとう、私はあまりにも彼らをdownvoteよ。 –

0
  1. 次の3つのGitリポジトリを持つことになります。 1つの中央リポジトリ(裸)と、各開発者のための1つのプライベートなリポジトリ。サーバーの中央リポジトリをどこかのサーバーに置き、プライベートコピーをハードドライブに配置します。

  2. コードのコピーを取得する場合は、git cloneを使用します。コードのコピーを更新する場合は、git pullを使用するか、git fetchの後にgit merge(これは同じことです)を使用します。 Gitリポジトリを持つフォルダを手動でコピーしないでください。

  3. プロジェクトを論理的に変更したら、その変更を中央リポジトリにプッシュします。他の開発者が最初にプッシュした場合、競合が発生します。だから、他の開発者の変更を取り込み、コードにマージして(または、必要に応じてリベースして)、再度プッシュする必要があります。両方とも同じコードを変更すると、ローカルマシン上でマージするときにマージ競合が発生します。マージをローカルで解決し、完成した(テスト済みの)バージョンを中央サーバーにプッシュします。

今日の最後であるため、セントラルリポジトリにプッシュしないでください。終わりにあなたが変更の途中にいる場合は、あなたのパートナーにとってうまくいかない壊れたコードを共有することになります。変更が完了するまで待ってから、押します。

実行中のものがある場合は、セントラルサーバーの別のブランチにプッシュすることもできます。

+0

git拡張機能を使用してVisual Studio内でプル&プッシュできるか、コマンドラインを使用して手動で行う必要がありますか?私が求めている理由は、プロジェクトが約120のフォームを持っており、プッシュファイルa、プッシュファイル2などを120回書く必要があるためです。ありがとう –

+0

一度にツリー全体と履歴全体を1つのブランチにプッシュします。私はGit BashをWindows上で使用しているので、Visual Studio用のプラグインには慣れていません。 ( 'git add'は" index "にたくさんのファイルを追加し、' git commit'はインデックスをあなたの履歴の一部に変え、 'git push'はあなたの履歴を別のリポジトリにプッシュします)。 –

関連する問題