¿Usar git para sincronizar la colección de files existente?

Tengo una colección de files que anteriormente vivía en un repository de Subversion; en mi nuevo server los he importado a un repository git para poder comenzar a get más experiencia con eso.

En muchas otras máquinas, tengo en su mayoría copys actualizadas de los files svn repo existentes.

  • ¿Hay alguna forma de sincronizar con el nuevo repository git, pero use estos files existentes para no tener que volver a transferir todos los datos?

  • ¿Es lo suficientemente inteligente como para hacer una búsqueda? o pago y envío? que notará que los files son idénticos y no los vuelve a transferir?

Git no opera en files, pero con instantáneas. Y el protocolo que Git usa para decidir qué necesita download funciona en commits completos a la vez. Si inicializa dos repos con files ligeramente diferentes (o incluso files idénticos, pero no tienen confirmaciones en común), necesitará download todos los objects cuando recupere, aunque habrá muchos treees duplicates y blobs que limpiará en una date posterior.

Puede probar esto inicializando dos repositorys con los mismos files y mirando el espacio en disco mientras ejecuta estos commands:

du -sh .git git remote add origin ../other git fetch du -sh .git git prune du -sh .git 

El paso de fetch copyrá todos los datos, y el paso de transferencia eliminará todos los objects duplicates.

Si quieres poder search de manera eficiente, en algún momento tendrás que demostrarle a Git que tienes algunas confirmaciones en común, ya que el protocolo push / fetch se comunica usando commits completos (y realmente con nombres de twigs). La forma más fácil es simplemente clonar su repository git en alguna parte, y luego puede basar el trabajo en eso y sincronizar sus diversos cambios de manera eficiente.

Sin embargo, si tiene acceso a la misma instantánea de SVN en varios serveres, puede crear commits idénticos si los treees 100% idénticos y usan la misma información para GIT_AUTHOR_NAME, GIT_AUTHOR_DATE, y así sucesivamente.

¿Tal vez git-svn es lo que estás buscando?

Permite el funcionamiento bidireccional entre un repository Subversion y un repository Git.

Nunca lo he usado, pero conozco desarrolladores que sí lo usan. Les permite search files de Subversion, usar Git como su propio sistema privado de control de versiones donde pueden save cambios sin tener que enviarlos a Subversion. Luego, una vez que terminan, vuelven a empujar sus cambios a Subversion.