GitHubで初心者がcloneした結果リポジトリが空になった

## 問題の概要

GitHubアカウントを作り、新規でローカルでコミットしたテキストファイルを自分のリモートリポジトリにプッシュした。次にこれをcloneしてローカルで編集しようとしたが、そのcloneを実行するとローカルに上記のテキストファイルがダウンロードされなかった。

-----------

### 環境
git version 2.25.1
AWS EC2のUbuntu Server 20.04 LTS

```
# Local

/usr/local/src/
             |___ github/pushtest/
             |                |___ pushtest.text
             |
```

`pushtest` がローカルリポジトリ。その下にプッシュしたテキストファイルがある。

## 仮説：リモートリポジトリと違う名前をローカルリポジトリに付けたからcloneできていない
いろいろGitHubのマニュアルやらを調べたのですが、原因がよく分かりませんでした。
ここでふと気づいたことがありました。リモートリポジトリの名前は `hello`ですが、ローカルは `pushtest` となっています。この違いに何か問題があるかもしれません。参考にしていたサイトではリモートもローカルも `pushtest` というリポジトリ名でした。

### clone元のリポジトリ名がローカルと違うと、正しく紐づかない？
上記の仮説が根本要因だとした時、少し原因を掘り下げます。

[GitHubの ドキュメント](https://www.sejuku.net/blog/70775)で`remote` コマンドについての説明を読んでいてふと思ったのが、「名前が違う2つのリポジトリ同士がうまく紐づいていないのでは？」ということです。

ドキュメントによると、

`remote` コマンドは、ローカルリポジトリで追跡しているリモートのセットを管理します。`remote add` で「リモートを追加」します。この時に、pushしたいリポジトリをうまくリモート側と紐づけられていなかったのではないかと思いました。

ここで思い浮かんだのが、clone元のリモートリポジトリ `hello` に対して、
（1）プッシュ元のローカルリポジトリ `pushtest` はリンクされているが、
（2）clone先のローカルリポジトリ `pushtest/hello` はリンクしていない。

```
# Remote (マスターブランチ)

/ユーザーID/hello
             |___ pushtest.text
             |

# Local

/usr/local/src/
             |___ github/pushtest/※(1)pushを実行した時のカレントディレクトリ＝リンクされている？
             |                |___ hello/ ※(2)cloneを実行した結果できたディレクトリ＝リンクされていない？
             |                |      |___ [空]　※問題の部分
             |                |
             |                |___ pushtest.text

```

上記「（1）clone元のリモートリポジトリに対してローカルリポジトリはリンクされている」について `status -v` コマンドで確かめてみました。

 `status`コマンドは、現在のローカルブランチがリモートブランチにリンクされていれば、リモートよりバージョンが遅れているか進んでいるかを返してくれるコマンドです。


```
:/usr/local/src/github/pushtest$ sudo git status -v
On branch master
Untracked files:
...

```

` マスターブランチ上で追跡されていないファイルがあります: `
と表示されました。
上記の「（1）clone元のリモートリポジトリに対してローカルリポジトリはリンクされている」
という仮説は見当違いっぽいです。

名前が違っているため、リモートリポジトリ `hello` とプッシュ元のローカルリポジトリ`pushtest` はリンクされていないということでしょうか？


これを確認するために、リモートリポジトリとローカルリポジトリも同じ`test2` という名前でやってみます。

## ローカルとリモートで同じリポジトリ名を付けてgit init、commit、pushまで行う
`test2` というローカルリポジトリから`test2.txt` をpushします。
```
ubuntu@xyz:/usr/local/src/github/test2$ sudo git init
Initialized empty Git repository in /usr/local/src/github/test2/.git/
ubuntu@xyz:/usr/local/src/github/test2$ sudo vi test2.txt

ubuntu@xyz:/usr/local/src/github/test2$ sudo git add test2.txt
ubuntu@xyz:/usr/local/src/github/test2$ sudo git status -v
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   test2.txt

diff --git a/test2.txt b/test2.txt
new file mode 100644
index 0000000..a8b76de
--- /dev/null
+++ b/test2.txt
@@ -0,0 +1 @@
+test2!
ubuntu@xyz:/usr/local/src/github/test2$ sudo git commit -m "pushコマンドのtest2"
...
......
Your name and email address were configured automatically ......
...

ubuntu@xyz:/usr/local/src/github/test2$ sudo git remote add origin https://github.com/kononzio/test2.git
ubuntu@xyz:/usr/local/src/github/test2$ sudo git status -v
On branch master
nothing to commit, working tree clean

ubuntu@xyz:/usr/local/src/github/test2$ sudo git push origin master
Username for 'https://github.com': kononzio
Password for 'https://kononzio@github.com':
......
 * [new branch]      master -> master
```
### 気付いたこと(1)：ローカルリポジトリでgit status した時の応答の違い
今回問題を考えるためにローカルとリモートでリポジトリを同じ名前にした結果、`git status` の実行結果が変わりました。

問題となっていた、異なるリポジトリ名に`remote add` したディレクトリでは、`git status`の結果は `マスターブランチ上で追跡されていないファイルがあります:` でした。
今回は `マスターブランチ上でコミットするものはありません。稼働しているツリーはクリーンです`という問題なさげなメッセージとなっていました。やはりローカルとリモートに異なるリポジトリ名を付けていたのが原因だったのかもしれません。

### 気付いたこと(2)：そもそもローカルリポジトリからpushしてcloneする意味がない
良く考えたら、ローカルリポジトリからpushしただけでは、そのファイルにはリモート上では何も変更は起きないですね。それをそのままcloneしても意味がないということに気付きました。

```
# Remote (マスターブランチ)

/ユーザーID/test2
             |___ test2.text　※今回pushされたファイル
             |

# Local

/usr/local/src/
            |_github/test2/
            |         |___ test2.text　※ここにcloneしてもファイル内容は変わらない
            |
```

### 他者のリポジトリに貢献する前提でcloneがあるのかも
今回cloneを理解するうえで[リポジトリのcloneとforkの違い](https://qiita.com/matsubox/items/09904e4c51e6bc267990)という記事が参考になったのですが、**clone**を行う場面って、**自分以外の人が修正した部分を、自分のローカルに反映させたい**時なんじゃないかと感じました。「いろんな人が自分以外のリポジトリにプルリクエストを送り、それがマージされるから自分が修正したのとは違う部分に変更が生まれる。それを**clone**でローカルにダウンロードする。」という言い方もできるかもしれません。

### 次に勉強すること
実際に気になるリポジトリから**fork**して、**clone** するところを勉強する必要があると思いました。

### 参考サイト
[【Git初心者向け】リポジトリの作成からpushまでを解説](https://www.sejuku.net/blog/70775)

[Git Guide - Git remote](https://github.com/git-guides/git-remote)

[リポジトリのcloneとforkの違い](https://qiita.com/matsubox/items/09904e4c51e6bc267990)