2009-02-02 6 views
2

Je travaille avec un autre développeur de l'autre côté du pays qui dirige notre projet et n'utilise pas de système de contrôle de version formel. De mon côté, je surveille tout mon code dans git. J'ai récemment commencé à contribuer au projet principal, et j'aimerais être capable de suivre les mises à jour de l'autre développeur. Lorsque je reçois le code mis à jour, il se présente généralement sous la forme d'un fichier zip. Si je décompresse simplement le fichier dans mon dossier de travail de git, git croit que chaque fichier a changé, sans doute parce que l'information de stat a changé.Fusion de modifications à l'extérieur d'un dépôt git

Ce que je voudrais voir est une façon que je peux décompressez le nouveau code aux côtés de ma copie de travail, et de fusionner seulement dans les changements. Quelle est la meilleure façon de faire cela? Comme c'est un projet Powerbuilder, la plupart des fichiers sont des binaires.

Merci!

+1

Sûrement c'est pour quoi Git est conçu? Obtenir le développeur pour utiliser GIT:/ –

+1

Oui, je me rends compte que s'il utilisait git, ce serait trivial. Cependant, j'espère que je pourrai trouver un moyen de récolter les bénéfices de mon côté sans devoir convaincre quelqu'un d'autre de changer ses pratiques de développement. – Doug

Répondre

7

Les binaires, si elles sont stockées dans Git, sont tenus de créer une nouvelle version (par exemple à prendre en compte lors de la prochaine commit). Donc, avez-vous besoin de ces binaires ou pouvez-vous les reconstruire?

En ce qui concerne les sources, dans Git, SHA1 is king et depuis la date du fichier (horodatages) est impliqué dans son calcul, puisque l'ensemble externe de fichiers peut être assez différent dans son contenu (plusieurs fichiers, temporaire les fichiers, les fichiers qui doivent être ignorés, ...), il serait préférable de:

  • dézipper dans un répertoire distinct
  • utiliser un outil comme WinMerge pour détecter les changements en fonction du contenu, les fusionner, et alors ne commettre que les fichiers qui ont réellement évolué.
    Vous venez de comparer les deux ensembles de répertoires et de fichiers: celui où vous avez décompressé le développement de votre collègue lointain, et celui dans lequel vous travaillez actuellement.

Merci à rq de remarquer que horodatages ne font pas partie du calcul SHA1. Seul le:

  • Type
  • taille
  • contenu d'un blob

font partie de SHA1 computation: alt text http://alexgirard.com/git-book/assets/images/figure/object-blob.png

Cependant, lors de l'importation grand nombre de fichiers externe géré dans un git repository, vous risquez d'ajouter de nouveaux fichiers dans les répertoires git-gérés, en changeant leur contenu, d'où leur clé SHA1, même si vieux Les fichiers gérés par git n'ont pas changé.
Cela signifie que beaucoup de changements dans l'arborescence sont artificiels si ces nouveaux fichiers ne sont que des fichiers temporaires ou des fichiers qui devraient être ignorés/recréés/régénérés de toute façon.

alt text http://alexgirard.com/git-book/assets/images/figure/object-tree.png

Le processus ci-dessus juste d'assurer un moyen externe pour détecter ce qui a changé entre un ensemble externe des fichiers et un ensemble git gérés de dossier et juge si elle doit faire partie de la git répertoire de travail ou non.

+0

Je l'ai fait comme vous l'avez suggéré, et WinMerge me donne exactement ce dont j'ai besoin pour déterminer quels fichiers utiliser dans ma copie de travail. Merci! – Doug

+0

L'heure du fichier n'a rien à voir avec cela. Exécuter "fichier tactile" ne marque pas comme changé dans git, ce serait la folie. – richq

+0

@rq: true. J'ai corrigé la réponse en conséquence – VonC

1

Vérifiez si contrib/fast-import/import-zips.py ferait ce que vous voulez.

1

cela, altho pas tout à fait sûr une bonne idée, est ce que je pense à faire dans presque la même situation:

Qu'en est-il maintenant essentiellement une prise en pension pour eux?

Toutes les modifications que vous recevez sont placées dans leur dépôt et validées. puis fusionner leur repo, qui serait une télécommande suivie, dans le vôtre quand vous en avez besoin?

Questions connexes