私はgitに比較的慣れておらず、通常はすべての操作にPoshGitを使用しているため、すべてを支援することはできないかもしれませんが、いくつかのことを支援できることを願っています。
- その顧客にのみ役立つ他の変更をマージせずに、顧客のブランチからの一部の変更をメイントランクにマージできますか?
- メイントランクからの一部の変更を、それらのブランチのカスタマイズを失うことなく、各顧客のブランチにマージできますか?
私が理解していることから、これらの操作は両方ともgitcherry pickを使用することで実現できます。これにより、あるブランチから特定のコミットを選択し、ブランチをマージせずに別のブランチに追加できます。
たとえば、customer1のリポジトリに加えられた変更をcustomer2に追加するとします。
まず、customer2に挿入するcustomer1からコミットのハッシュIDを取得します
git checkout customer1Branch
git log
commit 2e8c40025939e8cf41dec70f213da75aa462184b
Author: xxxxxxx
Date: xxxxxx
This made a change that you want...
次に、チェリーピックするハッシュの最初の数文字をコピーし、顧客2のブランチに変更して、チェリーピックしてブランチに入れます。
git checkout customer2Branch
git cherry-pick 2e8c40025939e8c
さて、を実行するgit log
と、上部にチェリーピックが表示されます。同様のチュートリアルがここにあります(http://nathanhoad.net/how-to-cherry-pick-changes-with-git)
- コードの特定の行を「マーク」して、マージ/コミットされないようにすることはできますか?
あなたはここで尋ねられて答えられた同様の質問から助けを見つけるかもしれません:
Gitでファイルの一部のみをコミットする
- 3人以上の開発者がこれで作業し、それぞれが自分のマシンで作業しますが、同期のために会社のリポジトリに変更をプッシュします。このプロセスにはどのような影響がありますか?
GITは完全に分散されたVCSであるため、チームの各開発者は、自分のマシンに中央リポジトリの完全なクローンを効果的に持つことができます(そのリポジトリの完全な履歴が含まれます)。これは、ログ履歴クエリやその他のリクエスト(検索など)を意味します。誰が何をしたか)中央サーバーを経由する必要はありませんが、各開発者がプライベートにオフラインで実行できます。
同様に、各開発者が行った変更はすべてのユーザーが利用できるようになります(たとえば、すべての新しいブランチが利用可能になります)が、gitにあまり慣れていない場合は、同じ機能で作業するのが面倒になることがあります。
いつものように、早い段階で頻繁にコミットすることをお勧めします。これにより、変更が衝突したときに直面する可能性のある緊張が緩和されます。また、特にお互いの作業を継続することに依存している場合は、プッシュが実行されるときに何らかの構造を設定する必要があります。
試してみたいもう1つのアイデアは、リポジトリの担当者を1人にして、変更とパッチをマージして作業を調整することです。
- 現在、すべての顧客は、すべてのソースコードを含む個別のフォルダと個別のプロジェクトファイルを持っています。それらのフォルダーをGitに配置するためのインポートプロセスはどのようになりますか?
編集
この質問の意味を明確にしていただきありがとうございます。ここで与えられた答えから適応された同様のアプローチを拡張することができます:リモートGitブランチをどのように作成しますか?
BASEプロジェクトの新しいメインラインブランチを作成し、リモートリポジトリにプッシュします。
cd baseProjectDirectory # navigate to your main project directory
git init # git initialize the dir
git add . # recursively add all files in directory to git repo
git remote add <remote-branch-name> <remote-url> # Add the url to your remote directory to your git repo
git commit -m "Initial commit of base project"
git push <remote-branch-name> <local-branch-name>
remote-branch-name
これにより、というブランチの下にあるリモートリポジトリにベースラインプロジェクトが確立されますlocal-branch-name
。
次に、他のプロジェクトに移動し、新しいローカルブランチ名を使用して、リポジトリを同じリモートの異なるブランチに配置して、これらの手順を繰り返すことができます。つまりlocal-branch-name
、ブランチを作成するときにを使用する代わりに、次のような新しいブランチ名を使用します。git checkout -b new-local-branch-name
たとえば、ベースプロジェクトのプッシュ(コードの最後の行)が次の場合:
git push clientproject base
「clientproject」がリモートの名前であり、「base」がローカルブランチの名前である場合、行を次のように変更できます。
git checkout -b client1 # Creates new branch named client1
git branch -d base # Deletes base branch
git push clientproject client1
続行する前に「base」ブランチを削除する必要は厳密にはありませんが、リポジトリをクリーンに保つことができるため、良い習慣と見なされていることに注意してください。ただし、何も失われる心配はありません。ベースからのgit履歴全体が、チェックアウト時にclient1にコピーされます。
また、注意:状況によっては別のディレクトリからこれを行う必要があるため、「base」ではなく「master」という名前のブランチを削除する可能性があります。
このようにプッシュすると、client1は「clientproject」リモートに保持されますが、プロジェクトは、独自の履歴を備えたclient1という新しいブランチの下に配置されます。
残りのプロジェクトでも同じ手順を使用できます。途中であなたを失った場合は、上記のリンクを読むことをお勧めします(私よりもはるかに簡潔です)。
- これはすべて、Visual Studio、Gitextensions、およびVS用のGitSourceプロバイダーを使用して実行する必要があります。サポートされていますか、それともコンソールで実行する必要がありますか?
私はまだVSをGitで使用していませんが、これらの操作はすべてネイティブのgitコマンドであるため、すべてではないにしてもほとんどの操作がサポートされると思います。
お役に立てれば。