Je suis étudiant, je développe avec plusieurs camarades de classe et je prévois d'utiliser git
Actuellement, git a construit un entrepôt nu et les hooks peuvent être automatiquement synchronisés avec le projet Web.
Puisque le code sur le serveur n'est pas un entrepôt, je souhaite maintenant importer le code initialement sur un autre serveur dans l'entrepôt nu, puis laisser les membres de l'équipe le récupérer. Comment faire ? La façon dont j'ai proposé était d'abord d'extraire le code vers la zone locale, puis de le pousser de la zone locale vers l'entrepôt central. Grâce à la synchronisation automatique, l'entrepôt central synchronisera automatiquement le code poussé avec le projet Web. Mais personnellement, je pense qu’il devrait y avoir une meilleure solution. S'il vous plaît dites-moi?
De plus, le référentiel git général est-il utilisé pour l'ensemble du projet ? Ou une partie du projet ? S'il s'agit de l'intégralité du projet et que les utilisateurs téléchargent des images, les images téléchargées ne devraient-elles pas être mises à jour localement à chaque fois qu'elles sont mises à jour ?
Je recherche des informations depuis longtemps, mais il y a très peu d'informations sur cet aspect. Veuillez me donner une explication détaillée.
============================
Bonjour, notre équipe a actuellement un problème dans le projet. En raison d'un bug dans le projet lors de la version 5.1, un camarade de classe a corrigé le bug chez lui, mais git n'était pas installé sur son ordinateur, il a donc utilisé FTP pour le télécharger. . Maintenant, comme FTP est utilisé pour le téléchargement, l'entrepôt central n'est pas utilisé, donc la post-réception des hooks n'est pas déclenchée, et la post-réception ne sera pas poussée vers le projet de site Web (un peu compliqué, j'espère que quelqu'un pourra comprendre) , il est donc maintenant impossible d'obtenir le pull en utilisant git La partie qu'il a téléchargée. Le problème maintenant est que je dois écrire un hook supplémentaire. Une fois le projet de site Web modifié (s'il est téléchargé par FTP), il sera transféré vers l'entrepôt central, puis il pourra être obtenu localement. Assurez-vous que les projets d’entrepôt central et de site Web peuvent être synchronisés dans les deux sens. Peut-être que notre approche n'est pas très bonne, mais pour le moment, nous ne pouvons faire que cela. Bien sûr, nous espérons que le maître fournira d'ailleurs une meilleure méthode. Merci encore
La description du problème n'est pas très claire, je vais donc décrire brièvement ce que je comprends.
La méthode de migration du code ne pose aucun problème.
Généralement, l'entrepôt utilisé par git est l'intégralité du projet, qui peut contenir certains sous-modules.
Ce que vous avez dit à propos du téléchargement d'images par les utilisateurs est en fait une autre question. Avez-vous synchronisé l'entrepôt du projet git avec le serveur et l'avez-vous utilisé comme répertoire du projet Web ?
Si c'est le cas, il y aura un petit problème. Tout d'abord, une meilleure approche est que l'entrepôt git n'est utilisé que pour le développement. Quant à la publication et au déploiement de projets Web, utilisez Jenkins et autres pour le faire. le processus est :
Les développeurs de projets déclenchent le webhook de github via des opérations, telles que l'envoi de code, le balisage, etc.
Github demande votre outil de déploiement en fonction de la configuration du webhook et informe votre outil de déploiement d'effectuer davantage l'action de publication.
L'outil de déploiement extrait le dernier code dans le répertoire de code, conditionne le projet Web via des scripts ou des commandes, génère un nouveau répertoire de projet Web et le publie sur le serveur.
Dans ce cas, les images de l'utilisateur sont téléchargées dans le répertoire du projet sur le serveur au lieu du répertoire du code git, il n'y a donc pas lieu de s'inquiéter de la mise à jour des images téléchargées.
De plus, il peut y avoir des problèmes de sécurité lors de la publication d'un référentiel de code en tant que projet Web. Si les droits d'accès ne sont pas bien contrôlés, d'autres personnes peuvent obtenir les fichiers de votre projet git, ce qui peut divulguer certaines informations.
La méthode que vous avez mentionnée est une très bonne méthode. Les deux entrepôts distants ne peuvent pas communiquer directement entre eux et doivent être transférés.
Bien sûr, les images des utilisateurs, le cache, etc. doivent être ignorés et seuls les codes valides sont stockés dans l'entrepôt.
En fait, le dossier
.git
contient toutes les informations, vous pouvez le copier directement. Mais git a des commandes pour faire çaCette opération est fondamentalement la même que l'opération suivante :
Téléchargez ensuite le
my_project.git
obtenu sur le serveur où se trouve l'entrepôt nu (remplacez le dossier). La documentation git donne une introduction très détaillée :Git-on-the-Server-Getting-Git-on). -un-serveur.
Quant à la deuxième question, n'hésitez pas à ajouter l'projet entier à git pour la gestion, y compris les fichiers de ressources, les documents, etc. Cela facilitera la collaboration des équipes. Mais n'incluez pas les fichiers générés par la compilation. Ceci est défini via .gitignore. Quant à la question de la mise à jour des images, si l'image est une ressource à utiliser dans ce projet, alors elle sera naturellement récupérée. Il n'y a aucun problème.
Il existe également des équipes qui ajoutent la configuration IDE générée automatiquement sous le projet à la gestion des versions. Si les membres de l'équipe utilisent tous le même IDE, ils peuvent partager les paramètres.
============
Attendez, pourquoi "L'entrepôt central synchronise automatiquement le code push avec le projet Web", je pense que vous devriez faire référence au service Web en cours d'exécution, et le serveur de build doit avoir un entrepôt local non modifié, soumettez activement à l'entrepôt de code
pull
, puis démarrez la build en fonction du dernier code et actualisez le service Web ou le package en fonction des résultats de la build. Cette action peut être déclenchée par des hooks, mais les référentiels de code publics ne doivent pas l'initierpush
.