2010-05-14 6 views
10

Ich habe zwei Kopien einer Website, eine ist die Produktionskopie, und die andere ist die Entwicklungskopie. Ich habe kürzlich alles in der Produktion zu einem Subversion-Repository hinzugefügt, das auf unserem Linux-Backup-Server gehostet wird. Ich habe ein Tag der aktuellen Version erstellt und ich war fertig.Subversion flippt mich aus!

Ich kopierte dann die Entwicklerkopie über die Produktionskopie (auf meinem lokalen Rechner, wo ich alles ausgecheckt habe). Es gibt nur 10-20 Dateien, die geändert werden. Wenn ich SVN für eine Commit-Operation verwende, sagt es, dass sich jede Datei geändert hat. Die generierte Diff-Datei zeigt Subversion, indem alles entfernt und durch die neue Version ersetzt wird (die genau die gleiche ist).

Was ist los? Wie repariere ich es?

Ein Beispiel diff:

Index: C:/Users/jhollon/Documents/Visual Studio 2008/Projects/saloon/trunk/components/index.html 
=================================================================== 
--- C:/Users/jhollon/Documents/Visual Studio 2008/Projects/saloon/trunk/components/index.html (revision 5) 
+++ C:/Users/jhollon/Documents/Visual Studio 2008/Projects/saloon/trunk/components/index.html (working copy) 
@@ -1,4 +1,4 @@ 
-<html> 
-<body bgcolor="#FFFFFF"> 
-</body> 
+<html> 
+<body bgcolor="#FFFFFF"> 
+</body> 
</html> 
\ No newline at end of file 
+2

Das klingt nach einem Problem mit [newlines] (http://en.wikipedia.org/wiki/Newline): vielleicht wurden sie irgendwie in CRLF umgewandelt? – Veeti

+0

Ich denke, es ist ein End-of-Line-Problem. Zeigen Sie das Diff mit einem Werkzeug an, das End-of-Line-Markierungen anzeigt, und Sie werden sehen, dass diese unterschiedlich sind.:) – mihi

+0

Der schnellste Weg, das Vorhandensein eines Zeilenendes zu ermitteln, besteht darin, die Ausgabe durch 'od -c' zu pipen und dann nach dem Tell-Tale zu suchen. ' –

Antwort

8

Es ist wahrscheinlich ein Zeilenende-Mismatch. Legen Sie die Eigenschaft svn:eol-style=native für alle Ihre Dateien fest.

http://svnbook.red-bean.com/en/1.5/svn.advanced.props.file-portability.html#svn.advanced.props.special.eol-style

Sie können Subversion diese Eigenschaft standardmäßig auf allen neuen Dateien festgelegt haben:

http://svnbook.red-bean.com/en/1.5/svn.advanced.props.html#svn.advanced.props.auto

Hier ist, was in meinem ist ~/.subversion/config:

enable-auto-props = yes 

### Section for configuring automatic properties. 
[auto-props] 
### The format of the entries is: 
### file-name-pattern = propname[=value][;propname[=value]...] 
### The file-name-pattern can contain wildcards (such as '*' and 
### '?'). All entries which match will be applied to the file. 
### Note that auto-props functionality must be enabled, which 
### is typically done by setting the 'enable-auto-props' option. 
*.c = svn:eol-style=native 
*.cpp = svn:eol-style=native 
*.h = svn:eol-style=native 
# *.dsp = svn:eol-style=CRLF 
# *.dsw = svn:eol-style=CRLF 
*.sh = svn:eol-style=native;svn:executable=* 
*.txt = svn:eol-style=native 
*.png = svn:mime-type=image/png 
*.jpg = svn:mime-type=image/jpeg 
*.jpeg = svn:mime-type=image/jpeg 
Makefile = svn:eol-style=native 
*.tmpl = svn:eol-style=native 
*.gif = svn:mime-type=image/gif 
*.t = svn:eol-style=native;svn:executable=* 
*.pm = svn:eol-style=native 
*.pl = svn:eol-style=native;svn:executable=* 
*.cgi = svn:eol-style=native;svn:executable=* 
*.js = svn:eol-style=native;svn:mime-type=application/x-javascript 
*.dtd = svn:eol-style=native;svn:mime-type=application/xml-dtd 
*.txt = svn:eol-style=native;svn:mime-type=text/plain 
*.html = svn:eol-style=native;svn:mime-type=text/html 
*.yicf = svn:eol-style=native 
*.xml = svn:eol-style=native;svn:mime-type=text/xml 
*.sgml = svn:eol-style=native;svn:mime-type=text/sgml 
*.xul = svn:mime-type=application/vnd.mozilla.xul+xml 
*.tt = svn:eol-style=native 
+0

Das war's, die neue Version hatte/n und die alt hatte/r/n – Malfist

-1

Kurzfristige Lösung (um den Unterschied zwischen den beiden Versionen zu überprüfen): Überprüfen Sie die beiden Versionen in zwei separaten Directori zu vergleichen es, und vergleichen Sie die Verzeichnisse mit einem externen Diff-Tool (meld in Linux, Winmerge in Windows). Diese Tools können so konfiguriert werden, dass sie Unterschiede zwischen den Zeilenenden ignorieren.

Edit: für den Rest, David M-Lösung verwendet (wußte nicht, SVN, dass gelänge ...)

+0

Huch, erstellen Sie keine Subversion-Hooks, um mit EOL-Zeichen zu diddle. Sie können explizit was Sie wollen. 'svn: eol-style = native' ist die richtige Wahl, es sei denn, Sie haben einen guten Grund, etwas anderes zu tun. –

0

Ich sehe Sie Visual Studio verwenden, vielleicht hat es mit der Datei-Codierung zu tun ? Ich hatte seltsame Probleme mit VS, Quelldateien unterschiedlich auf zwei verschiedenen Maschinen zu kodieren, obwohl die Maschinen die gleichen Sprach- und Kultureinstellungen haben. In VS sehen die Quellen genau gleich aus, aber SVN sieht die Raw-Dateien ...

Öffnen Sie die beiden Revisionen in einem Editor, der nichts über Unicode oder Kodierung weiß (ich glaube, ich habe Notepad verwendet?), Und sehen Sie, ob sie sind anders. Die erste Zeile der Datei enthält einen Code, der angibt, welcher Codetyp verwendet wird. Ich habe keine Ahnung, wie ich diesen Code interpretiere, aber zumindest werden Sie feststellen können, ob sie anders sind.

Es gibt Optionen unter Extras -> Optionen -> Umgebung -> Dokumente, die die Codierung steuern.

+0

Eigentlich verwende ich nicht Visual Studio, es wurde gerade in dieses Verzeichnis eingefügt, da dort alle meine Projekte gespeichert werden. Es wird tatsächlich mit Dreamweaver verwendet – Malfist

0

Klingt wie diese Frage ist bereits gut beantwortet (EOL-Stil). Ich wollte nur eine andere Sache hinzufügen, die ein Problem wie dieses auslösen kann: Tabs vs Spaces. Wenn Ihr Texteditor oder IDE Leerzeichen zum Einrücken verwendet und jemand anderes in Ihrem Team Tabs verwendet, sieht SVN viele Dateiänderungen, aber Sie werden die Änderung nicht "sehen".