
포럼에 질문을 할 수 있도록 어딘가에 게시하고 싶은 텍스트 파일이 포함된 작은 프로젝트 폴더가 있습니다. 가장 간단한 경우를 생각해 보겠습니다. 다음과 같은 것이 있습니다.
mkdir aaa
cd aaa
echo AAA > aaa.txt
mkdir bbb
echo BBB > bbb/bbb.txt
분명히 하위 폴더 구조를 원합니다.
aaa/
├── aaa.txt
└── bbb
└── bbb.txt
...이것을 공유할 때 약간의 의구심이 듭니다. 그래서 먼저 써보고 싶어요https://gist.github.com/각 파일의 하위 디렉터리 이름을 입력하세요. 불행하게도 github의 응답은 다음과 같습니다.
콘텐츠 파일은 하위 디렉터리에 위치하거나 이름에 "/"를 포함할 수 없습니다.
...그리고 나는 거기에 등록하지 않을 것입니다. 단지 체크아웃하고 하위 디렉토리를 gist에 커밋하여 이와 같은 작업을 수행할 수 있기 위해서입니다 git
(누군가는 openID를 허용하고 싶지만...에에).
그래서 저는 어떻게든 전체 디렉토리 구조와 파일 내용을 diff
패치 파일로 패키징할 수 있을 것이라고 생각했습니다. 그러면 파일로서 Gist에 쉽게 업로드할 수 있을 것입니다. 그러나 내 폴더와 내가 시도한 빈 폴더의 차이점을 지정하는 방법을 모르겠습니다.
$ diff -Naur /dev/null /tmp/aaa
diff: /tmp/aaa/null: No such file or directory
...하지만 분명히 이것은 작동하지 않습니다.
그러나 원칙적으로는 가능해야 합니다. 테스트 사례는 다음과 같습니다 git
.
mkdir aaa
cd aaa
git init
git config user.name test
git config user.email [email protected]
echo AAA > aaa.txt
mkdir bbb
echo BBB > bbb/bbb.txt
git add .
git commit -m 'initial commit'
git format-patch -1 HEAD
이 시점에서 0001-initial-commit.patch
다음 내용이 포함된 파일이 나타납니다.
From 5834ae98fad9a9148648577f366af3498be6d364 Mon Sep 17 00:00:00 2001
From: test <[email protected]>
Date: Wed, 16 Dec 2015 10:25:23 +0100
Subject: [PATCH] initial commit
---
aaa.txt | 1 +
bbb/bbb.txt | 1 +
2 files changed, 2 insertions(+)
create mode 100644 aaa.txt
create mode 100644 bbb/bbb.txt
diff --git a/aaa.txt b/aaa.txt
new file mode 100644
index 0000000..43d5a8e
--- /dev/null
+++ b/aaa.txt
@@ -0,0 +1 @@
+AAA
diff --git a/bbb/bbb.txt b/bbb/bbb.txt
new file mode 100644
index 0000000..ba62923
--- /dev/null
+++ b/bbb/bbb.txt
@@ -0,0 +1 @@
+BBB
--
1.9.1
...그것이 제가 염두에 둔 것입니다. 단, 이메일 헤더와 통계 설명을 추가하는 것을 원하지 않으며 패치 파일에서 폴더를 다시 작성하라는 요청 git
도 받고 싶지 않습니다. 이를 사용하여 폴더와 해당 내용을 다시 빌드 git
할 수 있습니다 .patch
그래서
- 바닐라만을 사용하여 이러한 패치 파일을 만드는 것이 가능합니까
diff
? - 그렇지 않은 경우 모든 git 관련 주석을 제거하고 패치가 별도로 생성
git
된 것처럼 형식을 지정할 수 있습니까 ?diff
- 작은 바이너리 파일(예: spinner.gif 등)이 있는 경우 바이너리 데이터를 base64 또는 요점과 같은 공공 서비스에 게시/붙여넣기 후에도 유지되는 다른 텍스트 인코딩으로 포함하도록 지시
diff
(또는 )할 수 있습니까?git
?
답변1
만 사용하려면 diff
다음과 비교할 참조(빈) 디렉터리가 필요합니다.
mkdir /tmp/scratch
diff -urN /tmp/scratch /tmp/aaa
를 사용하면 git
원하는 git diff
결과를 얻을 수 있습니다.
바이너리 파일을 처리하려면 를 사용하세요 . 이렇게 하면 무엇을 해야 할지 알 수 git diff --binary
있는 인코딩 패치가 생성됩니다 .git apply
답변2
바닐라만을 사용하여 이러한 패치 파일을 만드는 것이 가능합니까
diff
?
GNU diff의 경우 해당 -N
옵션을 포함하고 빈 디렉터리에 신경 쓰지 않는다면 그렇습니다.
$ tree a b
a
├── aaa
│ ├── aaa.txt
│ └── bbb
│ └── bbb.txt
└── ccc
b
3 directories, 2 files
$ diff -uNr b a | (cd b; patch -p1)
~/devel/b
patching file aaa/aaa.txt
patching file aaa/bbb/bbb.txt
$ tree b
b
└── aaa
├── aaa.txt
└── bbb
└── bbb.txt
2 directories, 2 files
그렇지 않다면 git에게 모든 git 관련 주석을 제거하고 diff만으로 생성된 것처럼 패치 형식을 지정하도록 지시할 수 있습니까?
git diff
초기에 빈 커밋이 있는 경우 다음을 사용할 수 있습니다.
$ git init
$ git commit --allow-empty -m init
[empty (root-commit) d1d0a97] init
$ git add aaa
$ git commit -m 'foo'
[empty b834eba] foo
2 files changed, 2 insertions(+)
create mode 100644 aaa/aaa.txt
create mode 100644 aaa/bbb/bbb.txt
$ git diff 'HEAD^'
diff --git a/aaa/aaa.txt b/aaa/aaa.txt
new file mode 100644
index 0000000..43d5a8e
--- /dev/null
+++ b/aaa/aaa.txt
@@ -0,0 +1 @@
+AAA
diff --git a/aaa/bbb/bbb.txt b/aaa/bbb/bbb.txt
new file mode 100644
index 0000000..ba62923
--- /dev/null
+++ b/aaa/bbb/bbb.txt
@@ -0,0 +1 @@
+BBB
답변3
파일과 디렉토리를 텍스트로 전송하는 (다소) 표준적인 방법은 shar(1)을 사용하는 것입니다. 그러면 파일/디렉토리를 다시 생성하기 위한 (다소 읽기 쉬운) 쉘 스크립트가 생성됩니다.
tar(1)이나 zip(1)을 사용하여 내용을 패키지하고 수신자가 압축을 풀 수 있도록 하는 것이 더 쉽습니다.