{"id":324274,"date":"2026-06-15T00:25:19","date_gmt":"2026-06-15T00:25:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/git-content-versions\/"},"modified":"2026-06-15T06:15:42","modified_gmt":"2026-06-15T06:15:42","slug":"content-version-for-git","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/content-version-for-git\/","author":23514087,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.4","stable_tag":"0.1.4","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Content Version for Git","header_author":"Makson Lee","header_description":"GitHub-backed version history for WordPress posts, pages, and media.","assets_banners_color":"6783b1","last_updated":"2026-06-15 06:15:42","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/github.com\/maksonlee","rating":0,"author_block_rating":0,"active_installs":0,"downloads":38,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.3":{"tag":"0.1.3","author":"maksonlee","date":"2026-06-15 00:24:54"},"0.1.4":{"tag":"0.1.4","author":"maksonlee","date":"2026-06-15 06:15:42"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3572320,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3572320,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3572320,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3572320,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3572320,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.3","0.1.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3572320,"resolution":"1","location":"assets","locale":"","width":1280,"height":1768},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3572320,"resolution":"2","location":"assets","locale":"","width":1280,"height":720},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3572320,"resolution":"3","location":"assets","locale":"","width":1280,"height":720},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3572320,"resolution":"4","location":"assets","locale":"","width":1280,"height":720}},"screenshots":{"1":"Content Versions Dashboard showing version store status, settings, import controls, and GitHub version store configuration.","2":"Content Versions page for a post with preview, diff, and restore actions.","3":"Side-by-side content diff and field diff view.","4":"Deleted Resources list with post, page, and media restore options."}},"plugin_section":[],"plugin_tags":[529,15326,1673,6243,24313],"plugin_category":[],"plugin_contributors":[267157],"plugin_business_model":[],"class_list":["post-324274","plugin","type-plugin","status-publish","hentry","plugin_tags-content","plugin_tags-git","plugin_tags-github","plugin_tags-revisions","plugin_tags-version-control","plugin_contributors-maksonlee","plugin_committers-maksonlee"],"banners":{"banner":"https:\/\/ps.w.org\/content-version-for-git\/assets\/banner-772x250.png?rev=3572320","banner_2x":"https:\/\/ps.w.org\/content-version-for-git\/assets\/banner-1544x500.png?rev=3572320","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/content-version-for-git\/assets\/icon.svg?rev=3572320","icon":"https:\/\/ps.w.org\/content-version-for-git\/assets\/icon.svg?rev=3572320","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/content-version-for-git\/assets\/screenshot-1.png?rev=3572320","caption":"Content Versions Dashboard showing version store status, settings, import controls, and GitHub version store configuration."},{"src":"https:\/\/ps.w.org\/content-version-for-git\/assets\/screenshot-2.png?rev=3572320","caption":"Content Versions page for a post with preview, diff, and restore actions."},{"src":"https:\/\/ps.w.org\/content-version-for-git\/assets\/screenshot-3.png?rev=3572320","caption":"Side-by-side content diff and field diff view."},{"src":"https:\/\/ps.w.org\/content-version-for-git\/assets\/screenshot-4.png?rev=3572320","caption":"Deleted Resources list with post, page, and media restore options."}],"raw_content":"<!--section=description-->\n<p>Content Version for Git stores editable WordPress content snapshots in a configured GitHub repository. It versions posts, pages, terms, and optionally media metadata and original media files. Editors can preview, diff, and restore previous versions from the WordPress admin.<\/p>\n\n<p>The plugin writes and reads Git objects through the GitHub API. It does not keep a local Git repository and does not call the git CLI.<\/p>\n\n<p>Features include:<\/p>\n\n<ul>\n<li>Automatic Git versions for normal post and page saves.<\/li>\n<li>Side-by-side content diffs and field diffs.<\/li>\n<li>Full restore and content-only restore modes.<\/li>\n<li>Deleted Resources view for posts, pages, and tracked media.<\/li>\n<li>Restore deleted posts\/pages as new drafts and deleted media as new attachments.<\/li>\n<li>Optional media metadata and file tracking.<\/li>\n<li>Manual import of existing posts, pages, and media.<\/li>\n<li>Version store dashboard with branch, latest commit, tracked file count, and GitHub version store status.<\/li>\n<li>Direct GitHub API commits without a local Git worktree.<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to GitHub when the \"Enable GitHub version store\" setting is enabled and a repository URL, branch, and personal access token are configured.<\/p>\n\n<p>When enabled, the plugin writes Git commits directly to the configured GitHub repository using the GitHub API. Commit data may include post\/page content, metadata, term references, media metadata, and media files if media tracking is enabled.<\/p>\n\n<p>The GitHub version store is disabled by default. No data is sent to GitHub unless a site administrator enables and configures it. Without the GitHub version store, this plugin does not keep durable local Git versions. GitHub's terms and privacy policy apply:<\/p>\n\n<ul>\n<li>https:\/\/docs.github.com\/en\/site-policy\/github-terms\/github-terms-of-service<\/li>\n<li>https:\/\/docs.github.com\/en\/site-policy\/privacy-policies\/github-privacy-statement<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/content-version-for-git\/<\/code> directory, or install the plugin through the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the Plugins screen in WordPress.<\/li>\n<li>Open Content Versions &gt; Dashboard.<\/li>\n<li>Configure the GitHub version store and media tracking.<\/li>\n<li>Use Import Existing Content if you want to add existing posts, pages, and media to GitHub.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20are%20git%20versions%20stored%3F\"><h3>Where are Git versions stored?<\/h3><\/dt>\n<dd><p>GitHub is the version store. The plugin reads and writes versions through the GitHub API without a local Git repository.<\/p><\/dd>\n<dt id=\"does%20this%20replace%20wordpress%20revisions%3F\"><h3>Does this replace WordPress revisions?<\/h3><\/dt>\n<dd><p>No. It adds a Git-backed version history for selected WordPress resources.<\/p><\/dd>\n<dt id=\"does%20the%20github%20version%20store%20run%20by%20default%3F\"><h3>Does the GitHub version store run by default?<\/h3><\/dt>\n<dd><p>No. The GitHub version store is disabled until an administrator enables it and provides a repository URL, branch, and token. Without GitHub configured, versions are not durably stored and the plugin does not keep a local Git repository.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20github%20api%20writes%20fail%3F\"><h3>What happens if GitHub API writes fail?<\/h3><\/dt>\n<dd><p>The version is not stored. Configure GitHub before relying on the plugin for durable version history.<\/p><\/dd>\n<dt id=\"are%20media%20files%20stored%20in%20git%3F\"><h3>Are media files stored in Git?<\/h3><\/dt>\n<dd><p>Only when media tracking is enabled. In that mode, referenced media metadata and files are committed directly to GitHub.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.4<\/h4>\n\n<ul>\n<li>Clarified that GitHub is the required durable version store.<\/li>\n<li>Renamed GitHub-related UI wording to GitHub version store.<\/li>\n<\/ul>\n\n<h4>0.1.3<\/h4>\n\n<ul>\n<li>Tightened restore permissions for full Git version restores.<\/li>\n<li>Replaced trusted output wrappers with late escaping for generated admin HTML.<\/li>\n<li>Removed runtime shell diff generation from the diff view.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Renamed the plugin and package slug for WordPress.org resubmission.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Addressed WordPress.org review feedback for asset enqueuing, filesystem locations, and plugin metadata.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial public release candidate.<\/li>\n<li>Added Git-backed versions for posts, pages, terms, and optional media resources.<\/li>\n<li>Added preview, diff, full restore, and content-only restore.<\/li>\n<li>Added Deleted Resources and restore-as-new flows.<\/li>\n<li>Added import existing content controls.<\/li>\n<li>Added GitHub version store settings.<\/li>\n<\/ul>","raw_excerpt":"GitHub-backed version history for WordPress posts, pages, and media.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/324274","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=324274"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/maksonlee"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=324274"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=324274"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=324274"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=324274"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=324274"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=324274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}