[Git] 動作を試す 実行例54：Gitリポジトリを単純にコピーして複製可能

Gitの動作を理解するために、Gitのコマンドを実際に試して、結果を見てみました。

1つの記事内で一連のGitコマンドが完結しているので、これら一連のコマンドを順に実行させて結果を見ることで、一連のGitの動作を実際に体感でき、一通り独習することが可能です。

※前回記事のリポジトリ状態からの続きになっています。
| [前回記事へ](https://qiita.com/dl_from_scratch/items/1290584a3589bb8d8717) | [目次へ：Git関連記事のまとめページ](https://qiita.com/dl_from_scratch/items/597bc28a4787a7901d21) | [次回記事へ](https://qiita.com/dl_from_scratch/items/3ea224b9a1f576278d86) |
|:-:|:-:|:-:|

# 実行例

```
(※始めに複製元のリポジトリの内容を確認)
cd /test-space/local-repo2
git log --oneline --graph --all
↓
結果: 
* e009b2d (origin/branch-R1) message R2
| * c69a305 (HEAD -> master, origin/master) message R1
| * 94996a0 message4
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

-----

※単純にリポジトリのフォルダをコピーして複製可能
※/H 隠しファイルやシステムファイルも全てコピーする
※/E ファイルが存在しなくてもディレクトリごとコピーする
xcopy /H /E "D:/test-space/local-repo2" "D:/test-space/local-repo2-copy"
↓
結果: 
D:/test-space/local-repo3 は受け側のファイル名ですか、
またはディレクトリ名ですか
(F= ファイル、D= ディレクトリ)? d
D:/test-space/local-repo2\test1.txt
D:/test-space/local-repo2\test2.txt
D:/test-space/local-repo2\test4.txt
D:/test-space/local-repo2\.git\config
D:/test-space/local-repo2\.git\description
D:/test-space/local-repo2\.git\FETCH_HEAD
D:/test-space/local-repo2\.git\HEAD
...中略...
D:/test-space/local-repo2\.git\refs\remotes\origin\branch-R1
D:/test-space/local-repo2\.git\refs\remotes\origin\master
50 個のファイルをコピーしました

cd /test-space/local-repo2-copy
git log --oneline --graph --all
↓
結果: 
* e009b2d (origin/branch-R1) message R2
| * c69a305 (HEAD -> master, origin/master) message R1
| * 94996a0 message4
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

(※複製後も同様に操作可能)

-----

git remote -v
↓
結果: 
origin  D:/test-space/remote-repo1.git (fetch)
origin  D:/test-space/remote-repo1.git (push)

git branch -vv -a
↓
結果: 
* master                   c69a305 message R1
  remotes/origin/branch-R1 e009b2d message R2
  remotes/origin/master    c69a305 message R1

git fetch
↓
結果: 
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (6/6), 577 bytes | 2.00 KiB/s, done.
From D:/test-space/remote-repo1
 * [new branch]      branch-R2  -> origin/branch-R2
   c69a305..1247fa9  master     -> origin/master

git log --oneline --graph --all
↓
結果: 
* 1247fa9 (origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 (HEAD -> master) message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

git pull
↓
結果: 
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> master

git log --oneline --graph --all
↓
結果: 
* 1247fa9 (origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 (HEAD -> master) message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

git branch -u origin/master master
↓
結果: 
branch 'master' set up to track 'origin/master'.

git pull
↓
結果: 
Updating c69a305..1247fa9
Fast-forward
 test1.txt | 2 ++
 1 file changed, 2 insertions(+)

git log --oneline --graph --all
↓
結果: 
* 1247fa9 (HEAD -> master, origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

(※複製後も同様に操作可能)

-----

echo Sample-Added-C1 >> test1.txt
git commit -a -m "message C1"
↓
結果: 
[master 81d404d] message C1
 1 file changed, 1 insertion(+)

git log --oneline --graph --all
↓
結果: 
* 81d404d (HEAD -> master) message C1
* 1247fa9 (origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

git push origin master
↓
結果: 
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 329 bytes | 329.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
To D:/test-space/remote-repo1.git
   1247fa9..81d404d  master -> master

git log --oneline --graph --all
↓
結果: 
* 81d404d (HEAD -> master, origin/master) message C1
* 1247fa9 message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

(※複製後も同様に操作可能)

-----

cd /test-space/remote-repo1.git
git log --oneline --graph --all
↓
結果: 
* 81d404d (HEAD -> master) message C1
* 1247fa9 message R4
* fab68d8 (branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

(※リモートリポジトリに変更が送信・反映されている)

cd /test-space/local-repo2-copy

-----

(※変更を戻してリモートリポジトリの内容を始めに戻す)

※リモートリポジトリのブランチ位置を強制的に過去側へ移動
git push -f origin 1247fa9:master
↓
結果: 
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To D:/test-space/remote-repo1.git
 + 81d404d...1247fa9 1247fa9 -> master (forced update)

git log --oneline --graph --all
↓
結果: 
* 81d404d (HEAD -> master) message C1
* 1247fa9 (origin/master) message R4
* fab68d8 (origin/branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

-----

(※local-repo2-copyを削除)
cd /test-space
rd /s /q "/test-space/local-repo2-copy"
```

# 環境

Windows 10、PortableGit-2.40.0-64-bitを使用、全てローカルPC上で実施、GitHub等は不使用。