Use versioned objects (original) (raw)

Skip to main content

Use versioned objects

Overview Setup

This page describes how to list, access, restore, and delete noncurrent objects, which typically applies to buckets with the featureObject Versioning enabled.

Required roles

To get the permissions that you need to manage noncurrent objects, ask your administrator to grant you the Storage Object User (roles/storage.objectUser) IAM role on the project. This predefined role contains the permissions required to manage noncurrent objects. To see the exact permissions that are required, expand the Required permissions section:

Required permissions

You might also be able to get these permissions with custom roles.

For information about granting roles on projects, seeManage access to projects.

Depending on your use case, you might need additional permissions or alternative roles:

List noncurrent object versions

To list both live and noncurrent versions of objects and view theirgeneration numbers:

Console

  1. In the Google Cloud console, go to the Cloud Storage Buckets page.
    Go to Buckets
  2. In the list of buckets, click the name of the bucket that contains the wanted object.
    The Bucket details page opens, with the Objects tab selected.
  3. To view noncurrent objects, click the Show drop-down and selectLive and noncurrent objects.
  4. In the list of objects, click the name of the object whose versions you want to see.
    The Object details page opens, with the Live Object tab selected.
  5. Click the Version history tab to see all versions of the object.

Command line

Use the gcloud storage ls --all-versions command:

gcloud storage ls --all-versions gs://BUCKET_NAME

Where BUCKET_NAME is the name of the bucket that contains the objects. For example, my-bucket.

The response looks like the following example:

gs://BUCKET_NAME/OBJECT_NAME1#GENERATION_NUMBER1 gs://BUCKET_NAME/OBJECT_NAME2#GENERATION_NUMBER2 gs://BUCKET_NAME/OBJECT_NAME3#GENERATION_NUMBER3 ...

Client libraries

C++

For more information, see theCloud Storage C++ API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

C#

For more information, see theCloud Storage C# API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

Go

For more information, see theCloud Storage Go API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

Java

For more information, see theCloud Storage Java API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

Node.js

For more information, see theCloud Storage Node.js API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

PHP

For more information, see theCloud Storage PHP API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

Python

For more information, see theCloud Storage Python API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

Ruby

For more information, see theCloud Storage Ruby API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

REST APIs

JSON API

  1. Have gcloud CLI installed and initialized, which lets you generate an access token for the Authorization header.
  2. Use cURL to call the JSON API with anObjects: list request:
    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o?versions=true"
    Where BUCKET_NAME is the name of the bucket that contains the objects. For example, my-bucket.

Noncurrent versions of objects have a timeDeleted property.

XML API

  1. Have gcloud CLI installed and initialized, which lets you generate an access token for the Authorization header.
  2. Use cURL to call the XML API, with aGET Bucket request and versions query string parameter:
    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://storage.googleapis.com/BUCKET_NAME?versions&list-type=2"
    Where BUCKET_NAME is the name of the bucket that contains the objects. For example, my-bucket.

There are a few differences in the results of the GET request when using the versions query parameter compared to not using it. Specifically, Cloud Storage returns the following information when you include a versions query parameter in your request:

Access noncurrent object versions

To use the noncurrent version of an object when performing tasks such as downloading the object, viewing its metadata, or updating its metadata:

Console

General access to a noncurrent version is not available in the Google Cloud console. Using the Google Cloud console, you can only move, copy, restore or delete a noncurrent version. These actions are performed from the version history list for an object.

Command line

  1. Append the generation number of the noncurrent version to the object name:
    OBJECT_NAME#GENERATION_NUMBER
    Where:
    • OBJECT_NAME is the name of the noncurrent version. For example, pets/dog.png.
    • GENERATION_NUMBER is the generation number for the noncurrent version. For example, 1560468815691234.
  2. Using the string from the previous step, proceed as you normally would for the live version of the object. For example, to view the metadata of a noncurrent object version, use thegcloud storage objects describe command:
    gcloud storage objects describe gs://my-bucket/pets/dog.png#1560468815691234

REST APIs

JSON API

  1. Append the generation number of the noncurrent version to the URI for the object:
    https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME?generation=GENERATION_NUMBER
    Where:
    • BUCKET_NAME is the name of the bucket containing the noncurrent version. For example, my-bucket.
    • OBJECT_NAME is the URL-encoded name of the noncurrent version. For example, pets/dog.png, URL-encoded aspets%2Fdog.png.
    • GENERATION_NUMBER is the generation number for the noncurrent version. For example, 1560468815691234.
  2. Using the URI from the previous step, proceed as you normally would for the live version of the object. For example, to view the metadata of a noncurrent object version, use cURL to call theJSON API with an Objects: get request:
    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://storage.googleapis.com/storage/v1/b/my-bucket/o/pets/dog.png?generation=1560468815691234"

XML API

  1. Append the generation number of the noncurrent version to the URI for the object:
    https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME?generation=GENERATION_NUMBER
    Where:
    • BUCKET_NAME is the name of the bucket containing the noncurrent version. For example, my-bucket.
    • OBJECT_NAME is the URL-encoded name of the noncurrent version. For example, pets/dog.png, URL-encoded aspets%2Fdog.png.
    • GENERATION_NUMBER is the generation number for the noncurrent version. For example, 1560468815691234.
  2. Using the URI from the previous step, proceed as you normally would for the live version of the object. For example, to view the metadata of a noncurrent object version, use cURL to call theXML API with a HEAD Object request:
    curl -I GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://storage.googleapis.com/my-bucket/pets/dog.png?generation=1560468815691234"

Restore noncurrent object versions

In Cloud Storage, restoring a noncurrent object version means making a copy of it. When you do so, the copy becomes the live version, effectively restoring the version. If there is already a live version and the bucket has Object Versioning enabled, restoring the noncurrent version causes the pre-existing live version to become noncurrent.

Console

  1. In the Google Cloud console, go to the Cloud Storage Buckets page.
    Go to Buckets
  2. In the list of buckets, click the name of the bucket that contains the wanted object.
    The Bucket details page opens, with the Objects tab selected.
  3. To view noncurrent objects, click the Show drop-down and selectLive and noncurrent objects.
  4. In the list of objects, click the name of the object version you want to restore.
    The Object details page opens, with the Live Object tab selected.
  5. Click the Version history tab.
  6. Click the Restore button for the wanted version.
    The restore object version pane opens.
  7. Click Confirm.

Command line

Use the gcloud storage cp command:

gcloud storage cp gs://BUCKET_NAME/OBJECT_NAME#GENERATION_NUMBER gs://BUCKET_NAME

Where:

If successful, the response looks like the following example:

Operation completed over 1 objects/58.8 KiB.

Client libraries

C++

For more information, see theCloud Storage C++ API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

C#

For more information, see theCloud Storage C# API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

Go

For more information, see theCloud Storage Go API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

Java

For more information, see theCloud Storage Java API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

Node.js

For more information, see theCloud Storage Node.js API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

PHP

For more information, see theCloud Storage PHP API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

Python

For more information, see theCloud Storage Python API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

Ruby

For more information, see theCloud Storage Ruby API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

REST APIs

JSON API

  1. Have gcloud CLI installed and initialized, which lets you generate an access token for the Authorization header.
  2. Use cURL to call the JSON API with aPOST Object request:
    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Length: 0" \
    "https://storage.googleapis.com/upload/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME/rewriteTo/b/BUCKET_NAME/o/OBJECT_NAME?sourceGeneration=GENERATION_NUMBER"
    Where:
    • BUCKET_NAME is the name of the bucket containing the noncurrent version you want to restore. For example, my-bucket.
    • OBJECT_NAME is the URL-encoded name of the noncurrent version you want to restore. For example,pets/dog.png, URL-encoded as pets%2Fdog.png.
    • GENERATION_NUMBER is thegeneration number for the noncurrent version you want to restore. For example, 1560468815691234.

XML API

  1. Have gcloud CLI installed and initialized, which lets you generate an access token for the Authorization header.
  2. Use cURL to call the XML API, with aPUT Object request:
    curl -X PUT \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "x-goog-copy-source: BUCKET_NAME/OBJECT_NAME" \
    -H "x-goog-copy-source-generation:GENERATION_NUMBER" \
    "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME"
    Where:
    • BUCKET_NAME is the name of the bucket containing the noncurrent version you want to restore. For example, my-bucket.
    • OBJECT_NAME is the URL-encoded name of the noncurrent version you want to restore. For example,pets/dog.png, URL-encoded as pets%2Fdog.png.
    • GENERATION_NUMBER is thegeneration number for the noncurrent version you want to restore. For example, 1560468815691234.

After restoring the object version, the original noncurrent version continues to exist in the bucket. If you no longer need the noncurrent version, you can subsequently delete it or configure Object Lifecycyle Management to remove it when it meets the conditions you specify.

Delete noncurrent object versions

Console

  1. In the Google Cloud console, go to the Cloud Storage Buckets page.
    Go to Buckets
  2. In the list of buckets, click the name of the bucket that contains the wanted object.
    The Bucket details page opens, with the Objects tab selected.
  3. To view noncurrent objects, click the Show drop-down and selectLive and noncurrent objects.
  4. Navigate to the object, which may be located in a folder.
  5. In the list of objects, click the name of the object whose version you want to delete.
    The Object details page opens, with the Live Object tab selected.
  6. Click the Version history tab.
  7. Select the checkbox for the wanted version.
  8. Click the Delete button.
    The delete version pane opens.
  9. Confirm you want to delete the object by typing delete into the text field.
  10. Click Delete.

Command line

Use the gcloud storage rm command:

gcloud storage rm gs://BUCKET_NAME/OBJECT_NAME#GENERATION_NUMBER

Where:

If successful, the response looks like the following example:

Operation completed over 1 objects.

Client libraries

C++

For more information, see theCloud Storage C++ API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

C#

For more information, see theCloud Storage C# API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

Go

For more information, see theCloud Storage Go API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

Java

For more information, see theCloud Storage Java API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

Node.js

For more information, see theCloud Storage Node.js API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

PHP

For more information, see theCloud Storage PHP API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

Python

For more information, see theCloud Storage Python API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

Ruby

For more information, see theCloud Storage Ruby API reference documentation.

To authenticate to Cloud Storage, set up Application Default Credentials. For more information, seeSet up authentication for client libraries.

REST APIs

JSON API

  1. Have gcloud CLI installed and initialized, which lets you generate an access token for the Authorization header.
  2. Use cURL to call the JSON API with aDELETE Object request:
    curl -X DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME?generation=GENERATION_NUMBER"
    Where:
    • BUCKET_NAME is the name of the bucket containing the noncurrent version you want to delete. For example,my-bucket.
    • OBJECT_NAME is the URL-encoded name of the noncurrent version you want to delete. For example,pets/dog.png, URL-encoded as pets%2Fdog.png.
    • GENERATION_NUMBER is thegeneration number for the noncurrent version you want to delete. For example, 1560468815691234.

XML API

  1. Have gcloud CLI installed and initialized, which lets you generate an access token for the Authorization header.
  2. Use cURL to call the XML API, with aDELETE Object request:
    curl -X DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME?generation=GENERATION_NUMBER"
    Where:
    • BUCKET_NAME is the name of the bucket containing the noncurrent version you want to delete. For example,my-bucket.
    • OBJECT_NAME is the URL-encoded name of the noncurrent version you want to delete. For example,pets/dog.png, URL-encoded as pets%2Fdog.png.
    • GENERATION_NUMBER is thegeneration number for the noncurrent version you want to delete. For example, 1560468815691234.

What's next

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.

Last updated 2025-06-12 UTC.