gitとgithubを用いてコード開発環境を構築する
手順は次のとおりです.
1. に従ってhttps://help.github.com/articles/generating-ssh-keysローカルLinuxとgithubを確立するという.comのリンクとテストに合格しました.
2. githubでcomに独自のプロジェクトrepoを新規作成します.ここではhelloと名付けてテストします.
3. ローカルディレクトリの下/path/to/helloでgit pullを実行[email protected]:you_github_user_name/hello.git
これにより、helloを作成するなど、ローカル/path/to/helloでプロジェクトファイルを追加できます.goのソースファイルを保存します.次にgit add helloを実行する.goとgit commit-a-m「my test file」
4. このときgit pushを実行する[email protected]:you_githubuser_name/hello.git、コマンドが成功するとgithubにいます.comでhelloを見ました.goファイルがコミットされました!
またgit pushで毎回指定しないでほしい場合は
push [email protected]:you_github_username/hello.gitは、git remote add originなどのプロジェクトに別名を付けることで簡略化できます[email protected]:you_github_username/hello.gitは、次回のプロジェクトのコミット操作時にgit commit-a-m「*」&git pushで直接コミットを完了できます.このときのコミットはmasterの下に直接コミットされます.
より多くのgitとgithub操作は、次の文章を参照してください.https://github.com/chenzhiwei/linux/tree/master/git
gitの関連構成
新しいgit倉庫 を作成既存のgit倉庫 を使用
ヒント
既存の倉庫アドレスを次のように仮定します[email protected]:chenzhiwei/linux.git
その後、変更するたびに、最後のpushで2つのコマンドを実行する必要があります.
pushを1回だけ実行する2つのリモートウェアハウスにコミットする場合は、ウェアハウスルートディレクトリの下を変更する必要があります.git/configファイル、次の内容を追加します.
その後、
あるいはbackupブランチのアドレスをoriginブランチに直接書きます.
注意:Git 2.0では、デフォルトの
完全なgit/configファイルの例は次のとおりです.
孤児ブランチは、ブランチに何もないことを意味し、以前に作成した他のブランチとは何の関連もありません.
以下のいくつかはgitでよく使われる命令で、簡単に理解できます.
gitを使用する前に、個人情報と使用の好みを設定したほうがいいです.以下の命令の意味は説明するまでもないでしょう.以下の命令を実行すると、あなたの家のディレクトリ(~)の下にファイル
ファイルの内容をインデックスに追加(ファイルを一時保存)するには、いくつかの簡単な例があります.
突然
インデックスと当時の作業ディレクトリのファイルを削除します.
現在の変更を倉庫に記録します.つまり、変更をローカル倉庫にコミットします.
突然
あなたのcommitはすでにリモートブランチ(master)にpushしています.今、後悔したいと思っています.
現在の作業ディレクトリのステータス、すなわち、どのファイルが変更、追加、削除されたかを表示します.
現在の作業ディレクトリにブランチとディレクトリをチェックアウトすると、ブランチを切り替えるコマンドとして簡単に理解できます.
次のコマンドは、ブランチbranch 1に切り替え、新しいブランチnewを作成します.branch .
ローカル変更をキャンセル:
ブランチのリスト、作成、削除.
次のコマンドは、ローカルブランチ、すべてのブランチ、リモートブランチ、作成、削除、強制ブランチのリストです.
remote tracking branchを削除すると、連結ブランチ 競合が発生した場合は、手動で競合を解決すればよい.リモートブランチ を削除する.
ブランチをマージした後、以前のブランチが不要になった場合は、ローカルおよびリモートで削除できます.
このコマンドは興味深いですね.そのうち
変更内容を表示します.
DIFF一時保存(インデックスに追加)ファイル:
View the redundant Tab or Space in your codes:
変更されたファイルのみを表示します.
コードを取得した後(masterブランチと仮定)、ブランチを作成し、このブランチを変更しました.もう一人もコード(masterブランチと仮定)を取得し、このブランチを修正してリモートにコミットしました.この場合、リモートからブランチのコードを再検索し、作成したブランチに切り替えて
うっかり
最近のcommitを削除しますが、今回のcommitで変更した内容を保持します.つまり、
最近のcommitを削除し、今回のcommitの変更内容は保持されません.つまり、
ローカル倉庫のファイルを修正したが、修正を放棄したい場合は、
gitは分散型で、毎回repo全体をダウンロードして変更を提出するしかありません.これは明らかに合理的ではありません.多くの場合、コードを少し変更したいだけで、このコードがあるディレクトリcloneを降りるだけでいいからです.この問題を解決するためにgitはsubmoduleを導入し,すなわち1つのgit repoに複数のchild git repoを含めることができる.
大きなプロジェクトには、多くのモジュールとサブプロジェクトが含まれているに違いありません.これらのモジュールとサブプロジェクトをそれぞれgit repoにして、大きなプロジェクトのgit repoで含めることができます.例えば、以下のようにします.
1つのプロジェクト(foo)にはサブプロジェクト(bar)が含まれており、メインプロジェクトのrepoは
他のcloneの場合、デフォルトでは
submoduleの削除
個人的にはbranchよりも機能が強いと感じています.tagに注釈を付けることができるからです.
ファイルの行コードが誰とどのcommitで変更されたかを表示します.
filenameファイルのすべての行がいつ追加されたのか、誰に追加されたのか、誰にどのcommitに追加されたのかがリストされます.
私は寝たいので、先に書かないでください.
1. に従ってhttps://help.github.com/articles/generating-ssh-keysローカルLinuxとgithubを確立するという.comのリンクとテストに合格しました.
2. githubでcomに独自のプロジェクトrepoを新規作成します.ここではhelloと名付けてテストします.
3. ローカルディレクトリの下/path/to/helloでgit pullを実行[email protected]:you_github_user_name/hello.git
これにより、helloを作成するなど、ローカル/path/to/helloでプロジェクトファイルを追加できます.goのソースファイルを保存します.次にgit add helloを実行する.goとgit commit-a-m「my test file」
4. このときgit pushを実行する[email protected]:you_githubuser_name/hello.git、コマンドが成功するとgithubにいます.comでhelloを見ました.goファイルがコミットされました!
またgit pushで毎回指定しないでほしい場合は
push [email protected]:you_github_username/hello.gitは、git remote add originなどのプロジェクトに別名を付けることで簡略化できます[email protected]:you_github_username/hello.gitは、次回のプロジェクトのコミット操作時にgit commit-a-m「*」&git pushで直接コミットを完了できます.このときのコミットはmasterの下に直接コミットされます.
より多くのgitとgithub操作は、次の文章を参照してください.https://github.com/chenzhiwei/linux/tree/master/git
gitの関連構成
gitの使用
gitserverの構築:https://github.com/chenzhiwei/linux/blob/master/git/build-git-server.mkd
グローバル設定
$ git config --global user.name "Chen Zhiwei"
$ git config --global user.email [email protected]
構成が完了すると$HOMEディレクトリの下に1つ生成する.gitconfigプロファイル、具体的な参考例.--local
は、これらの内容をプロジェクトに書き込むものである.git/configファイルでは、プロジェクトごとに異なる構成が可能です.
自動補完
gitをインストールした後に自動補完機能がない場合は、次の操作で補完機能を追加できます.再ログインする必要があります.$ wget -O /etc/profile.d/git-completion.sh https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
使用開始
$ git config --global user.name "Chen Zhiwei"
$ git config --global user.email [email protected]
$ wget -O /etc/profile.d/git-completion.sh https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
$ mkdir git_repo
$ cd git_repo
$ git init
$ echo "test" > README.mkd
$ git add README.mkd
$ git commit -m "add README.mkd file"
$ git remote add origin [email protected]:username/test.git
$ git push -u origin master
$ cd git_repo
$ git remote add origin [email protected]:username/test.git
$ git push -u origin master
ヒント
fatal: remote origin already exists.
が提示された場合、ローカル・ウェアハウスにはすでにリモート・アドレスがあることに注意してください.まずgit remote rm origin
を使用してoriginを削除するか、git remote add other_name [email protected]:username/test.git
を使用して追加できます(コミット時にgit push -u other_name master
を使用してください).ローカル・ウェアハウスに2つのミラーを作成
既存の倉庫アドレスを次のように仮定します[email protected]:chenzhiwei/linux.git
$ git clone [email protected]:chenzhiwei/linux.git
$ cd linux
$ git remote add backup [email protected]:chenzhiwei/linux.git
$ git push -u backup master
その後、変更するたびに、最後のpushで2つのコマンドを実行する必要があります.
$ git push origin
$ git push backup
pushを1回だけ実行する2つのリモートウェアハウスにコミットする場合は、ウェアハウスルートディレクトリの下を変更する必要があります.git/configファイル、次の内容を追加します.
[remote "both"]
url = [email protected]:chenzhiwei/linux.git
url = [email protected]:chenzhiwei/linux.git
その後、
git push both
を使用して更新を2つのリモート・ウェアハウスに送信できます.あるいはbackupブランチのアドレスをoriginブランチに直接書きます.
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = [email protected]:chenzhiwei/linux.git
url = [email protected]:chenzhiwei/linux.git
注意:Git 2.0では、デフォルトの
push
アクションが「現在のbranchからリモートウェアハウスへのpushのみ」に変更されます.git push both
コマンドを継続するには、git push
のデフォルト動作git config --global push.default matching
を手動で設定する必要があります.push.default
にはいくつかの簡単な動作があり、ここではmatching
とsimple
を紹介し、両者はそれぞれpushローカルのすべてのブランチから遠隔倉庫とpushローカルの現在のブランチから上流ブランチを意味する.この解釈はまだ正確ではないようで、man git-config
で詳細な説明を見ることができます.完全なgit/configファイルの例は次のとおりです.
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = [email protected]:chenzhiwei/linux.git
[branch "master"]
remote = origin
merge = refs/heads/master
[remote "backup"]
url = [email protected]:chenzhiwei/linux.git
fetch = +refs/heads/*:refs/remotes/backup/*
[remote "both"]
url = [email protected]:chenzhiwei/linux.git
url = [email protected]:chenzhiwei/linux.git
既存の倉庫に孤児ブランチを作成する
孤児ブランチは、ブランチに何もないことを意味し、以前に作成した他のブランチとは何の関連もありません.
$ git clone [email protected]:chenzhiwei/test.git
$ cd test
$ git checkout --orphan new_branch
Switched to a new branch 'new_branch'
$ git rm -rf . #
$ rm .gitignore #
$ echo "orphan branch" > README.mkd
$ git add .
$ git commit -m "add README.mkd file"
$ git push origin new_branch
リモートgit倉庫への単一ブランチのコミット
git push
コマンドは、デフォルトではすべてのブランチをgitウェアハウスにコミットします.リモートウェアハウスにブランチをコミットしたい場合は、git push origin HEAD
を使用する必要があります.もちろん、git config --global push.default tracking
コマンドを使用して、git push
のデフォルト操作を変更することもできます.これは、git push
を実行するときに、現在のブランチがリモートgit倉庫にのみコミットされることを意味します.git常用命令
以下のいくつかはgitでよく使われる命令で、簡単に理解できます.
git config
gitを使用する前に、個人情報と使用の好みを設定したほうがいいです.以下の命令の意味は説明するまでもないでしょう.以下の命令を実行すると、あなたの家のディレクトリ(~)の下にファイル
~/.gitconfig
が生成されます.$ git config --global user.name "Chen Zhiwei"
$ git config --global user.email [email protected]
$ git config --global core.editor vim
$ git config --global merge.tool vimdiff
$ git config --global color.status auto
$ git config --global color.branch auto
$ git config --global color.interactive auto
$ git config --global color.diff auto
$ git config --global push.default simple
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.st status
$ git config --global alias.last 'log -1 HEAD'
$ git config --global alias.unstage 'reset HEAD --'
git add
ファイルの内容をインデックスに追加(ファイルを一時保存)するには、いくつかの簡単な例があります.
$ git add .
$ git add --all
$ git add *.txt
$ git add directory/*.sh
突然
git add
になりたくない場合は、次のコマンドを実行します.$ git reset .
$ git reset *.txt
$ git reset directory/*.sh
git rm
インデックスと当時の作業ディレクトリのファイルを削除します.
$ git rm filename
$ git rm -f *.txt
$ git rm -r .
git commit
現在の変更を倉庫に記録します.つまり、変更をローカル倉庫にコミットします.
$ git commit -m "add a file and remove a file"
突然
git commit
になりたくない場合は、次のコマンドを実行します.$ git reset HEAD^
commit
以降、ファイルが追加されていないことに気づきました.$ git commit -m'msg'
$ git add forget_file
$ git commit --amend
あなたのcommitはすでにリモートブランチ(master)にpushしています.今、後悔したいと思っています.
$ git clone [email protected]:chenzhiwei/test.git
$ cd test
$ git reset HEAD^
$ git push -f master
git status
現在の作業ディレクトリのステータス、すなわち、どのファイルが変更、追加、削除されたかを表示します.
$ git status
git checkout
現在の作業ディレクトリにブランチとディレクトリをチェックアウトすると、ブランチを切り替えるコマンドとして簡単に理解できます.
次のコマンドは、ブランチbranch 1に切り替え、新しいブランチnewを作成します.branch .
$ git checkout branch1
$ git checkout -b new_branch
ローカル変更をキャンセル:
$ git checkout -- file_name
git branch
次のコマンドは、ローカルブランチ、すべてのブランチ、リモートブランチ、作成、削除、強制ブランチのリストです.
$ git branch --list
$ git branch --all
$ git branch --remotes
$ git branch new_branch
$ git branch --delete branch_name
$ git branch -D branch_name
remote tracking branchを削除すると、
git branch -r
コマンドにリストされているブランチです.$ git branch -r
$ git branch -d -r origin/develop
$ git checkout branch_name
$ git checkout master
$ git merge branch_name
ブランチをマージした後、以前のブランチが不要になった場合は、ローカルおよびリモートで削除できます.
$ git branch -d branch_name
$ git branch -D branch_name
$ git push origin :branch_name
このコマンドは興味深いですね.そのうち
origin
はあなたのリモート倉庫の名前です(git remote -v
は表示できます).git diff
変更内容を表示します.
$ git diff filename
$ git diff .
$ git diff revision1 revision2
$ git diff branch1 branch2
DIFF一時保存(インデックスに追加)ファイル:
$ git add .
$ git diff --cached
View the redundant Tab or Space in your codes:
$ git diff --check
$ git diff --check --cached
変更されたファイルのみを表示します.
$ git diff --name-only
git init
git log
git merge
git mv
git pull
git push
git rebase
コードを取得した後(masterブランチと仮定)、ブランチを作成し、このブランチを変更しました.もう一人もコード(masterブランチと仮定)を取得し、このブランチを修正してリモートにコミットしました.この場合、リモートからブランチのコードを再検索し、作成したブランチに切り替えて
rebase
コマンドを実行する必要があります.このブランチのbaseブランチが変わったので、baseブランチにマージするには、baseブランチを再削除する必要があります.$ git clone -b master [email protected]:chenzhiwei/test.git
$ git checkout -b new_branch
$ git checkout master
$ git pull
$ git checkout new_branch
$ git rebase
$ git rebase --continue
git rebase
を実行するとファイルの競合が発生する可能性があります.この場合、手動で競合を解決し、解決した後にrebaseを続行する必要があります.git revert
git reset
うっかり
git add .
を実行すると、git reset
命令で破ることができます.最近のcommitを削除しますが、今回のcommitで変更した内容を保持します.つまり、
git status
で表示すると、コミット待ちのファイルが表示されます.$ git reset --soft HEAD^
最近のcommitを削除し、今回のcommitの変更内容は保持されません.つまり、
git status
で表示すると変更は表示されません.git stash
ローカル倉庫のファイルを修正したが、修正を放棄したい場合は、
git stash
で倉庫の元の状態に復元できます.git submodule
gitは分散型で、毎回repo全体をダウンロードして変更を提出するしかありません.これは明らかに合理的ではありません.多くの場合、コードを少し変更したいだけで、このコードがあるディレクトリcloneを降りるだけでいいからです.この問題を解決するためにgitはsubmoduleを導入し,すなわち1つのgit repoに複数のchild git repoを含めることができる.
大きなプロジェクトには、多くのモジュールとサブプロジェクトが含まれているに違いありません.これらのモジュールとサブプロジェクトをそれぞれgit repoにして、大きなプロジェクトのgit repoで含めることができます.例えば、以下のようにします.
1つのプロジェクト(foo)にはサブプロジェクト(bar)が含まれており、メインプロジェクトのrepoは
https://github.com/chenzhiwei/linux
であり、サブプロジェクトのrepoアドレスはhttps://github.com/chenzhiwei/vim
であり、git submoduleの作成を完了するには以下の操作が必要である.$ git clone https://github.com/chenzhiwei/linux
$ cd linux
$ git submodule add https://github.com/chenzhiwei/vim vim
$ git status
$ git commit -m"add a submodule vim"
git submodule add
コマンドは、.gitmodules
ファイルを生成し、現在のディレクトリの下にもvim
というrepoが表示されます.他のcloneの場合、デフォルトでは
vim
のコードcloneは下がりません.vim
というsubmoduleはローカルファイルシステム上でディレクトリであり、git repoでは空のテキストファイルです.submodule、すなわちサブプロジェクトのコードもすべてcloneしたい場合は、次の操作を実行する必要があります.$ git clone https://github.com/chenzhiwei/linux
$ cd linux
$ git submodule init
$ git submodule update
submoduleの削除
$ git rm -r submodule
git tag
個人的にはbranchよりも機能が強いと感じています.tagに注釈を付けることができるからです.
$ git tag -a tagname -m"tag message"
$ git tag tagname -f -m"new tag message"
$ git push origin tagname
$ git push orgin :tagname
$ git push --delete orgin tagname
$ git push orgin :refs/tags/tagname
git blame
ファイルの行コードが誰とどのcommitで変更されたかを表示します.
$ git blame filename
filenameファイルのすべての行がいつ追加されたのか、誰に追加されたのか、誰にどのcommitに追加されたのかがリストされます.
その他
自分のプロジェクトにgithubにmirrorを作成する
# In this example, we use an external account named extuser and
# a GitHub account named ghuser to transfer repo.git
git clone --bare https://githost.org/extuser/repo.git
# Make a bare clone of the external repository to a local directory
cd repo.git
git push --mirror https://github.com/ghuser/repo.git
# Push mirror to new GitHub repository
cd ..
rm -rf repo.git
# Remove temporary local repository
私は寝たいので、先に書かないでください.