Como muitas pessoas, eu gerencio muitos dos meus arquivos de ponto através de um repositório de controle de versão (Mercurial on Bitbucket, private, no meu caso). Isso é útil ao configurar uma nova máquina ou propagar configurações entre máquinas diferentes.
Então, naturalmente, eu adicionei o meu .emacs
e .emacs.d
a essa configuração.
Em seguida, instalei alguns pacotes e acabei adicionando *.elc
aos meus .hgignore
, assim como omito *.pyc
arquivos dos meus repositórios Python.
Há outras coisas que eu não deveria estar rastreando, por exemplo, arquivos gerados que são específicos do ambiente e não serão úteis / corretos quando clonados em outra plataforma? (Eu uso Linux e OS X na área de trabalho e FreeBSD no servidor.)
Existem truques de configuração que são comumente usados para tornar esse tipo de compartilhamento mais valioso? Com a minha configuração de arquivo shell, ainda estou procurando boas maneiras de escolher arquivos individuais entre as filiais, por exemplo.
fonte
*.elc
. stackoverflow.com/a/24539894/324105Respostas:
Eu armazeno minha configuração do Emacs no Github porque uso dois computadores diferentes, um no trabalho e outro em casa.
Aqui está uma lista sobre coisas que eu não coloco no controle de origem:
Configurações especificadas no ambiente.
Por exemplo, meu Emacs abre um arquivo organizacional diferente na inicialização em uma máquina diferente. Você não deseja confirmar essas configurações no controle de origem.
Eu uso
(require 'local nil t)
para carregar essas configurações, mas nunca confirmolocal.el
.Pacotes gerenciados pelo gerenciador de pacotes
Quando os pacotes são gerenciados pelo gerenciador de pacotes, sugiro não colocar esses pacotes no controle de origem. Porque :
Em vez de confirmar pacotes, sugiro que você confirme o mecanismo reconhecido pelo seu gerenciador de pacotes.
Por exemplo, eu uso o Cask para gerenciar meus terceiros pacotes, portanto, apenas confirmo o arquivo cask, que contém os pacotes especificados que eu quero.
Quando eu uso
package.el
antes, minha configuração verifica se o pacote está instalado / precisa ser atualizado, portanto, nenhum pacote foi confirmado.No entanto , existem alguns pacotes que não existem em nenhum repositório de pacotes; nesse caso, eu o comprometerei com o controle de origem, como em
site-lisp
.Todos os arquivos gerados pelos pacotes
Por exemplo, toda a gravação automática, os arquivos de backup,
tramp
,eshell
,recentf
, mesmocustom.el
. Coloquei esses arquivos em~/.emacs/.gen
, para que eu possa simplesmente ignorar este diretório.Arquivos que mudam frequentemente, mas precisam ser sincronizados
Como arquivo de dicionário pessoal usado por
aspell
, banco de dados de arquivo usado porelfeed
. Nesse caso, eu uso o Dropbox para sincronizá-lo em diferentes computadores. Então não esquecerei de me comprometer.fonte
prelude-require-packages
função funciona como um Cask de pobre (com a vantagem de também trabalhar com o Windows).package-install
mencionado em emacs.stackexchange.com/a/410/184 também pode ser útil.custom.el
no controle de origem.Apenas certifique-se de que nenhum material gerado (como @ rangi-lin notes) esteja no repositório e, se você estiver compartilhando seus arquivos de pontos com outras pessoas, não haverá itens de segurança relacionados (como senhas e chaves de API). Para os últimos, eu dividi minhas personalizações em um arquivo separado com:
Ocasionalmente, movo personalizações "seguras" para uma grande
setq
declaração antes do snippet acima.Meu arquivo .gitignore se parece com:
fonte
tl; dr
.emacs.d/init.el
vez de.emacs
.gitignore
uma lista branca.emacs.d / init.el
Eu uso em
.emacs.d/init.el
vez de,.emacs
pois essa configuração me permite colocar.emacs.d
no git. Tendo~/.emacs
faz com que você crie um link simbólico para o repositório git ou tenha o repositório git em seu diretório pessoal. Se você usar.emacs.d
, tudo está resolvido..gitignore
Meu .gitignore é uma lista em branco em vez da lista em preto padrão.
Essa configuração permite que você se concentre no que realmente precisa, em vez do que não precisa.
.emacs.d
não é como o repositório de código-fonte, o que significa que não apenas seu código reside, mas também todos os outros arquivos temporários gerados automaticamente. Você realmente não sabe o que entrará. Portanto, " ignorar tudo por padrão e adicionar arquivos de seu interesse " é uma estratégia melhor, IMO.BTW, eu mantenho a maior parte da configuração no
init.el
, em vez de usar o esquema de vários arquivos. A razão é que um arquivo grande me permite: a) usar ferramentas padrão comooccur
ouisearch-forward
mudar para a configuração que eu quero; b) usar ooutshine
que torna meuinit.el
org-cycle
-able; c) não mudar o meu.gitignore
o tempo todo.Gerenciador de pacotes
A menos que você tenha necessidades especiais de sincronizar a versão do Emacs e / ou a versão Packages em todo o seu sistema, não coloque os pacotes no git.
Package.el
está bem.use-package
também está bem. Cask é legal. Escolha seu gerenciador de pacotes e confirme apenas seu arquivo de configuração, mas não o próprio pacote.ie Uma das necessidades especiais em que posso pensar seria ter dois sistemas, um desenvolvimento e implantação, e eles devem ter exatamente a mesma configuração do Emacs.
fonte
init.el
arquivo funciona, desde que esse arquivo não fique muito grande. O Emacs não é bom em lidar com arquivos grandes e, depois de um tempo, começa a rastrear ao editar um arquivo grandeinit.el
. Outra vantagem de dividir sua configuração em vários arquivos é que eles funcionam melhor com o git, que em determinadas situações pode considerar que as alterações em um único arquivo sejam um conflito de mesclagem, mas não se as alterações estiverem em arquivos separados. Finalmente, é muito mais fácil comentar apenas requisitos únicos do que grandes partes do seu arquivo init.Eu tenho as seguintes coisas no meu .hgignore
Se você deseja compartilhar seu init com outras pessoas, considere remover todos os arquivos de histórico, como o criado pelo modo savehist. Além disso, acho que não há truques especiais para isso. Todas as diretrizes que você segue para projetos de código de versão funcionam bem aqui também.
fonte
Com o tempo, os pacotes adicionam muitas coisas
~/.emacs
e acabo adicionando-os um a um ao meu.gitignore
. Eu também tenho umprivate.el
que contém senhas, código específico da máquina, etc, que eu não acompanho.Isto é o que eu tenho agora.
fonte
Depende de quais pacotes / recursos você usa, para que fique complicado. Além dos arquivos mencionados por Vamsi, por exemplo, se você usar o dired-immage, ele criará um diretório para armazenar miniaturas em cache. É provável que você queira ignorar arquivos .elc também.
fonte
Publico meu arquivo .emacs.d, mas uso um subrepo com as alterações privadas (senhas e outras). Para permitir que outras pessoas o clonem, a ramificação padrão aponta para um subrepo de espaço reservado e cada máquina tem sua própria ramificação nomeada.
Ao mesclar entre máquinas, primeiro
graft
as novas alterações nadefault
filial e depois asdefault
mesclamos nas outras ramificações do local de trabalho.Como exemplo, você pode encontrar meu arquivo .emacs.d no bitbucket , incluindo um leia-me com um breve guia de uso.
Convém adicionar o driver de mesclagem no modo organizacional a essa configuração.
fonte
Após várias iterações, determinei que, embora o controle de versão seja ótimo para compartilhar código e rastrear alterações, não é uma ótima solução para sincronizar uma configuração que muda rapidamente entre computadores. O motivo é que há muitas coisas que devem ser sincronizadas e não devem estar no controle de versão. Alguns exemplos:
.elc
arquivos (recompilá-los quando houver uma alteração na configuração é um grande aborrecimento e os erros deelc
arquivos desatualizados costumam ser difíceis de depurar).elpa
diretório inteiro (e até que a fixação da versão se torne padrão, a reconstrução automática apenas não é confiável o suficiente).eshell
histórico egnus
arquivos.(Observe que os problemas entre plataformas não estão na lista - deve ser perfeitamente adequado ter uma configuração que funcione em vários sistemas operacionais.) Em vez de usar o git como uma solução de sincronização, eu o uso apenas como uma solução de rastreamento de código e sincronize usando o Dropbox. Dessa forma, todos os arquivos irritantes que não deveriam estar no controle de versão são resolvidos.
Eu não , no entanto, ter um objetivo de ter a configuração do meu ser rebuildable da fonte, se a configuração do meu Dropbox desaparece por qualquer razão, então eu manter o controle de todos os pacotes instalados e outros enfeites na fonte. Minhas informações privadas também são armazenadas em um submódulo git. Mas, para a sincronização diária, o git simplesmente não é uma ótima solução.
fonte