Faits: A. A._, ressortissant marocain né en 1970, se trouve en détention préventive depuis le 3 mars 2010 sous l'inculpation de tentative de meurtre (art. 111 et 22 al. 1 CP), subsidiairement de lésions corporelles graves (art. 122 CP), de menaces (art. 180 CP) et de possession de stupéfiants (art. 19a LStup). Il lui est notamment reproché d'avoir, dans la nuit du 26 au 27 février 2010, vers 1h05, avec un groupe de sept ou huit personnes armées de couteaux et de pierres, porté plusieurs coups de couteau à Ali Ahmed ou d'avoir accepté que ses comparses le fassent. La victime, qui tentait de fuir, aurait reçu au minimum six coups de couteaux, dont au moins un à la hauteur des omoplates et dont un autre aurait tranché son nerf sciatique provoquant une paralysie de sa jambe gauche. La détention préventive a été régulièrement prolongée par la Chambre d'accusation du canton de Genève (ci-après: la Chambre d'accusation), en raison des risques de réitération et de collusion. La procédure a été communiquée au Ministère public du canton de Genève le 30 juin 2010. Par arrêt du 4 août 2010 (1B_233/2010), le Tribunal fédéral a rejeté un recours formé par A._ contre un refus de mise en liberté, considérant que les charges étaient suffisantes et que le risque de réitération apparaissait suffisamment démontré, compte tenu de la gravité des actes et des antécédents du recourant, condamné en 2008 pour lésions corporelles simples et infraction à la LStup. B. Par ordonnance du 12 novembre 2010, la Chambre d'accusation a rejeté une nouvelle requête de mise en liberté, en reprenant les motifs retenus par le Tribunal fédéral et en ajoutant qu'aucun fait nouveau pertinent n'était survenu et que le principe de la proportionnalité était respecté. Par acte du 16 novembre 2010, A._ forme un recours en matière pénale par lequel il demande l'annulation de l'ordonnance de la Chambre d'accusation et sa mise en liberté, subsidiairement le renvoi de la cause à la cour cantonale pour nouvelle décision dans le sens des considérants. Il requiert l'assistance judiciaire. La Chambre d'accusation se réfère à sa décision. Le Procureur général conclut au rejet du recours. Le recourant a pu répliquer.