Quero usar o controle de versão, mas, por razões de segurança, o servidor no qual estou trabalhando não tem acesso à Internet: só posso mover arquivos em uma unidade flash USB. Ainda posso usar o Git com esta configuração? Posso criar pequenos patches que posso aplicar em um repositório Git?
84
server
para uma máquina não conectada a nenhuma rede. Poderia ser apenas uma rede local, mesmo sem acesso à Internet, mas ainda assim é uma rede.Respostas:
Claro, não há nada no Git que exija um protocolo específico. Imediatamente, o cliente padrão suporta HTTP (S), SSH, o protocolo Git personalizado e, principalmente, o protocolo local . Isso apenas leva o caminho para um
.git
diretório local , que pode estar dentro do diretório ativo (/path/to/project/.git
) ou apenas um diretório simples (/path/to/project.git
), embora a nomeação seja apenas uma convenção.Isso significa que você pode, é claro, adicionar uma unidade flash como controle remoto:
ou, no Windows:
Ou adicione-o como um controle remoto adicional com um nome diferente (se você preferir
origin
apontar para um servidor da Internet em algum lugar):Então você pode simplesmente pressionar / puxar para / deste controle remoto como qualquer outro.
Se você ler a documentação , notará que também existe um
file://
protocolo que se comporta de maneira ligeiramente diferente. É recomendável usar um caminho local, pois isso fará uso de algumas otimizações adicionais - se você usar ofile://
protocolo, o git usará alguns componentes de rede padrão (para conversar com o disco local), que é mais lento.fonte
file://
também é um pouco mais flexível. Ele permite que você use alguns recursos (como clones rasos) que não podem com um caminho local.Em um único computador, nada de especial é necessário. Execute
git init
no diretório desejado e trabalhe com o Git como faria normalmente.Para sincronizar um repositório em vários computadores, existem vários métodos.
Método 1a (sem rede): você pode criar um 'repositório vazio' no pen drive, pressioná-lo e puxá-lo como faria com qualquer outro repositório remoto. Em outras palavras, as operações do repositório por caminhos locais não diferem das operações por URLs SSH ou HTTPS.
Crie um repositório 'remoto':
No computador 1, envie tudo:
No computador 2, bem, o mesmo de sempre.
(Você também pode enviar / buscar / puxar diretamente de um URL ou caminho.)
Método 1b (rede interna): se você tiver um servidor interno com SSH disponível e se o Git estiver instalado, poderá fazer o mesmo como acima , basta especificar um endereço SSH usando a sintaxe
[user@]host:path
oussh://[user@]host/path
.Crie um repositório 'remoto' executando
git init --bare <somepath.git>
no servidor designado (via SSH).No computador 1, da mesma maneira como demonstrado anteriormente.
Ou se você preferir:
No computador 2, novamente o mesmo que o método 1a.
Método 2: você pode criar 'pacotes de transferência' que arquivam uma determinada lista de confirmações em um único arquivo.
Infelizmente, os comandos do pacote configurável não se lembram automaticamente do que já foi fornecido da última vez; portanto, é necessário marcação manual ou manutenção de notas. Vou apenas pegar os exemplos do manual git-bundle.
No computador 1, crie um pacote de toda a ramificação:
No computador 2, retire do pacote como se fosse um repositório:
Os pacotes subsequentes não precisam compactar o todo
master
- eles podem compactar apenas os commits recém-adicionadoslast-bundled..master
.No computador 1, crie um pacote de confirmações recém-adicionadas:
O mesmo que acima.
fonte
manual tagging or note-keeping is needed
, Uma opção a menos que o repo é muito grande é:git bundle create my.bundle --all
, ele deve conter tudo.git/
pasta oculta), sem uma 'árvore de trabalho' (os arquivos editáveis). É a forma preferida para os repositórios que vocêgit push
deseja.git bundle create
Um dos métodos é usar armazenamento externo para trocar dados entre repositórios é o git bundle . Dessa forma, você possui apenas arquivos únicos para cada transferência, não repositórios intermediários do Git.
Cada "git push" se transforma em criação de um arquivo, "git fetch" busca coisas desse arquivo.
Sessão de demonstração
Criando o primeiro repositório e executando o primeiro "push"
"clonagem" para o segundo repositório (ou seja, o segundo computador):
Fazendo algumas alterações e "enviando-as" para outro arquivo de pacote configurável:
"pull" muda para o primeiro repositório:
Ao contrário do primeiro pacote, o segundo contém apenas histórico parcial do Git e não é diretamente clonável:
Há uma desvantagem no uso de pacotes configuráveis que você precisa especificar manualmente qual intervalo de confirmações cada pacote configurável deve conter. Ao contrário
git push
,git bundle
não acompanha o que estava no pacote anterior, é necessário ajustar manualmenterefs/remotes/origin/master
ou os pacotes seriam maiores do que poderiam ser.fonte
--all
bandeira para obter tudo. Se o repo for pequeno o suficiente, esse é o processo mais simples, pois você simplesmente transfere tudo sempre! Apenas não perca o cartão de memória - provavelmente o maior problema de segurança!Você precisa primeiro instalar o Git . Em seguida, para criar um novo repositório, execute dentro da pasta que você copiou:
Em seguida, você pode adicionar os arquivos que deseja controlar a versão
git add
(adicionar-a
para todos os arquivos) e começar a confirmar as alterações (git commit
).Você não precisa enviar para nenhum controle remoto, pois pode trabalhar no seu histórico local (
git log
).Para mais informações, verifique:
git
- o guia simplesEmpurrar / puxar sem internet
Usando o
git push
comando, é possível enviar por SSH (usando conexão local, intranet):ou empurrando para a pasta:
Isso pressupõe que você tenha duas cópias do seu repositório.
O mesmo com puxar, por exemplo
Remendo
Para aplicar patches, você pode usar o
patch
comando ougit apply
.Consulte: Criar arquivo de correção ou diff a partir do repositório git e aplicá-lo a outro repositório git diferente .
fonte
Você também pode usar o Git localmente. Seus commits são armazenados apenas localmente, e você ainda possui controle de versão (e pode diferir / mesclar etc.), mas você simplesmente não pode acessar o repositório a partir de qualquer outro computador.
Você pode iniciar um repositório Git local executando
git init
na sua pasta local. Como descrito aqui .fonte