Adiciona o arquivo fora do repositório git [closed]

4

Suponha que eu tenha uma estação de trabalho local com acesso root e um servidor sem acesso root. Eu quero compartilhar (principalmente configuração) arquivos entre esses dois computadores. Então eu configurei um repositório git com o nível superior no meu diretório inicial e adicionei esses arquivos. Até aí tudo bem.

Suponha ainda que exista um arquivo que eu precise em ambos os computadores. Ele vem com o gerenciador de pacotes e, como tal, será instalado fora do meu diretório pessoal. Não está instalado no servidor e não será instalado no servidor. Agora tenho duas opções:

  1. Eu o instalo localmente com o gerenciador de pacotes e o instalo no servidor remoto manualmente. Desta forma, os arquivos não estão em sincronia. Isso é um pouco bom, já que o arquivo vem do gerenciador de pacotes, não é realmente um arquivo que estou trabalhando. No entanto, sempre preciso instalá-lo separadamente ao migrar para um novo servidor, e isso acontece com frequência. Eu poderia adicionar um script de shell que instala o pacote e adicionar esse script de shell ao repositório git, embora.

  2. Eu o instalo localmente no meu diretório pessoal e o adiciono ao repositório. Dessa forma, não tenho que instalá-lo separadamente em máquinas diferentes, ele é mantido em sincronia, mas não é mais atualizado através do gerenciador de pacotes. É o que estou fazendo agora.

E aqui está a pergunta: Existe uma terceira - melhor maneira de fazer isso? qualquer magia de link simbólico git ?

    
por pfnuesel 05.11.2016 / 23:34

2 respostas

2

A partir da sua descrição, imaginei que você queria executar o script de shell na máquina remota. Mas talvez seja mais conveniente configurar um shell script para rodar apenas em sua máquina local, empurrando o pacote do diretório de pacotes local para o seu repositório git local. Então você poderia usar o cron ou, ainda mais, um git commit hook, para rodar este script para que você esteja sempre em sincronia.

[Movido de comentário para responder a pedido]

    
por 06.11.2016 / 01:49
0

Estou usando o seguinte gancho de pré-push agora:

#!/usr/bin/env bash

# Copy local files that are outside the repository (because they are controlled
# by the package manager) into the repository and commit them
# Although this is a pre-push hook, the files are not included in this push
# See also: http://unix.stackexchange.com/q/321328/58056

#remote="$1"
#url="$2"

localFiles=(
    /usr/bin/rg
    /usr/share/man/man1/rg.1.gz
    /usr/share/vim/vimfiles/autoload/pathogen.vim
)
remoteFiles=(
    /home/foo/pkg/bin/rg
    /home/foo/pkg/man/man1/rg.1
    /home/foo/.vim/autoload/pathogen.vim
)

echo "Execute git pre-push hook"

for idx in "${!localFiles[@]}"; do 
    localFile="${localFiles[$idx]}"
    remoteFile="${remoteFiles[$idx]}"
    echo -n "Copy ${localFile} to ${remoteFile}... "
    cp "${localFile}" "${remoteFile}"
    echo "Done."
    echo -n "Add ${remoteFile} to repository... "
    git add -f "${remoteFile}"
    echo "Done."
done

echo "Commit if there is anything to commit... "
git commit -m "Automatically add files by git pre-push hook" \
    && echo -n "Some files were added and commited (but not pushed) " \
    && echo "by the git pre-push hook"

# Don't interfere with the push, so always exit with success
exit 0
    
por 06.11.2016 / 09:49

Tags