Eu tenho uma pequena pasta de projeto com arquivos de texto, que gostaria de postar em algum lugar para fazer uma pergunta em um fórum. Vamos considerar, no caso mais simples, que eu tenha algo assim:
mkdir aaa
cd aaa
echo AAA > aaa.txt
mkdir bbb
echo BBB > bbb/bbb.txt
Obviamente, gostaria da estrutura da subpasta:
aaa/
├── aaa.txt
└── bbb
└── bbb.txt
... para ser preservado quando eu compartilhar isso. Então eu pensei primeiro em usar o link e digitar os nomes dos subdiretórios para cada arquivo; infelizmente o github responde com:
Contents files can't be in subdirectories or include '/' in the name
... e não pretendo me registrar lá, apenas para poder fazer check-out e commitar subdiretórios para o gist via git
, para algo assim (alguém gostaria que eles aceitassem o openID, mas ... eh).
Então, eu pensei, talvez eu possa de alguma forma empacotar toda a estrutura de diretório e o conteúdo do arquivo como um arquivo de correção diff
; então, como um arquivo único, deve ser fácil fazer o upload para uma essência. No entanto, não sei como especificar um diff entre minha pasta e uma pasta vazia; Eu tentei:
$ diff -Naur /dev/null /tmp/aaa
diff: /tmp/aaa/null: No such file or directory
... mas claramente, isso não funciona.
No entanto, em princípio, isso deve ser possível - aqui está um caso de teste via 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
Neste ponto, um arquivo 0001-initial-commit.patch
aparece, com estes conteúdos:
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
... que é aproximadamente o que eu tinha em mente, exceto - eu não quero nenhum dos cabeçalhos de e-mail e comentários de estatísticas que git
adiciona; e também não quero que git
seja obrigado a reconstruir a pasta a partir do arquivo de patch - eu gostaria que as pessoas pudessem usar patch
para reconstruir a pasta e seu conteúdo.
Então
- É possível fazer um arquivo de correção como este usando apenas baunilha
diff
?
- Se não, é possível dizer a
git
para remover todos os comentários específicos do git e formatar um patch como se fosse produzido por diff
sozinho?
- Caso haja arquivos binários pequenos (isto é, spinner.gif e outros), é possível instruir
diff
(ou git
) a incluir os dados binários como base64 ou outra codificação de texto que sobreviveria a postagens / colando para um serviço público como essência?