Adicionar arquivo fora do repositório git

Adicionar arquivo fora do repositório git

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

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

  1. Eu instalo-o com o gerenciador de pacotes localmente e instalo-o manualmente no servidor remoto. Dessa forma, os arquivos não ficam sincronizados. Tudo bem, já que o arquivo vem do gerenciador de pacotes, não é realmente um arquivo no qual estou trabalhando. No entanto, sempre preciso instalá-lo separadamente ao mudar 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.

  2. Eu o instalo localmente em meu diretório inicial e o adiciono ao repositório. Dessa forma não preciso instalá-lo separadamente em máquinas diferentes, ele fica sincronizado, mas não é mais atualizado pelo gerenciador de pacotes. Isso é o que estou fazendo agora.

E aqui está a questão: existe uma terceira maneira – melhor – de fazer isso? alguma gitmágica de link simbólico?

Responder1

Pela sua descrição, concluí que você deseja executar o script Shell na máquina remota. Mas talvez fosse mais conveniente configurar um script de shell para ser executado apenas em sua máquina local, enviando o pacote do diretório de pacotes local para o repositório git local. Então você poderia usar o cron ou, melhor ainda, um gancho de commit do git, para executar esse script para que você esteja sempre sincronizado.

[Movido de comentário para resposta mediante solicitação]

Responder2

Estou usando o seguinte gancho pré-empurrado 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

informação relacionada