1.Gitローカルリポジトリの作成
(1) Gitを管理するフォルダを決める
- 複数人で共有する場合、当然ネットワークドライブにする
ネットワークドライブのGit用ディレクトリ |
---|
/srv/git/myproject.git |
mkdir -p /srv/git/myproject.git
cd /srv/git/myproject.git
git init --bare
(2) Gitで管理したいVSのソリューションに .gitignore を追加
- .vs や obj など、Gitでは管理したくないフォルダやファイルを無視するために最初に必要
- .gitignore を .slnと同じ階層に保存
- 最低限の .gitignore
.vs/
bin/
obj/
*.user
*.suo
- 一般的な .gitignore の参考
https://github.com/masayahak/WinFormsMenuDemo/blob/master/.gitignore
(3) VSで作成したソリューションを登録
① VSのソースフォルダでGit初期化(作業ツリーあり)
VSのソースフォルダ |
---|
D:\Dev\WinFormsApp1 |
cd D:\Dev\WinFormsApp1
git init
git add .
git commit -m "初回コミット"
git add . の "."を忘れずに
② bareリポジトリをリモートとして登録
git remote add origin /srv/git/myproject.git
③ 初回プッシュ
git push -u origin master
④ 念のために初回プル
git pull --rebase origin master
2. 別の利用者からのGitリポジトリ共有方法
別の利用者のローカルなVSのソースフォルダ |
---|
D:\MyFolder\WinFormsApp1 |
git clone /srv/git/myproject.git D:\MyFolder\WinFormsApp1
クローンが作成される
3.VSからのGit利用
(1) これまでの手順でオリジナル、別の利用者ともに自動でGit管理される
(2) ソースを修正したらコミット
(3) サーバーと同期
4.Gitリポジトリのバックアップ
- 別のファイルサーバーへ履歴も含め完全コピーする
robocopy "\\srv01\GitRepos\MyApp.git" "\\自社NAS\GitBackup\MyApp.git" /MIR /Z /R:1 /W:1
オプション | 意味 |
---|---|
/MIR |
ミラーリング:コピー元と同じ構造にする(※削除も反映) |
/Z |
再起動後でも再開できる「中断可能なコピー」モード |
/R:1 |
コピー失敗時のリトライ回数(1回だけ再試行) |
/W:1 |
リトライ時の待機秒数(1秒) |
5.修正が競合したらどうなるか?
(1) あえて同じファイルを修正します。
public partial class Form1 : Form
{
private string _name = "GitTest1111111111111";
public Form1()
{
InitializeComponent();
}
}
public partial class Form1 : Form
{
private string _name = "GitTest22222222222";
public Form1()
{
InitializeComponent();
}
}
(2) 先にGitTest1111111111111をコミットしてサーバーと同期
(3) つづいてGitTest22222222222をコミットしてサーバーと同期
サーバーと同期したタイミングで競合が検出される
(4) 人間が判断してマージエディターで競合を修正
一例として、GitTest22222222222側を優先し「マージを許可」
(5) 許可したマージをコミットしサーバーと同期
これで競合は解決!
6.おまけ(Gitの最新をSVNへ同期する方法)
(1) Gitの最新版をワークツリーにチェックアウト
@echo off
REM 一時作業用フォルダ
set WORK=C:\GitTemp\MyApp
set REPO=\\srv01\GitRepos\MyApp.git
if exist %WORK% rd /s /q %WORK%
git clone %REPO% %WORK%
(2) SVNの作業コピーを更新
set SVNWC=C:\SVNWork\MyApp
set SVNR=https://svn-server/repos/MyApp
if not exist %SVNWC% (
svn checkout %SVNR% %SVNWC%
)
xcopy /E /Y /Q %WORK%\* %SVNWC%\
(3) SVNコミット(差分のみ)
cd %SVNWC%
svn add * --force
svn commit -m "Git最新版をデイリー同期"