1. ホーム

gitの初期化およびプロジェクトの作成

2022-03-02 18:27:25

プロジェクトの初期化およびビルド

これには2つの方法があり、1つはinitで、もう1つはcloneです

init はすでに上の例で使われています。プロジェクトディレクトリに移動して $ git init を実行するというものです。

Cloneは一般的に、リモートサーバーにある既存のリポジトリをローカルマシンにクローンするもので、次のようなコマンドで実行します。

<テーブル

$ git clone git://github.com/git/hello-world.git

hello-world' にクローンする...

リモートで オブジェクトを数えています。158個、完了しました。

リモートで オブジェクトを圧縮しています。100% (79/79), 完了。

リモートで 合計158(デルタ54)、再利用154(デルタ54)

オブジェクトを受信する。100% (158/158), 15.63 KiB, 完了しました。

デルタを解決する。100%(54/54)、完了。

error: cannot to create file brainf*ck.bf (Invalid argument) ファイルを作成できません。

リモートサーバーを表示します。

<テーブル

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git リモート

オリジン

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git リモート -v

オリジン git://github.com/git/hello-world.git (フェッチ)

オリジン git://github.com/git/hello-world.git (プッシュ)

追加と送信

使用するコマンドは、add、commit、statusです。

1. helloworld.naxsuというファイルを作成します。

2. git statusでカレントディレクトリのファイルのコミット状況を確認する

brainf*ck.bfはクローンされただけで、クローンし直すことができなかったので、削除されたと書かれています。

helloworld.naxsu は作成されたばかりのファイルで、 "git add" バッファに追加、もしくは "git commit -a" 追加してコミットするよう促されます。

3. $ git add helloworld.naxsu でバッファに追加します。

         カレントディレクトリにあるすべてのファイルを追加

         $ git add .

         接尾辞が.cのファイルを追加する

         $ git add *.c

         指定したファイルを追加する

         $ git add index.jsp

4. ローカルリポジトリにコミットします。

<テーブル

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ echo "hello world" >> helloworld.naxsu

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ ls *.naxsu

helloworld.naxsu

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git ステータス

# masterブランチ上

# 変更はコミットのためにステージングされていません。

# (コミットされる内容を更新するには "git add/rm ... " を使用します)

# (use "git checkout -- ... " で、作業ディレクトリの変更を破棄する)

#

# deleted: brainf*ck.bf

#

# 未追跡のファイル

# (コミットされるものに含めるには "git add ... " を使用します)

#

# helloworld.naxsu

コミットに変更はありません("git add" や "git commit -a" を使用します)。

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git add helloworld.naxsu

警告を表示します。helloworld.naxsu の LF は CRLF に置換されます。

作業ディレクトリでは、ファイルは元の改行コードで表示されます。

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git ステータス

# masterブランチ上

# コミットされる変更点

# (ステージを解除するには "git reset HEAD ... " を使用します)

#

# 新しいファイル:helloworld.naxsu

#

# 変更はコミットのためにステージングされていません。

# (コミットされる内容を更新するには "git add/rm ... " を使用します)

# (use "git checkout -- ... " で、作業ディレクトリの変更を破棄する)

#

# deleted: brainf*ck.bf

#

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git commit helloworld.naxsu -m "init helloworld.naxsu"

の警告を表示します。helloworld.naxsu の LF は CRLF に置換されます。

作業ディレクトリでは、ファイルは元の改行コードで表示されます。

[master 8c17395] init helloworld.naxsu

警告を表示します。helloworld.naxsu の LF は CRLF に置換されます。

作業ディレクトリでは、ファイルは元の改行コードで表示されます。

 ファイル変更1件、挿入1件(+)

 作成モード 100644 helloworld.naxsu

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git ステータス

# masterブランチ上

# あなたのブランチは 'origin/master' よりも 1 コミット分進んでいます。

#

# 変更はコミットのためにステージングされていません。

# (コミットされる内容を更新するには "git add/rm ... " を使用します)

# (use "git checkout -- ... " で、作業ディレクトリの変更を破棄する)

#

# deleted: brainf*ck.bf

#

コミットに変更はありません("git add" や "git commit -a" を使用します)。

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$

特定のドキュメントを無視する

Javaファイルは.classファイルにコンパイルされ、自動生成されるので、バージョン管理は必要ないので、コミット時にignoreを使用することができます。

class1.class, java1.java を作成し、.gitignore を作成して class1.class を .gitignore に追加し、vim で .gitignore を編集して自身を追加し、$ cat .gitignore コマンドで .gitignore の中身を確認することができるようにしました。次に、add,commit を使用すると、class1.class がリポジトリにコミットされていないことが確認できます。

<テーブル

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ echo "class1" > class1.class

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ echo "java1" > java1.java

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ echo "クラス1.クラス" >.gitignore

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ vim .gitignore

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ cat .gitignore

class1.class

.gitignore

gitステータス

$ git add .

$ git ステータス

$ git commit -a -m "テストを無視する"

......

ドキュメントの違いを比較する

git diff ( デフォルトは $ git diff --staged )

git diff --staged: ワークスペースとステージドを比較します。

$ git diff --cached: ステージングされたレポとローカルレポを比較

デモのアイデア: helloworld.naxsuを修正し、git diffで差分を確認し、彼を追加してまた差分を確認し、コミットしてまた差分を確認する。

<テーブル

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ vim helloworld.naxsu

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git diff

diff --git a/helloworld.naxsu b/helloworld.naxsu

インデックス 3b18e51...6d05489 100644

--- a/helloworld.naxsu

+++ b/helloworld.naxsu

@@ -1 +1,2 @@

 ハローワールド

+何かを追加する

警告を表示します。helloworld.naxsu では、LF は CRLF に置き換えられます。

作業ディレクトリでは、ファイルは元の改行コードで表示されます。

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git add helloworld.naxsu

の警告を表示します。helloworld.naxsu の LF は CRLF に置換されます。

作業ディレクトリでは、ファイルは元の改行コードで表示されます。

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git diff --cached

diff --git a/helloworld.naxsu b/helloworld.naxsu

インデックス 3b18e51...6d05489 100644

--- a/helloworld.naxsu

+++ b/helloworld.naxsu

@@ -1 +1,2 @@

 ハローワールド

+何かを追加する

の警告を表示します。helloworld.naxsuではLFはCRLFに置き換えられます。

作業ディレクトリでは、ファイルは元の改行コードで表示されます。

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git commit helloworld.naxsu -m "helloworld.naxsu"を修正しました。

の警告を表示します。helloworld.naxsu の LF は CRLF に置換されます。

作業ディレクトリでは、ファイルは元の改行コードで表示されます。

[マスター警告。helloworld.naxsu の LF は CRLF に置換されます。

作業ディレクトリでは、このファイルは元の行末を持ちます。

6e7814d] helloworld.naxsuを修正しました。

警告を表示します。helloworld.naxsu の LF は CRLF に置換されます。

作業ディレクトリでは、ファイルは元の改行コードで表示されます。

 ファイル変更1件、挿入1件(+)

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git diff

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git diff --cached

ファイルの移動と削除

移動=削除+追加

<テーブル

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ ls *naxsu

helloworld.naxsu test.naxsu

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git rm test.naxsu

rm 'test.naxsu'

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git ステータス

# masterブランチ上

# あなたのブランチは 'origin/master' よりも 6 コミット進んでいます。

#

# コミットされる変更点

# (ステージを解除するには "git reset HEAD ... " を使用します)

#

# deleted: test.naxsu

#

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git reset head test.naxsu

リセット後のアンステージドな変更点。

D test.naxsu

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git ステータス

# masterブランチ上

# あなたのブランチは 'origin/master' よりも 6 コミット進んでいます。

#

# 変更はコミットのためにステージングされていません。

# (コミットされる内容を更新するには "git add/rm ... " を使用します)

# (use "git checkout -- ... " で、作業ディレクトリの変更を破棄する)

#

# deleted: test.naxsu

#

コミットに変更はありません("git add" や "git commit -a" を使用します)。

また、投稿していない場合は、チェックアウトしてリカバーすることができます

<テーブル

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git checkout -- test.naxsu

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ ls *.naxsu

helloworld.naxsu test.naxsu

コミットすると、チェックアウトできない

<テーブル

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git rm test.naxsu

rm 'test.naxsu'

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git commit -a -m "test.naxsu"を削除してください。

[マスター 46d28af] test.naxsuを削除

 1ファイル変更、1ファイル削除(-)

 削除モード 100644 test.naxsu

huangyineng@HUANGYINENG-PC ~/hello-world (master)

$ git checkout -- test.naxsu

error: pathspec 'test.naxsu' did not match any file(s) known to git.

mvコマンドで移動する場合は、$ git mv --helpを参照してください。

アクションログの表示

git log はすべてのコミットを表示します。

<テーブル

huangyineng@HUANGYINENG-PC ~/hello-world (master)

gitログ

commit 46d28afa27a90678c7391fc0bc5549db345f3c7d

作者: Yineng Huang

日付 Fri Aug 17 23:28:34 2012 +0800

削除 test.naxsu

......

git whatchanged

<テーブル

huangyineng@HUANGYINENG-PC ~/hello-world (master)

git whatchanged

commit 46d28afa27a90678c7391fc0bc5549db345f3c7d

作者: Yineng Huang

日付 Fri Aug 17 23:28:34 2012 +0800

    削除 test.naxsu

:100644 000000 77608b6... 0000000... D test.naxsu

......

git-whatchanged は git-log よりももう少し詳しく、特定のファイル名を表示します。