Eu tenho um repositório de mídia Git em que mantenho todos os meus arquivos e scripts mestres JavaScript e CSS que vou usar em vários projetos.
Se eu criar um novo projeto que esteja em seu próprio repositório Git, como uso os arquivos JavaScript do meu repositório de mídia no meu novo projeto de uma maneira que permita que eu não precise atualizar as duas cópias do script ao fazer alterações ?
git
git-submodules
multiple-repositories
Brent O'Connor
fonte
fonte
Respostas:
A chave é submódulos git .
Comece a ler o capítulo Submodules do Git Community Book ou do Manual do Usuário
Digamos que você tenha o repositório PROJECT1, PROJECT2 e MEDIA ...
Repita no outro repositório ...
Agora, o mais interessante é que, sempre que você confirmar alterações no MEDIA, poderá fazer o seguinte:
Isso acabou de registrar o fato de que o submódulo MEDIA WITHIN PROJECT2 está agora na versão XYZ.
Dá a você 100% de controle sobre qual versão do MEDIA cada projeto usa. Os sub-módulos git são ótimos, mas você precisa experimentar e aprender sobre eles.
fonte
Considere usar subárvore em vez de submódulos, isso facilitará muito a vida dos usuários de repositório. Você pode encontrar um guia mais detalhado no livro Pro Git .
fonte
Se entendi bem o seu problema, você deseja o seguinte:
Infelizmente, não existe uma solução definitiva para o que você deseja, mas existem algumas coisas pelas quais você pode facilitar sua vida.
Primeiro, você deve decidir uma coisa importante: deseja armazenar para cada versão no repositório do projeto uma referência à versão dos arquivos de mídia? Por exemplo, se você tem um projeto chamado example.com, precisa saber qual style.css foi usado há 2 semanas ou o mais recente é sempre (ou principalmente) o melhor?
Se você não precisa saber disso, a solução é fácil:
Na maioria dos casos, no entanto, você deseja conhecer essas informações de versão. Nesse caso, você tem duas opções:
Armazene todos os projetos em um grande repositório. A vantagem desta solução é que você terá apenas 1 cópia do repositório de mídia. A grande desvantagem é que é muito mais difícil alternar entre versões do projeto (se você fizer o checkout para uma versão diferente, sempre modificará TODOS os projetos)
Use submódulos (como explicado na resposta 1). Dessa forma, você armazenará os arquivos de mídia em um repositório e os projetos conterão apenas uma referência a uma versão específica de repositório de mídia. Porém, dessa forma, você normalmente terá muitas cópias locais do repositório de mídia e não poderá modificar facilmente um arquivo de mídia em todos os projetos.
Se eu fosse você, provavelmente escolheria a primeira ou a terceira solução (links ou submódulos simbólicos). Se você optar por usar submódulos, ainda poderá fazer muitas coisas para facilitar sua vida:
Antes de confirmar, você pode renomear o diretório do submódulo e colocar um link simbólico em um diretório de mídia comum. Quando estiver pronto para confirmar, você pode remover o link simbólico e remover o submódulo novamente e confirmar.
Você pode adicionar uma de sua cópia do repositório de mídia como um repositório remoto a todos os seus projetos.
Você pode adicionar diretórios locais como um controle remoto desta maneira:
Se você modificar um arquivo em / my / project1 / media, poderá confirmá-lo e retirá-lo de / my / project2 / media sem enviá-lo para um servidor remoto:
Você pode remover esses commits mais tarde (com redefinição do git) porque não os compartilhou com outros usuários.
fonte
www
pasta do Apache , você deve colocar um.htaccess
arquivo na raiz dawww
pasta ou do seu projeto,Options +FollowSymLinks
nela, ou melhor ainda<IfModule mod_rewrite.c>{new line}Options +FollowSymLinks{new line}RewriteEngine on{new line}</IfModule>
(substituir{new line}
pela nova linha real)Eu tive problemas com subárvores e submódulos que as outras respostas sugerem ... principalmente porque estou usando o SourceTree e parece bastante incorreto.
Em vez disso, acabei usando o SymLinks e isso parece funcionar bem, por isso estou postando aqui como uma possível alternativa.
Há um guia completo aqui: http://www.howtogeek.com/howto/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/
Mas basicamente você só precisa mklink os dois caminhos em um prompt de comando elevado. Certifique-se de usar o prefixo do link físico / J. Algo nesse sentido: mklink / JC: \ projects \ MainProject \ plugins C: \ projects \ SomePlugin
Você também pode usar caminhos de pasta relativos e colocá-lo em um bastão para ser executado por cada pessoa quando eles verificarem seu projeto pela primeira vez.
Exemplo: mklink / J. \ Assets \ TaqtileTools .. \ TaqtileHoloTools
Depois que a pasta estiver vinculada, talvez seja necessário ignorá-la no repositório principal que a está referenciando. Caso contrário, você está pronto para ir.
Observe que eu excluí minha resposta duplicada de outra postagem, pois ela foi marcada como uma pergunta duplicada para esta.
fonte