Подсказки для того, чтобы подвергнуть ~ управлению исходным кодом

Если файл /etc/debian_version существует, распределением является Debian или производная Debian. Этот файл может иметь номер выпуска; на моей машине это в настоящее время 6.0.1. Если это тестирует или нестабильное, это может сказать, что тестирование / нестабильный, или может иметь количество предстоящего выпуска. Мое впечатление - то, что на Ubuntu, по крайней мере, этот файл всегда является тестированием / нестабильный, и что они не помещают номер выпуска в него, но кто-то может исправить меня, если я неправ.

Fedora (недавние выпуски, по крайней мере), имейте подобный файл, а именно, /etc/fedora-release.

77
03.10.2016, 05:12
8 ответов

Я имею $HOME при мерзавце. Первая строка моего .gitignore файла

/*

Остальные - шаблоны для не игнорирования использования ! модификатор. Эта первая строка означает, что значение по умолчанию должно проигнорировать все файлы в моем корневом каталоге. Те файлы, которые я хочу к управлению версиями, входят .gitignore как это:

!/.gitignore
!/.profile
[...]

Более хитрый шаблон, который я имею:

!/.ssh
/.ssh/*
!/.ssh/config

Таким образом, я только хочу присвоить версию .ssh/config - Я не хочу, чтобы мои ключи и другие файлы в .ssh вошли в мерзавца. Вышеупомянутое - то, как я достигаю этого.

Править: Добавленные наклонные черты для запуска всех путей. Это делает проигнорировать соответствие шаблонов из вершины репозитория ($HOME) вместо где угодно. Например, если !lib/ был шаблон (не игнорируйте все в каталоге lib), и Вы добавляете файл .gitignore, ранее шаблон (!.gitignore) соответствовал этому. С ведущей наклонной чертой (!/.gitignore), это будет только соответствовать .gitignore в моем корневом каталоге а не в любых подкаталогах.

Я не видел случай, где это имеет практическое значение с моим черным списком, но это, кажется мне более технически точно.

60
27.01.2020, 19:31

То, что я делаю (с теми же целями) должно поместить мои конфигурационные файлы в подкаталог ~/lib и имейте символьные ссылки в моем корневом каталоге, например, .emacs -> lib/emacs/dot.emacs. Я только сохраняю конфигурационные файлы, которые я записал явно при управлении версиями; мой корневой каталог содержит plently автоматически созданных точечных файлов, которые не являются объектом управления версиями. Таким образом ~/lib является объектом управления версиями, и мой корневой каталог не.

У меня есть сценарий, который создает символьные ссылки из файлов под ~/lib. Когда я создаю учетную запись на новой машине, я заполняю ее путем проверки ~/lib и запущение того скрипта.

Мой опыт с CVS, не мерзавцем, таким образом, это не на 100% передаваемо. Одна из причин, я не помещал свой корневой каталог непосредственно под CVS, является этим ~/.cvsignore относился бы ко всему моему контролю CVS и не только моему корневому каталогу; у мерзавца нет этой проблемы. Оборотная сторона того подхода по сравнению с наличием корневого каталога при управлении версиями - то, что Вы не можете использовать git status различать файл, который Вы явно решили проигнорировать (который был бы перечислен в проигнорировать файле, таким образом, не отображенный) и файле, о котором у Вас нет мнения (который был бы отображен с a ?).

Некоторые файлы должны отличаться на различных машинах. Я поместил их в названный каталог ~/Local/SITENAME/lib и или создайте символьные ссылки для них также или (для форматов файлов, которые поддерживают его), имеют включать директиву в файле под ~/lib. У меня также есть символьная ссылка ~/Here -> ~/Local/SITENAME. Так как мерзавец, в отличие от CVS, разработан для поддержки mostly-similar-but-not-identical репозиториев, может быть лучший способ управлять определенными для машины файлами. Несколько моих точечных файлов являются на самом деле не символьными ссылками, но автоматически сгенерированный от содержания под ~/lib и ~/Here.

24
27.01.2020, 19:31
  • 1
    Возможно, у Вас есть core.excludesfile = ~/.gitignore. Без такой конфигурации файл не применяется ни к какому репозиторию кроме одного сохраненного в ~/.git (даже затем это не относилось бы к подрепозиториям). Я использую core.excludesfile = ~/.git-user-excludes для предотвращения конфликта между исключением, я хочу, относился ко всем моим репозиториям Мерзавца (независимо от местоположения) и исключение, я хочу, относился к репозиторию, который содержит (части) мой корневой каталог. –  Chris Johnsen 11.09.2010, 23:23
  • 2
    @Chris: Я знаю чрезвычайно мало о мерзавце. Я, возможно, неправильно понял это предложение в gitignore страница справочника: “Шаблоны, считанные из .gitignore файла в том же каталоге как путь, или в любом родительском каталоге (…)”, Делают это, на самом деле останавливаются в корне контроля (т.е. где .git каталог)? –  Gilles 'SO- stop being evil' 11.09.2010, 23:57
  • 3
    Да, вверх ищут .gitignore файлы ограничены полностью рабочего дерева. Предложение, которое Вы заключили в кавычки, продолжается: “(до верхнего уровня дерева работы)”. –  Chris Johnsen 12.09.2010, 01:15
  • 4
    @Chris: моя версия страницы справочника не имеет этих слов — похоже, что формулировка была разъяснена. Я исправил свой ответ.Спасибо! –  Gilles 'SO- stop being evil' 12.09.2010, 03:28
  • 5

Я использую старое rcs для этого.

Взгляните на страницы справочника для ci, co, и rcs. Те сайты должны быть полезными также:

Я использую это для версии, управляющей моим dotfiles, например:

ci -u .*vimrc

И если я хочу отредактировать их:

co -l .*vimrc

Я рекомендую делать каталог названным RCS в Вашем ~, можно затем легко скопировать тот каталог где-нибудь.

5
27.01.2020, 19:31
  • 1
    rcs довольно датирован теперь, и мерзавец делает все, что rcs делает и намного больше, кроме того. Я раньше использовал rcs для чего-либо локального, где я не хотел издержки установки репозитория на сервере, но я полностью переключился на мерзавца теперь для того типа использования. Я даже записал сценарий, который переносит cvs2git для преобразования существующей иерархии каталогов с rcs файлами в нем мерзавцу. –  Neil Mayhew 11.09.2010, 07:09
  • 2
    Да, я знаю, что это датировано. Вопрос был для подсказки относительно того, как сделать это. Я только что сказал этому парню, как я делал его для многих, много лет ("датированный", подсказка, подсказка). Это не было предназначено в способе, которым это - единственный разумный способ сделать это. дб –  polemon 19.06.2013, 06:18

Я проверяю свои файлы конфигурации к $HOME/.conf/ от BitBucket Подвижный репозиторий. GitHub repo работал бы точно также.

~/.conf контроль содержит файлы конфигурации и сценарий оболочки для заполнения символьных ссылок в $HOME в каждый файл в ~/.conf. Для форматов конфигурации то включение поддержки (.bashrc, .inputrc, .vimrc, и т.д.), я включаю ~/.conf файл, а не ссылка на него, так, чтобы я мог сделать локальные переопределения.

Для некоторых файлов конфигурации I символьных ссылок на файл в моей папке Dropbox и доле с помощью Dropbox.

В течение нескольких месяцев я пытался сохранить $HOME самостоятельно в управлении версиями, но мне усталый от управления крупными черными списками, я усталый от регистрации в изменениях конфигурации, внесенных запущенными приложениями и результатом, даже не был чем-то, что я захочу проверить на другой компьютер. Можно ли предположить фиксировать конфликты ~/.gconf или ~/.config/monitors.xml, или питание fro отличающиеся версии настольных приложений?

Я нахожу это легче к символьной ссылке на или включаю ограниченный список файлов конфигурации, которые я лично настроил и хочу совместно использовать через машины как глобальные значения по умолчанию.

5
27.01.2020, 19:31

Я думаю, что Ваша вторая догадка для несвязывания папки при управлении исходным кодом хороша.

Просто добавьте 2 сценария оболочки там. Один для копирования файлов под управлением к ~ и другой для сбора файлов из ~ и скопируйте его назад в управляемую источником папку и фиксацию.

1
27.01.2020, 19:31

Вот маленький рубиновый сценарий, который я использую для установки новой машины

#!/usr/bin/env ruby
# setup.rb

#list of dirs which you don't want to symlink
ignored = %w(.gitignore .gitmodules misc setup.rb readme)

current_dir = File.expand_path(Dir.pwd)
home_dir = File.expand_path("~")

links = `git ls-tree --name-only HEAD`.lines.map(&:strip).select {|x| !ignored.include?(x)  }

links.each do |link|
  link = File.join(current_dir, link)
  symlink = File.join(home_dir, File.basename(link))
  `ln -ns #{link} #{symlink}`
end
0
27.01.2020, 19:31

Я только что начал использовать следующий сценарий Python Dotfiles, который является удобным инструментом, который автосвязывает файлы для Вас: https://pypi.python.org/pypi/dotfiles

3
27.01.2020, 19:31

Мы можем использовать возможность Git для продолжения отслеживания файлов, даже если они перечислены в .gitignore . Итак, этого достаточно для .gitignore :

$ cat .gitignore
/*

Для каждого файла, который вы хотите отслеживать, выполните add -f (параметр -f отменяет игнорирование оба в .gitignore и .git / info / exclude ):

git add -f .gitignore
git add -f .profile
git add -f .zshrc
git add -f .ssh/config

После индексации файла Git будет отслеживать все изменения, несмотря на то, что файл игнорируется. То же самое работает для каталога, но только для реально существующих файлов:

git add -f somedirname

Если вы хотите отслеживать весь каталог с всеми новыми файлами , которые появляются в нем, его можно исключить из ] .gitignore способом, описанным в ответе camh :

!/somedirname

Если вы когда-нибудь захотите прекратить отслеживание файла, эта команда удаляет файл из индекса Git, но оставляет его нетронутым на странице жесткий диск:

git rm --cached .ssh/config
11
27.01.2020, 19:31

Теги

Похожие вопросы