Mercurial verfolgt nur Dateien und keine Verzeichnisse .
Eine Lösung ist das Hinzufügen einer leeren Datei zu Ihrem Repository:
$ touch uploads/.empty $ hg add uploads/.empty
In meinem Projekt verwende ich Mercurial und einen Ordner, in dem der Benutzer eine Datei hochladen kann. Da der Benutzer jedoch Dateien hochlädt, ist der Ordner leer.
Ich weiß nicht, wie ich diesen Ordner zu meinem Projekt hinzufügen kann, ohne eine Datei hineinzulegen.
Weißt du, wie ich das machen kann?
Mercurial verfolgt nur Dateien und keine Verzeichnisse .
Eine Lösung ist das Hinzufügen einer leeren Datei zu Ihrem Repository:
$ touch uploads/.empty $ hg add uploads/.empty
Ich habe ein Python-Skript erstellt, das das Erstellen / Löschen dieser Dateien automatisiert.
Hier ist die Quelle des Skripts: http://pastebin.com/inbYmMut
#!/usr/bin/python # Copyright (c) 2011 Ernesto Mendez (der-design.com) # Dual licensed under the MIT and GPL licenses: # http://www.opensource.org/licenses/mit-license.php # http://www.gnu.org/licenses/gpl.html # Version 1.0.0 # - Initial Release from __future__ import generators import sys from optparse import OptionParser import os def main(): # Process arguments if len(args) > 1: parser.error('Too many arguments') sys.exit() elif len(args) == 0: parser.error('Missing filename') sys.exit() if not os.path.exists(options.directory): parser.error("%s: No such directory" % options.directory) sys.exit() filename = args[0] # Create generator filetree = dirwalk(os.path.abspath(options.directory)) # Walk directory tree, create files if options.remove == True: removed = ['Removing the following files: \n'] cmd = "rm" for file in filetree: if (os.path.basename(file) == filename): removed.append(file) cmd += " %s" % fixpath(file) if cmd != "rm": for f in removed: print f os.system(cmd) else: print "No files named '%s' found" % filename sys.exit() # Walk directory tree, delete files else: created = ["Creating the following files:\n"] cmd = "touch" for file in filetree: if (os.path.isdir(file)): created.append("%s%s" % (file, filename)) cmd += " " + fixpath("%s%s" % (file, filename)) if cmd != "touch": for f in created: print f os.system(cmd) else: print "No empty directories found" sys.exit() def dirwalk(dir, giveDirs=1): # http://code.activestate.com/recipes/105873-walk-a-directory-tree-using-a-generator/ for f in os.listdir(dir): fullpath = os.path.join(dir, f) if os.path.isdir(fullpath) and not os.path.islink(fullpath): if not len(os.listdir(fullpath)): yield fullpath + os.sep else: for x in dirwalk(fullpath): # recurse into subdir if os.path.isdir(x): if giveDirs: yield x else: yield x else: yield fullpath def wrap(text, width): return reduce(lambda line, word, width=width: '%s%s%s' % (line, ' \n'[(len(line)-line.rfind('\n')-1 + len(word.split('\n', 1)[0] ) >= width)], word), text.split(' ') ) def fixpath(p): return shellquote(os.path.normpath(p)) def shellquote(s): return "'" + s.replace("'", "'\\''") + "'" def init_options(): global parser, options, args parser = OptionParser(usage="usage: %prog [options] filename", description="Add or Remove placeholder files for SCM (Source Control Management) tools that do not support empty directories.") parser.add_option("-p", "--path", dest="directory", help="search within PATH", metavar="PATH") parser.add_option("-r", "--remove", dest="remove", action="store_true", help="remove FILE from PATH, if it's the only file on PATH") (options, args) = parser.parse_args() if __name__ == '__main__': print init_options() main() print
Sie tun einfach folgendes:
mkdir images && touch images/.hgkeep hg add images/.hgkeep hg commit -m"Add the images folder as an empty folder"
Beachten Sie dabei Folgendes:
In Ihrem Fall laden Sie möglicherweise Bilder in Ihre Entwicklungsumgebung hoch. Daher würde ich empfehlen, der .hgignore
Datei Folgendes hinzuzufügen, damit Sie nicht versehentlich Bilder festschreiben, die Sie nicht festgeschrieben haben:
^(images)\/(?!\.hgkeep)
Die Regel ignoriert alles, images/**
außer der .hgkeep
Datei, die Sie benötigen, um einen "leeren" Ordner zur Versionskontrolle hinzuzufügen. Der Grund, warum diese Regel wichtig ist, besteht darin, dass alle Dateien in diesem Ordner (dh sie images/test-image.png
werden wie eine neue, nicht versionierte Datei in Ihrem aussehen, hg status
wenn Sie dieses Muster nicht ignorieren.