特定ディレクトリにエクスポート

ここではカレントのexportというディレクトリにエクスポートするとします

1
2
3
4
5
6
7
8
9
10
11
// 変更のあったファイルを抽出
$ git diff --name-only | xargs -IXXXX cp -a --parents XXXX export/

// コミットID間の変更ファイルを抽出
$ git diff --name-only [コミット1] [コミット2] | xargs -IXXXX cp -a --parents XXXX export/

// ブランチ間の差分ファイルを抽出
$ git diff --name-only [ブランチ1] [ブランチ2] | xargs -IXXXX cp -a --parents XXXX export/

// 補足:zip圧縮
$ zip -r export.zip export/

[補足] Untrackedなファイルも含める

通常のままでは、Untrackedなファイルは含まれないため、git add -Nを使います

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// デフォルトでは、新規追加したファイルは「git diff」に含まれない
$ git diff --name-only
package-lock.json

$ git status
On branch feature/xxxxxx
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: package-lock.json

Untracked files:
(use "git add <file>..." to include in what will be committed)

webroot/js/common.js // ←このファイルはgit diffに出てこない
1
2
// Untrackdなファイルをgit diffで見れるようにする
$ git add -N .
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ git status
On branch feature/xxxxxx
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: package-lock.json
new file: webroot/js/common.js

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

$ git diff --name-only
package-lock.json
webroot/js/common.js