linux:git

Git - 分散型バージョン管理システム

$ git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git

Cloning into 'SoftEtherVPN'...
remote: Enumerating objects: 171, done.
remote: Counting objects: 100% (171/171), done.
remote: Compressing objects: 100% (115/115), done.
remote: Total 24562 (delta 82), reused 103 (delta 48), pack-reused 24391
Receiving objects: 100% (24562/24562), 526.67 MiB | 1.91 MiB/s, done.
Resolving deltas: 100% (21043/21043), done.

開発リポジトリなどをビルド用に最新履歴のみ高速に複製する🤤

$ git clone --depth 1 https://github.com/SoftEtherVPN/SoftEtherVPN.git

Cloning into 'SoftEtherVPN'...
remote: Enumerating objects: 1820, done.
remote: Counting objects: 100% (1820/1820), done.
remote: Compressing objects: 100% (884/884), done.
remote: Total 1820 (delta 1149), reused 1276 (delta 912), pack-reused 0
Receiving objects: 100% (1820/1820), 9.37 MiB | 2.86 MiB/s, done.
Resolving deltas: 100% (1149/1149), done.

–depth 1: コミット履歴を指定の深さ(最新のみ)に切り捨てることを指示する。Git - git-clone Documentation

とても高速に clone 出来るが master ブランチの fetch しか出来なくなる😅

$ cat SoftEtherVPN/.git/config 

[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "origin"]
	url = https://github.com/SoftEtherVPN/SoftEtherVPN.git
	fetch = +refs/heads/master:refs/remotes/origin/master
[branch "master"]
	remote = origin
	merge = refs/heads/master

通常の clone と同様に fetch できるように直すことは可能🤤

$ cd SoftEtherVPN
$ git config remote.origin.fetch 

+refs/heads/master:refs/remotes/origin/master

$ git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
$ git config remote.origin.fetch 

+refs/heads/*:refs/remotes/origin/*

通常の clone では fetch = +refs/heads/*:refs/remotes/origin/* である🤔

$ git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git SoftEtherVPN-all

Cloning into 'SoftEtherVPN-all'...
remote: Enumerating objects: 26193, done.
remote: Counting objects: 100% (72/72), done.
remote: Compressing objects: 100% (52/52), done.
remote: Total 26193 (delta 32), reused 38 (delta 17), pack-reused 26121
Receiving objects: 100% (26193/26193), 527.27 MiB | 2.16 MiB/s, done.
Resolving deltas: 100% (22303/22303), done.

$ cat SoftEtherVPN-all/.git/config 

[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "origin"]
	url = https://github.com/SoftEtherVPN/SoftEtherVPN.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master

$ git submodule update --init --recursive --recommend-shallow --depth 1

Submodule '3rdparty/BLAKE2' (https://github.com/BLAKE2/BLAKE2.git) registered for path '3rdparty/BLAKE2'
Submodule '3rdparty/tinydir' (https://github.com/cxong/tinydir.git) registered for path '3rdparty/tinydir'
Submodule 'src/Mayaqua/3rdparty/cpu_features' (https://github.com/google/cpu_features.git) registered for path 'src/Mayaqua/3rdparty/cpu_features'
Submodule 'src/libhamcore' (https://github.com/SoftEtherVPN/libhamcore.git) registered for path 'src/libhamcore'
Cloning into '/home/tomoyan/work/SoftEtherVPN/3rdparty/BLAKE2'...
Cloning into '/home/tomoyan/work/SoftEtherVPN/3rdparty/tinydir'...
Cloning into '/home/tomoyan/work/SoftEtherVPN/src/Mayaqua/3rdparty/cpu_features'...
Cloning into '/home/tomoyan/work/SoftEtherVPN/src/libhamcore'...
Submodule path '3rdparty/BLAKE2': checked out 'b52178a376ca85a8ffe50492263c2a5bc0fa4f46'
Submodule path '3rdparty/tinydir': checked out 'ec6bff2043eaac3ad25423705e63a781762a0dfd'
remote: Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Enumerating objects: 105, done.
remote: Counting objects: 100% (105/105), done.
remote: Compressing objects: 100% (54/54), done.
remote: Total 57 (delta 42), reused 7 (delta 1), pack-reused 0
Unpacking objects: 100% (57/57), 19.71 KiB | 420.00 KiB/s, done.
From https://github.com/google/cpu_features
 * branch            26133d3b620c2c27f31d571efd27371100f891e9 -> FETCH_HEAD
Submodule path 'src/Mayaqua/3rdparty/cpu_features': checked out '26133d3b620c2c27f31d571efd27371100f891e9'
remote: Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Enumerating objects: 9, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 2), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), 663 bytes | 110.00 KiB/s, done.
From https://github.com/SoftEtherVPN/libhamcore
 * branch            b7f5d8d735b280fc77673c4a29f0436a92ca6660 -> FETCH_HEAD
Submodule path 'src/libhamcore': checked out 'b7f5d8d735b280fc77673c4a29f0436a92ca6660'

クローンしたローカルリポジトリのリモート URL を表示する…🤔

$ cd jupyter-binder
$ git remote get-url origin

https://github.com/tomoyan596/jupyter-binder.git

ローカルリポジトリのリモート URL を SSH の URL に変更する😊

$ git remote set-url origin git@github.com:tomoyan596/jupyter-binder.git
$ git remote get-url origin

git@github.com:tomoyan596/jupyter-binder.git

ローカルリポジトリのリモート URL を HTTPS の URL に変更する😊

$ git remote set-url origin https://github.com/tomoyan596/jupyter-binder.git
$ git remote get-url origin

https://github.com/tomoyan596/jupyter-binder.git

$ git pull

Already up to date.

$ git checkout --force

リモートの最新を取ってくる。

$ git fetch origin master

From git://git.tomoyan.net/project_name
 * branch              master     -> FETCH_HEAD

ローカルの master を、リモート追跡の master にリセットする。

$ git reset --hard origin/master

Untracked files を(-d ディレクトリを含めて)削除する。

$ git clean -df

submodulenew commits, modified content をリセットする。

$ git submodule foreach --recursive git reset --hard

submodulenew commits をリセットする。

$ git submodule update --init

ローカルの状態を確認する。

$ git status

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

リモートのタグを取得

$ git pull --tags

Already up to date.

タグの一覧表示

$ git tag

wxPy-2.8.0.1
wxPy-2.8.0.2
...
wxPy-3.0.1.1
wxPy-3.0.2.0

現在のブランチの直前のコミットに対してタグを付ける

$ git tag wxPy-3.0.2.0

タグをチェックアウトする

$ git checkout wxPy-3.0.2.0

Updating files: 100% (12896/12896), done.
Note: switching to 'wxPy-3.0.2.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 67db99581e set revisions for externals

$ git branch

* (HEAD detached at wxPy-3.0.2.0)
  master

タグからブランチを作成する

$ git checkout -b wxPyhton-3.0.2.0

Switched to a new branch 'wxPyhton-3.0.2.0'
 

$ git branch
  master
* wxPyhton-3.0.2.0

現在のブランチを表示

$ git branch

* master

リモートブランチの一覧表示

$ git branch -a

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/SOC2007_UNITTEST
  ...
  remotes/origin/wxPy-2.9.3.x
  remotes/origin/wxPyhton-2.9.2

タグ(wxPy-3.0.2.0)からブランチ(wxPyhton-3.0.2.0)を作成する

$ git checkout -b wxPyhton-3.0.2.0 wxPy-3.0.2.0

$ git status

On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   .eslintignore
	modified:   .eslintrc
	modified:   .github/PULL_REQUEST_TEMPLATE.md
	modified:   tool/unicode.js
	modified:   tool/update_deps.js
	modified:   tool/wrap_keyword_regexp.js

no changes added to commit (use "git add" and/or "git commit -a")

編集を破棄する為に以下を実行してもステータスで確認すると modified: が出続ける。

$ git checkout .
$ git checkout -- *
$ git reset --hard origin/master

差分を確認するとファイルパーミッションの変更まで検知している。

$ git diff .eslintignore

diff --git a/.eslintignore b/.eslintignore
old mode 100644
new mode 100755

解決策はファイルパーミッションの変更を無視する。

$ git config core.filemode false
$ git config -l

.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
remote.origin.url=git://github.com/ajaxorg/ace.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

$ git status

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

  • linux/git.txt
  • 最終更新: 2023/09/01 13:18
  • by ともやん