В настоящее время я работаю над Gitlet, которая является системой управления версиями, созданной по образцу Git. В настоящее время мои коммиты хранятся в папках, каждый из которых имеет свой идентификатор фиксации в качестве имени папки. Каждый файл должен быть «унаследован» для следующего коммита, если он не был изменен, но я не могу скопировать содержимое предыдущей фиксации в новую фиксацию, чтобы сэкономить место. Я нахожу это наследование, сохраняя файлы (ключи) и их пути (значения) в HashMap
. Каждый фиксатор имеет свой собственный HashMap
с собственными унаследованными файлами. Когда пользователь добавляет файл, на данный момент я только что обнаружил, что я только принимаю во внимание тот случай, когда пользователь пользователя находится в каталоге, в котором находится файл. Я не принимая во внимание, является ли пользователь из каталога, что файл его. Это приносит значительную проблему, потому что путь, который получает копируется в HashMap является <folder/folder2/file.txt = commits/3/folder/folder2/file.txt>
, когда я на самом деле просто хочу <file.txt = commits/3/file.txt>
Путь к файлу Grepping в java
Есть ли «простой» способ, я могу grep это, так что единственные вещи, которые копируются, являются фактическими именами файлов, а не папкой/папкой2?
я в настоящее время копирования файлов, как например:
try {
String path = "./.gitlet/commits/" + commitID;
for (String file : stagedQueue) {
File temp = new File(path + file);
Files.copy((new File(file).toPath()),
(new File(path + "/" + file).toPath()));
}
} catch (IOException e) { //closes try and starts catch
e.printStackTrace();
} //closes catch
Где stagedQueue является HashSet<String>
, содержащий файлы, которые были добавлены пользователем, которые будут включены в следующий коммит
Вы не имеете в виду 'grep'. Это даже не близко к тому, что вы хотите здесь. Вы имеете в виду, что хотите только часть файла этого пути? Поэтому трактуем строку как путь и получаем часть файла (у java должны быть функции для этого, я бы себе представлял). –